均线对策略的控制问题
经与TB在线客服确认,TB策略里有这样一个机制:即如果你在策略中设置了一根均线,比如MA20=AVERAGE(C,20),则无论你在后续的指令语句中,是否用到该MA,程序总是要等到20根BAR以后才发出买卖指令,个人觉得这个设置不合理。请问为什么要这么设置?我现在要编写一个策略,设置站上20日均线作为开仓的控制条件之一,但在初始的20根BAR期间,即还没有20日均线值的时候,我就不受这个“站上均线”的条件制约,而是满足我设置的其他开仓条件即可。待满20根BAR之后,再受“站上均线”这一条件的制约。要实现这一目的,我该怎么写?如果不能达到我上述目的,则只要你设置了均线,就会浪费初始的若干根BAR,达不到理想的测试效果,然而这初始的若干根BAR,很可能是个强趋势,比如最近上市的碳酸锂,这是个很大的缺憾!!!望解决!!!
Params Numeric Length(20); Vars Numeric MA20; Numeric bar_count;Defs //此处添加公式函数 Events OnBar(ArrayRef<Integer> indexs) { bar_count=CurrentBar+1; Numeric i; Numeric Summation_1; If (bar_count<Length) { for i = 0 to bar_count-1 { Summation_1 = Summation_1 + Close[i]; } MA20=Summation_1/bar_count; } Else { for i = 0 to Length-1 { Summation_1 = Summation_1 + Close[i]; } MA20=Summation_1/Length; } Commentary(\"Summation_1=\"+Text(Summation_1)); Commentary(\"MA20=\"+Text(MA20)); PlotNumeric(\"MA20\",MA20); Commentary(\"MA20=\"+Text(MA20)); Commentary(\"CurrentBar=\"+Text(CurrentBar)); Bool KaiKong; Bool PingKong; KaiKong=Close[1]<MA20; PingKong=Close[1]>MA20; If(KaiKong and MarketPosition>-1) SellShort(1,Open); If(PingKong and MarketPosition==-1) BuyToCover(1,Open); }
回复:昨天才安装TB,什么都不懂,这是古时的天书哦。
Params Numeric Length(20); Vars Numeric MA20; Numeric bar_count;Defs //此处添加公式函数 Events OnBar(ArrayRef<Integer> indexs) { bar_count=CurrentBar+1; If (bar_count<Length) { MA20=Average(Close,bar_count); } Else { MA20=Average(Close,Length); } PlotNumeric(\"MA20\",MA20); Commentary(\"CurrentBar\"+Text(CurrentBar)); }