各位老师好:请问下1小时macd是金叉,15分钟macd金叉 开仓,死叉平仓,这样的跨周期共振行情的代码咋写啊
已隐藏违规内容
发联系 方式的按规定是禁言的。
我给你内容修改了,不要再犯了。下次就永久禁言了
搞清楚图层,剩下的就简单了,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公式修改和重写的权利
//------------------------------------------------------------------------
谢谢 辛苦了 我得好好反复琢磨琢磨