求助:跨周期,共振行情的代码咋写

各位老师好:请问下1小时macd是金叉,15分钟macd金叉 开仓,死叉平仓,这样的跨周期共振行情的代码咋写啊

关于跨周期代码在行情页面加载运行的问题
跨周期帮忙写
跨周期模型编写
申请周期共振策略编写
跨周期代码编写
TB跨周期MA的问题
跨周期订阅行情问题
关于跨周期的问题
关于跨周期的问题
quant3关于跨周期引用的问题

已隐藏违规内容

发联系 方式的按规定是禁言的。

我给你内容修改了,不要再犯了。下次就永久禁言了

搞清楚图层,剩下的就简单了,MACD两条线,如果是15分钟金叉,就是data0.白线>data0.黄线

如果是60分钟就是data1.白线>data1.黄线,看你引用的是什么,基础周期是什么,

你得自己试

基础周期就是你加载的是什么周期,也就是data0.C盘价

data1.C就是你引用的

首先搞清图层问题,如何在两个周期显示两个macd

//------------------------------------------------------------------------
// 简称: MACD
// 名称: 平滑异同移动平均线
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
    Numeric FastLength(12);
    Numeric SlowLength(26);
    Numeric MACDLength(9);
Vars
    Numeric MACDDiff;
    Numeric AvgMACD;
    Numeric MACDValue;
Events
    OnInit()
    {
        // 订阅当前合约的1分钟K线数据
        SubscribeBar(Symbol, "15m", BeginDateTime);//订阅图层为15分钟,也就是DATA1.C 代表15分钟的收盘价,data0,C代表60分钟的收盘价
    
        // 隐藏data0数据源的默认图表,只能看小周期做基础,引用小周期,重点,要设置1小时,下加载策略
        //data0.Hide;
        //隐藏60分钟,只显示15分钟
    
    }
    OnReady()
    {
        Range[0:DataSourceSize() - 1]//图层,当前图层=0也就是60分钟,DataSourceSize() - 1表示一共几个图层,或者直接写Range[0:1],或者如果说你想显示在15分钟,那么就写Range[1:1]
        {
            setPlotOption("MACDDiff", "begin-bar", SlowLength);
            setPlotOption("MACDDEA", "begin-bar", SlowLength + MACDLength);
            setPlotOption("MACD", "begin-bar", SlowLength + MACDLength);
        }
        Range[1:DataSourceSize() - 1]//图层,当前图层=0也就是60分钟,DataSourceSize() - 1表示一共几个图层,或者直接写Range[0:1],或者如果说你想显示在15分钟,那么就写Range[1:1]
        {
            setPlotOption("MACDDiff", "begin-bar", SlowLength);
            setPlotOption("MACDDEA", "begin-bar", SlowLength + MACDLength);
            setPlotOption("MACD", "begin-bar", SlowLength + MACDLength);
        }
    }
    OnBar(ArrayRef<Integer> indexs)
    {
        Range[0:DataSourceSize() - 1]
        {
            MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
            AvgMACD = XAverage(MACDDiff, MACDLength);
            MACDValue = 2 * (MACDDiff - AvgMACD);
            PlotNumeric("MACDDiff", MACDDiff);
            PlotNumeric("MACDDEA", AvgMACD);
    
            If (MACDValue >= 0)
                PlotAuto("MACD", MACDValue, 0, Color9(), Enum_Bar);
            Else
                PlotAuto("MACD", MACDValue, 0, Color10(), Enum_Bar);
    
            PlotNumeric("零线", 0);
        }
    
    
        Range[1:DataSourceSize() - 1]
        {
            MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
            AvgMACD = XAverage(MACDDiff, MACDLength);
            MACDValue = 2 * (MACDDiff - AvgMACD);
            PlotNumeric("MACDDiff", MACDDiff);
            PlotNumeric("MACDDEA", AvgMACD);
    
            If (MACDValue >= 0)
                PlotAuto("MACD", MACDValue, 0, Color9(), Enum_Bar);
            Else
                PlotAuto("MACD", MACDValue, 0, Color10(), Enum_Bar);
    
            PlotNumeric("零线", 0);
        }
    
    
    
    
    }

然后,去掉一个周期也就是去掉60分钟,只显示15分钟,然后15分钟引用60分钟MACD,这种引用会出现未来问题,因为60分钟金叉可能是发生在0-59分钟的时候结果到60就没信号了,所以要用

onclosebar去触发,如果用onbar 触发,就要在1小时周期下引用15分钟,

//------------------------------------------------------------------------
// 简称: MACD
// 名称: 平滑异同移动平均线
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
    Numeric FastLength(12);
    Numeric SlowLength(26);
    Numeric MACDLength(9);
Vars
    Numeric MACDDiff;
    Numeric AvgMACD;
    Numeric MACDValue;
Events
    OnInit()
    {
        // 订阅当前合约的1分钟K线数据
        SubscribeBar(Symbol, "60m", BeginDateTime);//订阅图层为15分钟,也就是DATA1.C 代表15分钟的收盘价,data0,C代表60分钟的收盘价
    
        // 隐藏data0数据源的默认图表,只能看小周期做基础,引用小周期,重点,要设置1小时,下加载策略
        //data0.Hide;
        //隐藏60分钟,只显示15分钟
    
    }
    OnReady()
    {
        Range[0:DataSourceSize() - 1]//图层,当前图层=0也就是60分钟,DataSourceSize() - 1表示一共几个图层,或者直接写Range[0:1],或者如果说你想显示在15分钟,那么就写Range[1:1]
        {
            setPlotOption("MACDDiff", "begin-bar", SlowLength);
            setPlotOption("MACDDEA", "begin-bar", SlowLength + MACDLength);
            setPlotOption("MACD", "begin-bar", SlowLength + MACDLength);
        }
        Range[1:DataSourceSize() - 1]//图层,当前图层=0也就是60分钟,DataSourceSize() - 1表示一共几个图层,或者直接写Range[0:1],或者如果说你想显示在15分钟,那么就写Range[1:1]
        {
            setPlotOption("MACDDiff", "begin-bar", SlowLength);
            setPlotOption("MACDDEA", "begin-bar", SlowLength + MACDLength);
            setPlotOption("MACD", "begin-bar", SlowLength + MACDLength);
        }
    }
    OnBar(ArrayRef<Integer> indexs)
    {
        Range[0:DataSourceSize() - 1]
        {
            MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
            AvgMACD = XAverage(MACDDiff, MACDLength);
            MACDValue = 2 * (MACDDiff - AvgMACD);
            PlotNumeric("MACDDiff", MACDDiff);
            PlotNumeric("MACDDEA", AvgMACD);
    
            If (MACDValue >= 0)
                PlotAuto("MACD", MACDValue, 0, Color9(), Enum_Bar);
            Else
                PlotAuto("MACD", MACDValue, 0, Color10(), Enum_Bar);
    
            PlotNumeric("零线", 0);
        }
    
    
        Range[1:DataSourceSize() - 1]
        {
            MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
            AvgMACD = XAverage(MACDDiff, MACDLength);
            MACDValue = 2 * (MACDDiff - AvgMACD);
            PlotNumeric("MACDDiff", MACDDiff);
            PlotNumeric("MACDDEA", AvgMACD);
    
            If (MACDValue >= 0)
                PlotAuto("MACD", MACDValue, 0, Color9(), Enum_Bar);
            Else
                PlotAuto("MACD", MACDValue, 0, Color10(), Enum_Bar);
    
            PlotNumeric("零线", 0);
        }
    
    
    
    
    }
//------------------------------------------------------------------------
// 编译版本    GS2010.12.08
// 版权所有    TradeBlazer Software 2003-2025
// 更改声明    TradeBlazer Software保留对TradeBlazer平
//            台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------


谢谢 辛苦了 我得好好反复琢磨琢磨