系统内建指标复制到自己策略里面计算结果不同

Params Numeric OIThreshold(5); // 持仓量变化率阈值(百分比),当持仓量变化超过±5%时触发条件 Numeric MaxDailyLoss(2); // 单日最大亏损比例(百分比),触发后当日停止交易 NumerIC ATRMultiplier(2); // ATR止损倍数(如2倍ATR作为止损空间) //MACD的 Numeric FastLength(12); //快线周期 Numeric SlowLength(26); //慢线周期 Numeric MACDLength(9); //信号线周期 //ATR的 Numeric Length(14); //周期 //成交量的 Numeric VolPeriod(5); // 成交量均线周期,用于判断成交量突破 Vars //MACD的 Series<Numeric> MACDDiff; Series<Numeric> AvgMACD; Series<Numeric> MACDValue; Plot plt_macd; Plot plt_ATR; Events //MACD的 OnInit() { plt_macd.figure(0);//plt_macd和k线同一个画板,独立图表显示 plt_ATR.figure(0);//plt_vol和k线同一个画板,独立图表显示 } //ATR的 OnReady() { SetBackBarMaxCount(1+VolPeriod); Range[0:DataSourceSize() - 1] //ATR的 { plt_ATR.setOption ("ATR", "begin-bar", Length); } //MACD的 { plt_macd.setOption("MACDDiff", "begin-bar", SlowLength); plt_macd.setOption("MACDDEA", "begin-bar", SlowLength + MACDLength); plt_macd.setOption("MACD", "begin-bar", SlowLength + MACDLength); } //成交量的 { setPlotOption("5日成交量均线", "begin-bar", VolPeriod); } } OnBar(ArrayRef<Integer> indexs) { //ATR的 Range[0:DataSourceSize() - 1] { plt_ATR.line("ATR",AvgTrueRange(Length)); } //MACD的 { MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ; AvgMACD = XAverage(MACDDiff,MACDLength); MACDValue = 2 * (MACDDiff - AvgMACD); plt_macd.line("MACDDiff",MACDDiff); //画线 plt_macd.line("MACDDEA",AvgMACD); //画线 If (MACDValue >= 0) { plt_macd.setOption("MACD","color",Red); //设置颜色属性 plt_macd.barv("MACD",MACDValue); //画柱状图 } Else { plt_macd.setOption("MACD","color",Green);//设置颜色属性 plt_macd.barv("MACD",MACDValue); //画柱状图 } plt_macd.barv("零线",0); } //成交量的 { PlotAuto("成交量",Vol,0,Color10(),Enum_Bar,Enum_Fill); PlotNumeric("5日成交量均线", AverageFC(Vol, VolPeriod)); } }还请帮忙看看,复制的内建策略代码到自己的策略,计算结果不同的原因。

你的 SetBackBarMaxCount(1+VolPeriod) 回溯设置太短了 VolPeriod 只有5ATR至少需要14个回溯其实我并不太清楚这个函数是怎么 运行的,只是回溯值肯定要满足代码里面的最大回溯。老师如果看到,帮忙顺便指点一下我

回复:谢谢大哥指点,我后来也是发现了,所以干脆把这行回溯给删了,我不理解的一点是,删了以后好像没有什么影响,好奇这行指标的意义是什么,当然你们肯定 也发现了我是一个小白,这些指标都是从系统内建的多个指标缝合在一起的,所以第一事件没发现是因为其他指标的内容影响到了。

回复:直觉不错,就是这个的问题。

回复:SetBackBarMaxCount设置所有可回溯类型的最大回溯值拿atr举例子,atr(14)指的是从现在开始,往前数14根k线,把这14根k线的truerange(tr)做算数平均,得到atr(14)值。这里的往前数14根bar,就是回溯。所以atr(14)最少,也需要回溯14根bar数据。而你代码里 SetBackBarMaxCount(1+VolPeriod) ,volperiod默认是5,加一变成6,所以atr计算的时候只能回溯取到6根k线,这还怎么能计算正确呢?不太清楚你加这一行代码的目的是什么,如果没有目的,删掉也无妨。