经与TB在线客服确认,TB策略里有这样一个机制:即如果你在策略中设置了一根均线,比如MA20=AVERAGE(C,20),则无论你在后续的指令语句中,是否用到该MA,程序总是要等到20根BAR以后才发出买卖指令,个人觉得这个设置不合理。请问为什么要这么设置?
我现在要编写一个策略,设置站上20日均线作为开仓的控制条件之一,但在初始的20根BAR期间,即还没有20日均线值的时候,我就不受这个“站上均线”的条件制约,而是满足我设置的其他开仓条件即可。待满20根BAR之后,再受“站上均线”这一条件的制约。要实现这一目的,我该怎么写?
如果不能达到我上述目的,则只要你设置了均线,就会浪费初始的若干根BAR,达不到理想的测试效果,然而这初始的若干根BAR,很可能是个强趋势,比如最近上市的碳酸锂,这是个很大的缺憾!!!望解决!!!
都没满20根均线,算出来20周均线那能对吗?
自己写一个求平均的
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,什么都不懂,这是古时的天书哦。
刚刚学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));
}