下面这段代码,在同一价位上发出多个开仓指令,请帮忙看看是什么原因?
VARIABLE:Num_p0=(Buy_END-Buy_START)/Buy_STEP+1;
VARIABLE:Num_p1=(Buy_END1-Buy_START1)/Buy_STEP1+1;
VARIABLE:Num_p2=(Buy_END2-Buy_START2)/Buy_STEP2+1;
VARIABLE:SNum_p0=(Sell_END-Sell_START)/Sell_STEP+1;
VARIABLE:SNum_p1=(Sell_END1-Sell_START1)/Sell_STEP1+1;
VARIABLE:SNum_p2=(Sell_END2-Sell_START2)/Sell_STEP2+1;
VARIABLE:I_tmp=0,S_tmp=0,S_tmp1=0;
VARIABLE:Buy_point[Num_p0]=0,Buy_point1[Num_p1]=0,Buy_point2[Num_p2]=0;//?òμ?
VARIABLE:B_price[Num_p0]=0,B_price1[Num_p1]=0,B_price2[Num_p2]=0;//3é????
VARIABLE:B_flag[Num_p0]=0,B_flag1[Num_p1]=0,B_flag2[Num_p2]=0;//?òμ?±ê??
VARIABLE:S_point[SNum_p0]=0,S_point1[SNum_p1]=0,S_point2[SNum_p2]=0;//??μ?
VARIABLE:CB_flag[Num_p0]=0,CB_flag1[Num_p1]=0,CB_flag2[Num_p2]=0;//?ùóú?òμ?μ?ì??tμ¥±ê??
VARIABLE:S_flag[SNum_p0]=0,S_flag1[SNum_p1]=0,S_flag2[SNum_p2]=0;//??μ?±ê??
VARIABLE:B_NUM=0;//?òμ?×üá?μ?±ê??
VARIABLE:Add_flag=0,CAdd_flag=0;//212??°212?ì??tμ¥±ê??
VARIABLE:Is_debug=1,Is_log=1;
FOR I_tmp=1 TO Num_p0 DO BEGIN
IF 开盘时间 AND OPEN>=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;
//?aμ¥á?2??ü3?1y×?′óMAX_hold
IF b_tmpp+ABS(holding)>MAX_hold THEN b_tmpp:=ABS(MAX_hold-ABS(holding));
IF b_tmpp+B_NUM>MAX_hold THEN b_tmpp:=ABS(MAX_hold-B_NUM);//?òμ¥á?2??ü3?1y×?′ó?μ
S_tmp:=HOLDING;
//?a??
IF b_tmpp>0 AND b_tmpp<ABS(MAX_hold) THEN BEGIN
//开仓:buyshort(1,b_tmpp,LIMITR,OPEN);//MARKET);//limitr,X?ü?úμíμ?);
开空:buyshort(1,b_tmpp,MARKET);//LIMITR,OPEN);//MARKET);//limitr,X?ü?úμíμ?);
B_NUM:=B_NUM+1;
// END
//IF HOLDING<>S_tmp THEN BEGIN
B_price[I_tmp]:=ENTERPRICE;
B_flag[I_tmp]:=1;
//ê?3?μ÷ê?D??¢
IF Is_debug=1 and ISLASTBAR 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));
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),0);
END
END
END
同一根k线多次发单的最有可能原因是:
1.信号闪烁,这个是不正常的
2.多个开仓语句同时满足,这个是正常的,1个开仓语句在同一根k线上反复开仓才是不正常的
就是在IE里面发的,好奇怪,有时候好的,有时候是乱码?
现在就是在同一价位同一根K线,只有一个条件满足情况下,一个开仓语句发出多个开仓指令。
我开完仓置标志位也置不上去
开仓信号就是这句:
IF 开盘时间 AND OPEN>=Buy_point[I_tmp] AND B_flag[I_tmp]<=0 AND B_NUM<MAX_hold and ABS(holding)<MAX_hold THEN BEGIN
这是程序输出的信息,居然在一个价位上开了好多单
而且持仓居然不变,用的是固定时间间隔扫描
//区间0 开多
FOR I_tmp=1 TO Num_p0 DO BEGIN
IF B_flag[I_tmp]<=0 AND B_NUM<MAX_hold AND ABS(holding)<MAX_hold THEN BEGIN
//S_tmp1:=OPEN;
IF 开多平空条件 AND OPEN<=Buy_point[I_tmp] THEN BEGIN
b_tmpp:=Buy_SS;
//开单量不能超过最大MAX_hold
IF b_tmpp+ABS(holding)>MAX_hold THEN b_tmpp:=ABS(MAX_hold-ABS(holding));
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
开多:buy(1,b_tmpp,MARKET),IGNORECHECKPRICE;//LIMITR,OPEN),IGNORECHECKPRICE;//MARKET);//limitr,X周期低点);
B_NUM:=B_NUM+1;
//END
// IF HOLDING<>S_tmp THEN B_flag[I_tmp]:=1;
// IF HOLDING<>S_tmp THEN BEGIN
B_price[I_tmp]:=ENTERPRICE;
B_flag[I_tmp]:=1;
//输出调试信息AND ISLASTBAR
IF Is_debug=1 THEN MSGOUT(TRUE,'序列位置:'&numtostr(BARPOS,0)&',开多数:'&numtostr(b_tmpp,0)&',成交价:'&numtostr(ENTERPRICE,0)&',持仓:'&numtostr(HOLDING,0)&',浮动盈亏:'&numtostr(OPENPROFIT,0)&',总买单数:'&numtostr(B_NUM,0)&',资产:'&numtostr(ASSET,0)&',实时:'&numtostr(ISLASTBAR,0));
IF Is_log=1 THEN DEBUGFILE('C:\myTEST.TXT','序列位置:'&numtostr(BARPOS,0)&',开多数:'&numtostr(b_tmpp,0)&',成交价:'&numtostr(ENTERPRICE,0)&',持仓:'&numtostr(HOLDING,0)&',浮动盈亏:'&numtostr(OPENPROFIT,0)&',总买单数:'&numtostr(B_NUM,0)&',资产:'&numtostr(ASSET,0)&',实时:'&numtostr(ISLASTBAR,0),0);
END
IF ABS(HOLDING)>=MAX_hold THEN BEGIN
MSGOUT(TRUE,'警告:持仓达到上限,停止开多!');//NOAXIS,COLORGRAY;警告:"持仓达到上限,停止开多!";
SENDPHONEMSG('警告:持仓达到上限,停止开多!',1);
END
END
END
END