系统内建指标复制到自己策略里面计算结果不同
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));
        }
}

还请帮忙看看,复制的内建策略代码到自己的策略,计算结果不同的原因。


每次打开合约都是系统固定的指标,怎么设定自己的指标以及图标中K线的数量
自己写好的tbquant指标通过tb加密以后别人能破解码?让好兄弟自己跑自己的策略会不会被他破解?
请问同样的代码在自己写的公式里和内建的数值不一至
请教老师,关于套利,自己系统如何与帮助中的代码结合
为什么自己编写的指标无法选择“子图显示”
为什么自己编写的指标无法选择“子图显示”
系统中咋没找到DMI指标
如何引用内建应用:ZigZag之字转向,在自己建的公式应用中
quant3策略研究计算结果错误
怎么引用系统技术指标的指标值比如kdj指标的k、d、j值

你的  SetBackBarMaxCount(1+VolPeriod) 回溯设置太短了

VolPeriod 只有5

ATR至少需要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线,这还怎么能计算正确呢?

不太清楚你加这一行代码的目的是什么,如果没有目的,删掉也无妨。