Params
Numeric FastLength(12);
Numeric SlowLength(26);
Numeric MACDLength(9);
Vars
Numeric MACDDiff;
Numeric AvgMACD;
Numeric MACDValue;
Numeric YesterdayMACDValue; // 新增:存储昨日 MACD 值
Numeric YesterdayMACDPercentage; // 新增:存储昨日 MACD/收盘价*100 的值
Events
OnReady()
{
Range[0:DataSourceSize() - 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]
{
// 计算当前 MACD 值
MACDDiff = XAverage(Close, FastLength) - XAverage(Close, SlowLength);
AvgMACD = XAverage(MACDDiff, MACDLength);
MACDValue = 2 * (MACDDiff - AvgMACD);
// 获取昨日 MACD 值(通过索引 -1 访问前一根 K 线数据)
If (BarStatus == 2) // 仅在历史数据计算时有效(实盘需调整逻辑)
{
YesterdayMACDValue = MACDValue[1]; // 昨日 MACD 值(前一根 K 线)
If (Close[1] != 0) // 避免除数为零
{
YesterdayMACDPercentage = YesterdayMACDValue / Close[1] * 100;
}
Else
{
YesterdayMACDPercentage = 0; // 处理收盘价为零的异常情况
}
// 输出昨日数据(可根据需求改为绘图或存储)
PlotAuto("昨日 MACD 值:" + Text(YesterdayMACDValue));
}
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);
}
}
昨天?
日线还是非日线?
日线那不就是回溯一下就好了吗?
非日线,那昨日有很多个macd,你要记录哪个?
!!!定势思维了 脑子默认是日线了..... ...鸿沟般的差距
Numeric MACDValue; 改成序列变量 series<Numeric> MACDValue;
之后通过回溯 想取哪天取哪天
MACDValue[N] 表示N天前的MACDValue
基础课里啥都有