全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
请教跨周期,1-2图层显示副图问题
yanfeng 分享到
2022-05-18 15:12

我写了3个图层,1-2图层有副图,但副图只有在0图层显示的才正常,其它图层的副图画线都混到主图里显示了。请教老师如何修改,谢谢!

 

新建一个10分钟周期的任务加载本策略跨周期。

Params
    Numeric EffRatioLength(10);                    // AMA自适应周期
    Numeric FastAvgLength(2);                   // AMA短周期
    Numeric SlowAvgLength(30);                  // AMA长周期

    Numeric CCILength(15);                        // CCI周期
    Numeric CCIover(100);                        // CCI天地线值
    
    Numeric Length(14);                            // KD
    Numeric SlowLength(3);                        // KD
    Numeric SmoothLength(3);                    // KD
Vars
    Global Bool    IsRollover(True);                //是否后复权
    Global Bool    IsRolloverRealPrice(True);        //是否映射真实价格
    Global Bool    IsAutoSwapPosition(True);        //是否自动换仓
    Global Bool    IgnoreSwapSiganlCalc(False);    //是否忽略换仓信号计算
    
    Series<Numeric> TmpValue;                    // CCI指标使用参数
    Numeric Mean( 0 );                            // CCI指标使用参数
    Numeric AvgDev( 0 );                        // CCI指标使用参数
    Numeric Counter( 0 );                        // CCI指标使用参数
    Series<Numeric> CCIValue(0);                // CCI值
    
    Series<Numeric> HighestValue;                // KD
    Series<Numeric> LowestValue;                // KD
    Series<Numeric> KValue;                        // KD
    Numeric SumHLValue;                            // KD
    Numeric SumCLValue;                            // KD
    Numeric DValue;                                // KD
    
    Plot plt1;                                    // 声明子画板1
    Plot plt2;                                    // 声明子画板2

Defs
    //此处添加公式函数
    
Events
    //此处实现事件函数
    
    //初始化事件函数,策略运行期间,首先运行且只有一次
    OnInit()
    {    
        SubscribeBar(Data0.Symbol,"1H",Data0.BeginDateTime);
        SubscribeBar(Data0.Symbol,"1D",Data0.BeginDateTime);
        plt1.figure(0);                                                // 设置子画板输出方式
        plt1.setOption("MA1","x-format","time");                    // 设置X轴
        plt1.setOption("MA1","y-format","Numeric");                    // 设置y轴
        plt2.figure(0);                                                // 设置子画板输出方式
        Plt2.setOption("MA1","x-format","time");                    // 设置X轴
        Plt2.setOption("MA1","y-format","Numeric");                    // 设置y轴

        Range[0:DataCount-1]
        {
            If(IsRollover)
            {
                AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
            }
            If(IsRolloverRealPrice)
            {
                AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
            }
            If(IsAutoSwapPosition)
            {
                AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
            }
            If(IgnoreSwapSiganlCalc)
            {
                AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算
            }
        }
    }


    OnBar(ArrayRef<Integer> indexs)
    {
        Range[0:0]
        {
            // 0图层子图显示KD
            HighestValue = HighestFC(High, Length);
            LowestValue = LowestFC(Low, Length); 
            SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);
            SumCLValue = SummationFC(Close - LowestValue,SlowLength);
            If(SumHLValue <> 0)
            {
                KValue = SumCLValue/SumHLValue*100;
            }Else
            {
                KValue = 0;
            }
            DValue = AverageFC(KValue,SmoothLength);
            plt1.line("K",Date+Time,KValue);
            plt1.line("D",Date+Time,DValue);
            plt1.line("Ref1",Date+Time,20);
            plt1.line("Ref2",Date+Time,80);

        }
        Range[1:1]
        {
            // 1图层子图显示CCI
            TmpValue = High + Low + Close; 
            Mean = AverageFC( TmpValue, CCILength ) ; 
            AvgDev = 0 ;
            for Counter = 0 to CCILength - 1 
            {
                AvgDev = AvgDev + Abs( TmpValue[Counter] - Mean ) ;
            }
            AvgDev = AvgDev / CCILength ;
            if( AvgDev == 0) CCIValue = 0;
            Else CCIValue = ( TmpValue - Mean ) / ( 0.015 * AvgDev ) ;        
            plt2.line("CCI",Date+Time,CCIValue);
            plt2.line("OverBuy",Date+Time,CCIover);
            plt2.line("OverSell",Date+Time,-1*CCIover);

        }
        Range[2:2]
        {
            // 2图层主图显示
            PlotNumeric("AdpMa",AdaptiveMovAvg(Close,EffRatioLength,FastAvgLength,SlowAvgLength));            // AMA线
        }
        
    }

wangkaiming

range[0:datasourcesize-1]
        {
        plt1.figure(0);                                                // 设置子画板输出方式
        plt1.setOption("MA1","x-format","time");                    // 设置X轴
        plt1.setOption("MA1","y-format","Numeric");                    // 设置y轴
        plt2.figure(0);                                             // 设置子画板输出方式
        
        Plt2.setOption("MA1","x-format","time");                    // 设置X轴
        Plt2.setOption("MA1","y-format","Numeric");                    // 设置y轴
        }

2022-05-18 15:51
yanfeng
@wangkaiming

万分感谢

2022-05-18 16:07
yanfeng

原来是这样的,谢谢啦!yes

2022-05-18 16:06
wangkaiming

我来调试下

2022-05-18 15:44
您未登录,请先 登录注册 后发表评论
顶部