//声明参数
INPUT:N(1,1,100,1);
INPUT:K1(0.7,0.1,1,0.1);
INPUT:K2(0.7,0.1,1,0.1);
INPUT:ATRLEN(20,10,30,1);
INPUT:NMIN(10,1,100,1);
INPUT:TTM(50,50,500,10);
//声明变量
VARIABLE:POSITION=0;
VARIABLE:实际开仓手数=0;
VARIABLE:止损价格1=0;
VARIABLE:止损价格2=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//准备需要计算的变量
HH:=CALLSTOCKEX(STKLABEL,VTHIGH,6,-1,N);//N日HIGH的最高价
LL:=CALLSTOCKEX(STKLABEL,VTLOW,6,-1,N);//N日LOW的最低价
昨日收盘:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HC:=HHV(昨日收盘,N);//N日CLOSE的最高价
LC:=LLV(昨日收盘,N);//N日CLOSE的最低价
浮动区间:=MAX(HH-LC,HC-LL);
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
AVGTR:=REF(MA(TR,ATRLEN),1);
手数:=FLOOR(TTM*100/(2*AVGTR*MULTIPLIER));
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
//开始执行时,初始化数据
IF BARPOS=1 THEN BEGIN
POSITION:=0;
END //IF
//交易条件
开多条件:=C>上轨 AND POSITION=0;
开空条件:=C<下轨 AND POSITION=0;
//交易系统
IF 开多条件 AND T1 AND CYC>1 THEN BEGIN
BUY(1,手数,MARKET);
POSITION:=1;
实际开仓手数:=手数;
止损价格1:=c-2*AVGTR;
END//IF
IF 开空条件 AND T1 AND CYC>1 THEN BEGIN
BUYSHORT(1,手数,MARKET);
POSITION:=-1;
实际开仓手数:=手数;
止损价格2:=c+2*AVGTR;
END//IF
IF LOW<=止损价格1 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF T2 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
IF HIGH>=止损价格2 AND POSITION=-1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF T2 AND POSITION=-1 THEN BEGIN
SELLSHORT(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
写的一个日内程序,但在测试看明细,发现会有日内收盘前不平仓的情况,是哪里出问题了?
日内多少分钟收盘前平仓?
上面的写法不对
要写成这样:
if time0>=(timetot0(closetime(0))-60*nmin) then begin
sell(1,0,marketr);
sellshort(1,0,marketr);
end
[此贴子已经被作者于2016-5-31 9:35:13编辑过]
T2:=TIME>=CLOSETIME(0)-NMIN*100;
把这句改成
T2:=time0>=(timetot0(closetime(0))-60*nmin);
if time0>=(timetot0(closetime(0))-60*n) AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
替换成这样了,还是有不平仓的情况,交易明细的图贴不上来
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=time0>=(timetot0(closetime(0))-60*nmin);
替换成这样,还是有不平仓的情况,交易明细的图贴不上来
那你把截图发到qq群,让qq群里面的工作人员把图发上来