老师好!我想在已经开发完成的突破模型中加入震荡交易,思路是:突破模型完成平仓后(不论平多还是平空),即转入震荡模式;转入震荡模式后,只允许做3次交易(不论多空);震荡模式结束标准:震荡模式交易达到3次或者突破模式出现开仓信号。以上思路尝试了好几天都无法实现,麻烦老师帮忙指引。
//交易系统
手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;
震荡手数1:=(CASH(0)/(CLOSE*300*0.15))*0.2;
震荡手数2:=ENTERVOL*2;
突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);
突破单开多:BUY(突破单开多条件,手数,MARKET);
突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);
震荡市开多:BUY( 震荡市开多条件,震荡手数1,MARKET);
震荡多单平仓:SELL( 震荡多单平仓条件 AND HOLDING>0,HOLDING,MARKET);
震荡市开空:BUYSHORT( 震荡市开空条件 ,震荡手数1,MARKET);
震荡空单平仓:SELLSHORT(震荡空单平仓条件 AND HOLDING<0,HOLDING,MARKET);
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
//交易系统
手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;
震荡手数1:=(CASH(0)/(CLOSE*300*0.15))*0.2;
震荡手数2:=ENTERVOL*2;
IF (突破单平多条件 OR 突破单平空条件) THEN BEGIN
震荡市开多:BUY( 震荡市开多条件,震荡手数1,MARKET);
震荡多单平仓:SELL( 震荡多单平仓条件 AND HOLDING>0,HOLDING,MARKET);
震荡市开空:BUYSHORT( 震荡市开空条件 ,震荡手数1,MARKET);
震荡空单平仓:SELLSHORT(震荡空单平仓条件 AND HOLDING<0,HOLDING,MARKET);
END
IF (突破单开多条件 OR 突破单开空条件) THEN BEGIN
突破单开多:BUY(突破单开多条件,手数,MARKET);
突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);
突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);
END
思路是:突破模型完成平仓后(不论平多还是平空),即转入震荡模式;转入震荡模式后,只允许做3次交易(不论多空);震荡模式结束标准:震荡模式交易达到3次或者突破模式出现开仓信号。
variable:n=0;
variable:m=0;
if 突破单平多条件 and n=0 and holding>0 then begin
平多语句;
n:=1;
end
if 突破单平空条件 and n=0 and holding<0 then begin
平空语句;
n:=1;
end
if 突破单开多条件 and holding=0 then begin
开多语句;
n:=0;
end
if 突破单开空条件 and holding=0 then begin
开空语句;
n:=0;
end
if n=1 and holding=0 and m<3 and 震荡单开多条件 then begin
开多语句;
m:=m+1;
end
if n=1 and holding=0 and m<3 and 震荡单开空条件 then begin
开空语句;
m:=m+1;
end
if m=3 then begin
n:=0;
M:=0;
end
发现两个问题
1、要去掉第一、第二段的n=0,信号才会正常出现,否则历史图表中只显示一次开仓信号,别的信号都没有。
2、震荡市的开仓信号是用突破单的平仓条件进行平仓的,不是震荡单的平仓条件,是漏掉了吗?
1随你的需求改
2没有必要的,没涉及到全局变量的就不写了
老师,我用你给的语法改写了自己的模型,发现震荡模式没有平仓信号,后续符合开仓条件的信号也就出不来了。我的思路可能表达不完整,应该是震荡模式3次交易结束后等待突破模式信号,如此反复循环。下面是我写的语句,麻烦帮看一下怎么改。
//交易系统
手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;
variable:n=0;//突破--震荡标志,0突破,1震荡
variable:tpd=0;//突破多单统计
variable:tpk=0;//突破空单统计
variable:m=0;//震荡单统计
if n=0 and 突破单平多条件 and holding>0 then begin
突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
n:=1;
end
if n=0 and 突破单平空条件 and holding<0 then begin
突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);
n:=1;
end
if 突破单开多条件 and holding=0 and tpd<2 then begin
突破单开多:BUY(突破单开多条件,手数,MARKET);
n:=0;
tpd:=tpd+1;
end
if 突破单开空条件 and holding=0 and tpk<2 then begin
突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);
n:=0;
tpk:=tpk+1;
end
if n=1 and holding=0 and m<3 and 震荡单开多条件 then begin
震荡市开多:BUY( 震荡单开多条件,手数,MARKET);
tpd:=0;
tpk:=0;
m:=m+1;
end
if n=1 and holding=0 and m<3 and 震荡单开空条件 then begin
震荡市开空:BUYSHORT( 震荡单开空条件 ,手数,MARKET);
tpd:=0;
tpk:=0;
m:=m+1;
end
if holding>0 then begin
震荡单平多:BUY(震荡多单平仓条件,holding,MARKET);
end
if holding<0 then begin
震荡单平空:BUY(震荡空单平仓条件,holding,MARKET);
end
if m=3 then begin
n:=0;
M:=0;
end
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
这个我只能帮你到这里了,剩下的就看你自己对全局变量的理解了
m是震荡的开仓次数
n是突破的标记,=1表示已经突破平仓过,=0表示还没有