各位大神,这里有个简单的均线策略问题求解。
问题描述:我在均线编程测试时发现一个问题,每当多定义一根均线后(仅仅是定义,还未画图),原来收益结果,就会产生改变。如以下代码,“//ma2 = Average(close,jx2);” 去除“//”后,原来收益结果就会改变,但这时还未进行过任何策略改变,无法理解,求指教!!!
代码如下:
//------------------------------------------------------------------------
// 简称: demo_10_50
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
Numeric jx1(13);//短期参数
Numeric jx2(62);//中线参数
Numeric shul(101);//单手合约数量
Vars
series<Numeric> ma1;
series<Numeric> ma2;
Bool bool_crossover;//上穿短线
Bool bool_crossunder;//下穿短线
Numeric ss;//开仓手数
Events
OnBar(ArrayRef<Integer> indexs)
{
ma1 = Average(close,jx1);
//ma2 = Average(close,jx2);
PlotNumeric(\"ma1\",ma1);
//PlotNumeric(\"ma2\",ma2);
ss = IntPart( Portfolio_CurrentEquity() / (close *shul*MarginRatio)) ;//通过当前组合权益、收盘价,计算可以开仓手数
bool_crossover = close[1] <= ma1[1] and close > ma1;
bool_crossunder = close[1] >= ma1[1] and close < ma1;
//组合开仓策略
If(MarketPosition<>1 and bool_crossover)
{
Buy(ss,close);
}
If(MarketPosition<>-1 and bool_crossunder)
{
SellShort(ss,close) ;
}
}
//------------------------------------------------------------------------
// 编译版本 2024/03/29 083636
// 版权所有 tbm2724503213
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
非常感谢
tb有一个机制,检测图表最大回溯数量。比如20周均线,那么回溯数量就是20。根据代码里所有需要回溯的内容,找到最大的那个回溯数量,就是最大回溯数量。根据这个回溯数量n,会强制图表最开始的n根bar不出信号。
你因为加了一句均线计算,原来的最大回溯数量是13,那么就是图表最开始13根bar不出信号,加了以后是62,那么就变成最开始62根bar不出信号。如果你原来的策略逻辑,在图表第13根bar到第62根bar之间是有信号的,那么加了均线以后就没有信号了。
这是最有可能引起策略报告不一样的原因
你可以用return语句测试一下,在信号命令前面加一句,必须currentbar返回62以后才执行开平仓,再比较一下看看