欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 重复开仓的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有15306人关注过本帖树形打印复制链接

主题:重复开仓的问题

帅哥哟,离线,有人找我吗?
infocell
  81楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:152 积分:0 威望:0 精华:0 注册:2015/3/2 13:11:05
  发帖心情 Post By:2015/3/6 16:54:20    Post IP:117.136.11.86[只看该作者]

今天说那么多,你还不明白思路啊,我该怎么说,好吧,我回头抽时间写一下,看你们到底是不是真能解决

 回到顶部
帅哥哟,离线,有人找我吗?
infocell
  82楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:152 积分:0 威望:0 精华:0 注册:2015/3/2 13:11:05
  发帖心情 Post By:2015/3/6 16:55:33    Post IP:117.136.11.86[只看该作者]

我看到的更多是推来推去

 回到顶部
帅哥哟,离线,有人找我吗?
infocell
  83楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:152 积分:0 威望:0 精华:0 注册:2015/3/2 13:11:05
  发帖心情 Post By:2015/3/6 17:36:39    Post IP:110.84.52.125[只看该作者]

 

INPUT:Buy_START(8900,1,25000,1),Buy_STEP(20,1,500,1),Buy_END(9000,1,25000,1),Buy_SS(1,1,6,1);//,买点区间:(Buy_START(区间起点),Buy_END(区间终点)),每隔Buy_STEP=20点买Buy_SS手

INPUT:Sell_START(8080,1,25000,1),Sell_STEP(30,1,500,1),Sell_END(8170,1,25000,1),Sell_SS(1,1,6,1);//,卖点区间:(Sell_START(区间起点),Sell_END(区间终点)),每隔Sell_STEP=30点卖Sell_SS手
 

INPUT:CS_con(25,1,500,1),CS_sell(10,1,500,1);//,CS_num(1,1,500,1);//条件单价位及卖单价位计算值低于买点25,就在买点+10的点位挂止盈单
INPUT:MAX_hold(10,1,30,1);//最大持仓数

INPUT:Myopentime(085400,083000,240000,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:NMIN(2,1,100,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:Mydebug(1,0,1,1);

VARIABLE:Num_p0=(Buy_END-Buy_START)/Buy_STEP+1;//买点个数

VARIABLE:SNum_p0=(Sell_END-Sell_START)/Sell_STEP+1;//卖点个数

VARIABLE:I_tmp=0,S_tmp=0,S_tmp1=0;
VARIABLE:Buy_point[Num_p0]=0;//买点数组,把买区间拆成买点放在该数组
VARIABLE:B_price[Num_p0]=0;//成交价

VARIABLE:B_flag[Num_p0]=0;//买点标记
VARIABLE:S_point[SNum_p0]=0;//卖点数组,把卖区间拆成买点放在该数组
VARIABLE:CB_flag[Num_p0]=0;//基于买点的条件单标记
VARIABLE:S_flag[SNum_p0]=0;//卖点标记
VARIABLE:B_NUM=0;//买的总量的标记,不能超过最大持仓数
VARIABLE:Is_debug=1,Is_log=1;//调试与记录标志

my_closetime:=190000;
开仓时间:=TIME>Myopentime AND TIME<my_closetime-NMIN*100;// AND TIME>083000;//防止参数异常,写两遍开仓时间,开仓时间:=TIME>OPENTIME(1)-200 AND TIME<150000-NMIN*100;
平仓时间:=TIME>=my_closetime-NMIN*100;
Ttmp:=TIME;
Ttmp1:=150000-NMIN*100;
{NMIN为参数,CLOSETIME(0)-NMIN*100表示 收盘时间-提前N分钟 N由NMIN控制}

开多平空条件:=开仓时间 AND ISLASTBAR;//用于跳过历史计算
开空平多条件:=开仓时间 AND ISLASTBAR;
IF Mydebug=1 THEN BEGIN
开多平空条件:=开仓时间;
开空平多条件:=开仓时间;

END

 


 //信号闪烁处理,用买的总量进行比较,如果本周期已经买过就不再执行。
 kkkttt:=REF(B_NUM,1);
 IF REF(B_NUM,1)>0 AND REF(B_NUM,1)<B_NUM THEN BEGIN
 EXIT;
 END
 IF REF(B_NUM,1)<=0 AND ABS(HOLDING)>0 THEN BEGIN
 EXIT;
 END

 


//区间买初始化
FOR I_tmp=1 TO Num_p0 DO BEGIN
// S:=S+VAR1[J];
 IF Buy_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
Buy_point[I_tmp]:=Buy_START+(I_tmp-1)*Buy_STEP;//从起点开始把每个买点放到买点数组Buy_point[I_tmp]中,如果I_tmp=1,就是Buy_point[1]:=Buy_START;如果I_tmp=2,Buy_point[2]:=Buy_START+Buy_STEP; 


END;


//卖点初始化
FOR I_tmp=1 TO SNum_p0 DO BEGIN
// S:=S+VAR1[J];
 IF S_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
S_point[I_tmp]:=Sell_START+(I_tmp-1)*Sell_STEP;//从起点开始把每个买点放到买点数组S_point[I_tmp]中,如果I_tmp=1,就是S_point[1]:=Sell_START;如果I_tmp=2,S_point[2]:=Sell_START+Sell_STEP; 

END;


 

nettmp:=OPENPROFIT;
IF nettmp>=0 AND 平仓时间 AND holding<0 THEN BEGIN//收盘平仓

收盘平空:sellshort(平仓时间 and holding<0,0,MARKET);
EXIT;
END
//区间0 开空
//如果持仓超过10手,退出

FOR I_tmp=1 TO Num_p0 DO BEGIN

//当前最低价大于买点Buy_point[I_tmp]价格时买入Buy_SS,买过1次就不能再买了
 IF 开空平多条件 AND LOW>=Buy_point[I_tmp] AND B_flag[I_tmp]<=0 AND B_NUM<MAX_hold and ABS(holding)<MAX_hold  THEN BEGIN
  b_tmpp:=Buy_SS;

 IF b_tmpp+ABS(holding)>MAX_hold THEN b_tmpp:=ABS(MAX_hold-ABS(holding)); //开单量不能超过最大MAX_hold
 IF b_tmpp+B_NUM>MAX_hold THEN b_tmpp:=ABS(MAX_hold-B_NUM);//买单量不能超过最大值
 
   S_tmp:=HOLDING;
 
 //开空
    IF b_tmpp>0 AND b_tmpp<ABS(MAX_hold) THEN BEGIN 
      开空:buyshort(1,b_tmpp,MARKET);//LIMITR,OPEN);//b_tmpp是正常值开空;
      B_NUM:=B_NUM+1;//买单量加1     
  // END
     //IF HOLDING<>S_tmp THEN BEGIN
      B_price[I_tmp]:=ENTERPRICE;//记录成交价,用于开止盈单
      B_flag[I_tmp]:=1;//买标志置1,1个价位买过1次就不能再买了
      //输出调试信息
      IF Is_debug=1 THEN  MSGOUT(TRUE,'DòáD????:'&numtostr(BARPOS,0)&',?a??êy:'&numtostr(b_tmpp,0)&',3é????:'&numtostr(ENTERPRICE,0)&',3?2?:'&numtostr(HOLDING,0)&',???ˉóˉ?÷:'&numtostr(OPENPROFIT,0)&',×ü?òμ¥êy:'&numtostr(B_NUM,0)&',×ê2ú:'&numtostr(ASSET,0)&',êμê±:'&numtostr(ISLASTBAR,0)&',′¥·¢????:'&numtostr(Buy_point[I_tmp],0)&',±ê????:'&numtostr(B_flag[I_tmp],0));
    IF Is_log=1 THEN DEBUGFILE('C:\myTEST.TXT','DòáD????:'&numtostr(BARPOS,0)&',?a??êy:'&numtostr(b_tmpp,0)&',3é????:'&numtostr(ENTERPRICE,0)&',3?2?:'&numtostr(HOLDING,0)&',???ˉóˉ?÷:'&numtostr(OPENPROFIT,0)&',×ü?òμ¥êy:'&numtostr(B_NUM,0)&',×ê2ú:'&numtostr(ASSET,0)&',êμê±:'&numtostr(ISLASTBAR,0)&',′¥·¢????:'&numtostr(Buy_point[I_tmp],0)&',±ê????:'&numtostr(B_flag[I_tmp],0),0);
  
     END
 
         IF ABS(HOLDING)>=MAX_hold THEN BEGIN
        MSGOUT(TRUE,'警告:持仓达到上限,停止开空!');//NOAXIS,COLORGRAY;警告:"持仓达到上限,停止开空!";
        SENDPHONEMSG('警告:持仓达到上限,停止开空!',1);
      END

 END
END


 //开条件单处理
  //区间0平空条件单处理
 FOR I_tmp=1 TO Num_p0 DO BEGIN

 IF B_flag[I_tmp]>0 AND CB_flag[I_tmp]<>1 AND 开多平空条件 THEN BEGIN
 // S_tmp:=HOLDING;
 //IF OPEN<=(Buy_point[I_tmp]-CS_con) THEN BEGIN
 IF HIGH<=(B_price[I_tmp]-CS_con) THEN BEGIN//如果当前价的最高价小于成交价-CS_con,挂止盈单

 
  C平空:sellshort(holding<0, Buy_SS,STOPR,(B_price[I_tmp]-CS_sell)),IGNORECHECKPRICE;//如果当前价的最高价小于成交价-CS_con,挂止盈单成交价-CS_sell;
 
  CB_flag[I_tmp]:=1;//止盈单挂一次后,把标志位置1
   //输出调试信息

   END
 END
END
 
/////////////////////////平空
 //区间0平空 当前最高价小于卖点价格,卖出平仓HIGH<=S_point[I_tmp]

FOR I_tmp=1 TO SNum_p0 DO BEGIN

 IF S_flag[I_tmp]=0 and holding<0 AND 开多平空条件 THEN BEGIN
  S_tmp:=HOLDING;
 

 平空:sellshort(HIGH<=S_point[I_tmp], Sell_SS,MARKET),IGNORECHECKPRICE;//LIMITR,OPEN);//S_point[I_tmp]);
 //IF 平空>0 THEN
  IF HOLDING<>S_tmp THEN BEGIN

  S_flag[I_tmp]:=1;//卖点标志
   //输出调试信息

  END
 END
END

 

当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值
盈亏:OPENPROFIT,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值
 


 回到顶部
帅哥哟,离线,有人找我吗?
infocell
  84楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:152 积分:0 威望:0 精华:0 注册:2015/3/2 13:11:05
  发帖心情 Post By:2015/3/6 17:46:06    Post IP:110.84.52.125[只看该作者]

我已经把所有关键的步骤都写上注释了,希望你们能看明白。思路就是价位在于我们设的价格时开空,低于我们设的卖点价格平空。

 

如下问题:

1、同一个价位反复开仓(前面的金字塔日志可以证明)是不是数组问题,还是信号闪烁的问题?无论什么问题,可否给个解决办法。

2、图表模式下,有时候开不出来,根据贵方给的原因是因为在历史k线中已经执行,可否通过在开仓条件中加islastbar解决?比如:开多平空条件:=开仓时间 AND ISLASTBAR;//

3、debugfile是否默认就有islastbar,如下是debugfile输出的信息,我把islastbar也输出了,可以看出反复开仓的问题。

 

2015-03-06 09:25:02.614    序列位置:386,开空数:1,成交价:8925,持仓:-1,浮动盈亏:-3,总买单数:1,资产:999998,实时:1,触发价格:8900,标志位:1
2015-03-06 09:25:02.617    序列位置:386,开空数:1,成交价:8925,持仓:-2,浮动盈亏:-5,总买单数:2,资产:999995,实时:1,触发价格:8920,标志位:1
2015-03-06 09:26:03.334    序列位置:387,开空数:1,成交价:8925,持仓:-1,浮动盈亏:-3,总买单数:1,资产:999998,实时:1,触发价格:8900,标志位:1
2015-03-06 09:26:03.337    序列位置:387,开空数:1,成交价:8925,持仓:-2,浮动盈亏:-5,总买单数:2,资产:999995,实时:1,触发价格:8920,标志位:1
2015-03-06 09:27:02.812    序列位置:388,开空数:1,成交价:8945,持仓:-1,浮动盈亏:-3,总买单数:1,资产:999998,实时:1,触发价格:8900,标志位:1
2015-03-06 09:27:02.816    序列位置:388,开空数:1,成交价:8945,持仓:-2,浮动盈亏:-5,总买单数:2,资产:999995,实时:1,触发价格:8920,标志位:1
2015-03-06 09:27:02.819    序列位置:388,开空数:1,成交价:8945,持仓:-3,浮动盈亏:-8,总买单数:3,资产:999993,实时:1,触发价格:8940,标志位:1
2015-03-06 09:27:20.073    序列位置:388,开空数:1,成交价:8945,持仓:-1,浮动盈亏:-3,总买单数:1,资产:999998,实时:1,触发价格:8900,标志位:1
2015-03-06 09:27:20.078    序列位置:388,开空数:1,成交价:8945,持仓:-2,浮动盈亏:-5,总买单数:2,资产:999995,实时:1,触发价格:8920,标志位:1
2015-03-06 09:27:20.081    序列位置:388,开空数:1,成交价:8945,持仓:-3,浮动盈亏:-8,总买单数:3,资产:999993,实时:1,触发价格:8940,标志位:1
2015-03-06 09:27:59.687    序列位置:389,开空数:1,成交价:8940,持仓:-1,浮动盈亏:-3,总买单数:1,资产:999998,实时:1,触发价格:8900,标志位:1
2015-03-06 09:27:59.693    序列位置:389,开空数:1,成交价:8940,持仓:-2,浮动盈亏:-5,总买单数:2,资产:999995,实时:1,触发价格:8920,标志位:1
2015-03-06 09:27:59.698    序列位置:389,开空数:1,成交价:8940,持仓:-3,浮动盈亏:-8,总买单数:3,资产:999993,实时:1,触发价格:8940,标志位:1


 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  85楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/3/9 11:20:55    Post IP:58.246.57.26[只看该作者]

INPUT:Buy_START(8900,1,25000,1),Buy_STEP(20,1,500,1),Buy_END(9000,1,25000,1);//,买点区间:(Buy_START(区间起点),Buy_END(区间终点)),每隔Buy_STEP=20点买Buy_SS手

INPUT:Sell_START(8080,1,25000,1),Sell_STEP(30,1,500,1),Sell_END(8170,1,25000,1),Sell_SS(1,1,6,1);//,卖点区间:(Sell_START(区间起点),Sell_END(区间终点)),每隔Sell_STEP=30点卖Sell_SS手
 

INPUT:CS_con(25,1,500,1),CS_sell(10,1,500,1);//,CS_num(1,1,500,1);//条件单价位及卖单价位计算值低于买点25,就在买点+10的点位挂止盈单
INPUT:MAX_hold(10,1,30,1);//最大持仓数

INPUT:Myopentime(085400,083000,240000,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:NMIN(2,1,100,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:Mydebug(1,0,1,1);

VARIABLE:Num_p0=(Buy_END-Buy_START)/Buy_STEP+1;//买点个数

VARIABLE:SNum_p0=(Sell_END-Sell_START)/Sell_STEP+1;//卖点个数

VARIABLE:I_tmp=0,S_tmp=0,S_tmp1=0;
VARIABLE:Buy_point[Num_p0]=0;//买点数组,把买区间拆成买点放在该数组
VARIABLE:B_price[Num_p0]=0;//成交价

VARIABLE:B_flag[Num_p0]=0;//买点标记
VARIABLE:S_point[SNum_p0]=0;//卖点数组,把卖区间拆成买点放在该数组
VARIABLE:CB_flag[Num_p0]=0;//基于买点的条件单标记
VARIABLE:S_flag[SNum_p0]=0;//卖点标记
VARIABLE:B_NUM=0;//买的总量的标记,不能超过最大持仓数
VARIABLE:Is_debug=1,Is_log=1;//调试与记录标志
variable:b[Num_p0]=0,s[Num_p0]=0,y[num_p0]=0;//b为开仓序列,s为平仓序列,y为止盈序列
buy_ss:=1;
my_closetime:=190000;
开仓时间:=1;// AND TIME>083000;//防止参数异常,写两遍开仓时间,开仓时间:=TIME>OPENTIME(1)-200 AND TIME<150000-NMIN*100;
平仓时间:=TIME>=my_closetime-NMIN*100;
Ttmp:=TIME;
Ttmp1:=150000-NMIN*100;
{NMIN为参数,CLOSETIME(0)-NMIN*100表示 收盘时间-提前N分钟 N由NMIN控制}

开多平空条件:=开仓时间 ;//用于跳过历史计算
开空平多条件:=开仓时间 ;


 


 //信号闪烁处理,用买的总量进行比较,如果本周期已经买过就不再执行。

 

//区间买初始化
FOR I_tmp=1 TO Num_p0 DO BEGIN
// S:=S+VAR1[J];
 IF Buy_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
Buy_point[I_tmp]:=Buy_START+(I_tmp-1)*Buy_STEP;//从起点开始把每个买点放到买点数组Buy_point[I_tmp]中,如果I_tmp=1,就是Buy_point[1]:=Buy_START;如果I_tmp=2,Buy_point[2]:=Buy_START+Buy_STEP; 


END;


//卖点初始化
FOR I_tmp=1 TO SNum_p0 DO BEGIN
// S:=S+VAR1[J];
 IF S_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
S_point[I_tmp]:=Sell_START+(I_tmp-1)*Sell_STEP;//从起点开始把每个买点放到买点数组S_point[I_tmp]中,如果I_tmp=1,就是S_point[1]:=Sell_START;如果I_tmp=2,S_point[2]:=Sell_START+Sell_STEP; 

END


 

nettmp:=OPENPROFIT;
IF nettmp>=0 AND 平仓时间 AND holding<0 THEN BEGIN//收盘平仓

收盘平空:sellshort(平仓时间 and holding<0,0,MARKET);

END
//区间0 开空
//如果持仓超过10手,退出

FOR I_tmp=1 TO Num_p0 DO BEGIN


 IF 开空平多条件 AND h>=Buy_point[I_tmp] AND b[i_tmp]=0 AND B_NUM<MAX_hold and ABS(holding)<MAX_hold and holding<=0 THEN BEGIN
 

 IF buy_ss+ABS(holding)>MAX_hold THEN buy_ss:=ABS(MAX_hold-ABS(holding)); //开单量不能超过最大MAX_hold
 
 
 
 //开空
   
      buyshort(1,buy_ss,MARKET);//LIMITR,OPEN);//b_tmpp是正常值开空;
      b[i_tmp]:=1;   
  // END
     //IF HOLDING<>S_tmp THEN BEGIN
      B_price[I_tmp]:=ENTERPRICE;//记录成交价,用于开止盈单
  
    
 
 END
END


 //开条件单处理
  //区间0平空条件单处理
 FOR I_tmp=1 TO Num_p0 DO BEGIN

 IF s[I_tmp]=0  AND 开多平空条件 THEN BEGIN
 // S_tmp:=HOLDING;
 //IF OPEN<=(Buy_point[I_tmp]-CS_con) THEN BEGIN
  IF l<=(B_price[I_tmp]-CS_con)and holding<0 THEN BEGIN

 
   sellshort(holding<0, Buy_SS,STOPR,(B_price[I_tmp]-CS_sell)),IGNORECHECKPRICE;//如果当前价的最高价小于成交价-CS_con,挂止盈单成交价-CS_sell;
 
    s[I_tmp]:=1;
   //输出调试信息

  END
 END
END
 
/////////////////////////平空
 //区间0平空 当前最高价小于卖点价格,卖出平仓HIGH<=S_point[I_tmp]

FOR I_tmp=1 TO SNum_p0 DO BEGIN

 IF y[I_tmp]=0 and holding<0 AND 开多平空条件 THEN BEGIN
 
 

 止赢:sellshort(l<=S_point[I_tmp], Sell_SS,MARKET),IGNORECHECKPRICE;//LIMITR,OPEN);//S_point[I_tmp]);
 //IF 平空>0 THEN
  IF HOLDING<>S_tmp THEN BEGIN

 y[I_tmp]:=1;//卖点标志
   //输出调试信息

  END
 END
END


if s[1]=1 and s[2]=1 and s[3]=1 and s[4]=1 and s[5]=1 and s[6]=1 and  b[1]=1 and b[2]=1 and b[3]=1 and b[4]=1 and b[5]=1 and b[6]=1 then begin
 for i_tmp=1 to 6 do begin
  b[i_tmp]:=0;
  s[i_tmp]:=0;
 end
end
 
if y[1]=1 and y[2]=1 and y[3]=1 and y[4]=1  then begin
 for i_tmp=1 to 4 do y[i_tmp]:=0;
end



金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  86楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/3/9 11:21:15    Post IP:58.246.57.26[只看该作者]

我把开仓条件,也就是时间条件,给删掉了,请用户自行添加一下所需要的条件


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  87楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/3/9 11:24:50    Post IP:58.246.57.26[只看该作者]

再等等,我再改改


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  88楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/3/9 14:13:07    Post IP:58.246.57.26[只看该作者]

INPUT:Buy_START(8900,1,25000,1),Buy_STEP(20,1,500,1),Buy_END(9000,1,25000,1);//,买点区间:(Buy_START(区间起点),Buy_END(区间终点)),每隔Buy_STEP=20点买Buy_SS手

INPUT:Sell_START(8080,1,25000,1),Sell_STEP(30,1,500,1),Sell_END(8170,1,25000,1),Sell_SS(1,1,6,1);//,卖点区间:(Sell_START(区间起点),Sell_END(区间终点)),每隔Sell_STEP=30点卖Sell_SS手
 

INPUT:CS_con(25,1,500,1),CS_sell(10,1,500,1);//,CS_num(1,1,500,1);//条件单价位及卖单价位计算值低于买点25,就在买点+10的点位挂止盈单
INPUT:MAX_hold(10,1,30,1);//最大持仓数

INPUT:Myopentime(085400,083000,240000,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:NMIN(2,1,100,1);//;,X(20,1,100,1),SS(1,1,10000,1);
INPUT:Mydebug(1,0,1,1);

VARIABLE:Num_p0=(Buy_END-Buy_START)/Buy_STEP+1;//买点个数

VARIABLE:SNum_p0=(Sell_END-Sell_START)/Sell_STEP+1;//卖点个数

VARIABLE:I_tmp=0,S_tmp=0,S_tmp1=0;
VARIABLE:Buy_point[Num_p0]=0;//买点数组,把买区间拆成买点放在该数组
VARIABLE:B_price[Num_p0]=0;//成交价

VARIABLE:B_flag[Num_p0]=0;//买点标记
VARIABLE:S_point[SNum_p0]=0;//卖点数组,把卖区间拆成买点放在该数组
VARIABLE:CB_flag[Num_p0]=0;//基于买点的条件单标记
VARIABLE:S_flag[SNum_p0]=0;//卖点标记
VARIABLE:B_NUM=0;//买的总量的标记,不能超过最大持仓数
VARIABLE:Is_debug=1,Is_log=1;//调试与记录标志
variable:b[num_p0]=0,s[num_p0]=0,y[snum_p0]=0;//b为开仓序列,s为平仓序列,y为止盈序列
buy_ss:=1;
my_closetime:=190000;
开仓时间:=1;// AND TIME>083000;//防止参数异常,写两遍开仓时间,开仓时间:=TIME>OPENTIME(1)-200 AND TIME<150000-NMIN*100;
平仓时间:=TIME>=my_closetime-NMIN*100;
Ttmp:=TIME;
Ttmp1:=150000-NMIN*100;
{NMIN为参数,CLOSETIME(0)-NMIN*100表示 收盘时间-提前N分钟 N由NMIN控制}

开多平空条件:=开仓时间 ;//用于跳过历史计算
开空平多条件:=开仓时间 ;


 


 //信号闪烁处理,用买的总量进行比较,如果本周期已经买过就不再执行。

 

//区间买初始化
FOR I_tmp=1 TO Num_p0 DO BEGIN
// S:=S+VAR1[J];
 IF Buy_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
Buy_point[I_tmp]:=Buy_START+(I_tmp-1)*Buy_STEP;//从起点开始把每个买点放到买点数组Buy_point[I_tmp]中,如果I_tmp=1,就是Buy_point[1]:=Buy_START;如果I_tmp=2,Buy_point[2]:=Buy_START+Buy_STEP; 


END;


//卖点初始化
FOR I_tmp=1 TO SNum_p0 DO BEGIN
// S:=S+VAR1[J];
 IF S_point[I_tmp]<=0 THEN//只在第一次 Buy_point[I_tmp]=0的时候执行初始化
S_point[I_tmp]:=Sell_START+(I_tmp-1)*Sell_STEP;//从起点开始把每个买点放到买点数组S_point[I_tmp]中,如果I_tmp=1,就是S_point[1]:=Sell_START;如果I_tmp=2,S_point[2]:=Sell_START+Sell_STEP; 

END


 

nettmp:=OPENPROFIT;
IF nettmp>=0 AND 平仓时间 AND holding<0 THEN BEGIN//收盘平仓

收盘平空:sellshort(平仓时间 and holding<0,0,MARKET);

END
//区间0 开空
//如果持仓超过10手,退出

FOR I_tmp=1 TO Num_p0 DO BEGIN


 IF 开空平多条件 AND h>=Buy_point[I_tmp] AND b[i_tmp]=0 AND B_NUM<MAX_hold and ABS(holding)<MAX_hold and holding<=0 THEN BEGIN
 

 IF buy_ss+ABS(holding)>MAX_hold THEN buy_ss:=ABS(MAX_hold-ABS(holding)); //开单量不能超过最大MAX_hold
 
 
 
 //开空
   
      buyshort(1,buy_ss,MARKETr);//LIMITR,OPEN);//b_tmpp是正常值开空;
      b[i_tmp]:=1;   
  // END
     //IF HOLDING<>S_tmp THEN BEGIN
      B_price[I_tmp]:=ENTERPRICE;//记录成交价,用于开止盈单
  
    
 
 END
END


 //开条件单处理
  //区间0平空条件单处理

 FOR I_tmp=1 TO Num_p0 DO BEGIN

 // S_tmp:=HOLDING;
 //IF OPEN<=(Buy_point[I_tmp]-CS_con) THEN BEGIN
  IF l<=(B_price[I_tmp]-CS_con)and holding<0 and s[I_tmp]=0 AND 开多平空条件 THEN BEGIN

 
   sellshort(holding<0, Buy_SS,STOPR,(B_price[I_tmp]-CS_sell)),IGNORECHECKPRICE;//如果当前价的最高价小于成交价-CS_con,挂止盈单成交价-CS_sell;
 
    s[I_tmp]:=1;
   //输出调试信息

 
 END
END
 
/////////////////////////平空
 //区间0平空 当前最高价小于卖点价格,卖出平仓HIGH<=S_point[I_tmp]

FOR I_tmp=1 TO SNum_p0 DO BEGIN

 IF y[I_tmp]=0 and holding<0 AND 开多平空条件 THEN BEGIN
 
 

 止赢:sellshort(l<=S_point[I_tmp], Sell_SS,MARKET),IGNORECHECKPRICE;//LIMITR,OPEN);//S_point[I_tmp]);
 //IF 平空>0 THEN
  IF HOLDING<>S_tmp THEN BEGIN

 y[I_tmp]:=1;//卖点标志
   //输出调试信息

  END
 END
END

 

if s[1]=1 and s[2]=1 and s[3]=1 and s[4]=1 and s[5]=1 and s[6]=1 and  b[1]=1 and b[2]=1 and b[3]=1 and b[4]=1 and b[5]=1 and b[6]=1 then begin
 for i_tmp=1 to 6 do begin
  b[i_tmp]:=0;
  s[i_tmp]:=0;
 end
end
 
if y[1]=1 and y[2]=1 and y[3]=1 and y[4]=1  then begin
 for i_tmp=1 to 4 do y[i_tmp]:=0;
end



金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
infocell
  89楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:152 积分:0 威望:0 精华:0 注册:2015/3/2 13:11:05
  发帖心情 Post By:2015/3/9 17:08:39    Post IP:120.35.90.250[只看该作者]

非常感谢!

这个应当可以防止信号闪烁了,我也是这两天想明白了。

不过您上回说的数组应当还是可以用的吧,不应当只是在标号之后的序列就赋不进去值了吧?

因为我写了个测试程序,不断数组递增,结果值都能输出来。


 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  90楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/3/9 17:09:52    Post IP:58.246.57.26[只看该作者]

嗯,可以的


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
总数 90 上一页 1 2 3 4 5 6 7 8 9