请老师帮忙更改一下下面的代码:
大概思路是满足开仓和加仓条件后分别进场(最多进场5次),进场之后,再根据每次的进场价设置对应的止损位;
input:num(5,1,10,1),ZS(0.009,0.001,0.02,0.001);
VARIABLE : TURTLEUNITS=0 ;
VARIABLE : POSITION=0 ;
IF POSITION=0 THEN BEGIN
//开仓
IF B_COND THEN BEGIN
BUY(HOLDING=0,CW%,MARKET);
POSITION=1;
TURTLEUNITS=1;
END
IF POSITION=1 THEN BEGIN
//加仓
WHILE JD AND TURTLEUNITS<=NUM DO BEGIN
BUY(HOLDING>0,CW%,MARKET);
TURTLEUNITS=TURTLEUNITS+1;
END
//止损
WHILE TURTLEUNITS>0 AND ( ENTERPRICE-C)>C*ZS DO BEGIN
SELL(1,ENTERVOL,MARKET);
TURTLEUNITS=TURTLEUNITS-1;
END
IF
TURTLEUNITS=0 THEN BEGIN
POSITION=0;
END
END
上面的这段代码实现不了的。循环里面的信号虽然可以在同一个K的同一个下单语句下出多个,但实际交易时候只会下一次,其他信号直接被忽略掉的。目前只有后台程序化才能在同一个K内在同一个下单语句上执行多次下单。
你不要参考上面那个代码,你直接回退一步 提出你的原始需求,从你原始需求出发思路解决方案。
不需要在同一根K线上实现,而且我是K线走完模式下的;
以多头突破为例:第一次突破开仓,第二次突破加仓....第五次突破加仓;
再根据每次的开仓价设置对应的止损价,分别触及止损后逐个离场;( ENTERPRICE-C)>C*ZS
请老师帮忙编写一下,我写的实现不了。
1.那你这个最多限制五次是怎么限制的。同一个交易日限制五次?日内收盘时候是否需要清仓?不清仓的话,可能影响次日开仓加仓逻辑的。
2.没办法分别止损的。只能根据持仓均价去止损平仓。上面那个代码里面的方式只能体现思路,不能实际奏效。
1.循环不能实现限制开仓次数的,还额外消耗不必要的资源消耗。原因很简单,上面那个循环每次执行都是在一个K上的。它不是跨K线的。如果是一个完整的策略,这个循环的结果就是在一个K上出五个信号。而且这五个信号,仅仅能执行一个。
此主题相关图片如下:temp.png
限制交易次数只能用全局变量去控制,但是每次限制次数达到了,你如果不选择时机进行重置,那么这个策略后续就没有信号了。也就是下面这个例子里的做法,这个是日内限制次数的,也可以拓展下的。比如在全部止损完成之后,重新运行开仓。
http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=173541&page=2
2.这个真没有办法。数组也不行,逻辑太复杂,需要考虑的情况太多了。很难有个稳健的解决方式。这个问题很早就有人提过的,当时也尝试过,最后发现是个爬不出来的坑。主要是我们的数值目前其实只能做些简单的需求,复杂的都只能pass.