以下代码一Range块会计算几个图层的数据 计算三个周期的MACD指标更推荐哪一种写法?或者是否有更好的写法?请完全解答疑问 给个确切答案 如何计算1m 5分 30分三个周期的MACD指标
OnBar(ArrayRef<Integer> indexs)
{
Range[bigLayer1:bigLayer2]
{
ma1 = AverageFC(Close, Len1);
ma2 = AverageFC(Close, Len2);
PlotNumeric("ma1", ma1);
PlotNumeric("ma2", ma2); // <--- 修正4: 将冒号':'改为分号';'
Commentary("[ma1]" + Text(ma1));
Commentary("[ma2]" + Text(ma2));
if(CurrentBar >= MaxBarsBack) barsOk = True;
Commentary("====================");
Commentary("[CurrentBar]" + Text(CurrentBar));
Commentary("[MaxBarsBack] " + Text(MaxBarsBack));
// <--- 修正5: 修正 Commentary 函数的错误
Commentary("[barsOK]" + IIfString(barsOk, "K线根数OK", "K线不足"));
}
OnBar(ArrayRef<Integer> indexs)
{
// --- 主图 (data0) 自身的计算 ---
Range[0:0]
{
// 计算主图 MACD...
diff = XAverage(Close, FastLen) - XAverage(Close, SlowLen);
dea = XAverage(diff, SignalLen);
macd = diff - dea;
if(CurrentBar >= MaxBarsBack) barsOk = True;
}
// --- 30分钟大周期 (bigLayer1) ---
Range[bigLayer1:bigLayer1]
{
// 为该周期的数据源独立计算
diff_b1 = XAverage(Close, FastLen) - XAverage(Close, SlowLen);
dea_b1 = XAverage(diff_b1, SignalLen);
macd_b1 = diff_b1 - dea_b1;
barsOk_b1 = Data[bigLayer1].barsOk;
// 在大周期图层上直接判断
bool goldCross_b1 = CrossOver(diff_b1, dea_b1);
bool deadCross_b1 = CrossUnder(diff_b1, dea_b1);
}
// --- 5分钟中周期 (bigLayer2) ---
Range[bigLayer2:bigLayer2]
{
diff_b2 = XAverage(Close, FastLen) - XAverage(Close, SlowLen);
dea_b2 = XAverage(diff_b2, SignalLen);
macd_b2 = diff_b2 - dea_b2;
barsOk_b2 = Data[bigLayer2].barsOk;
bool goldCross_b2 = CrossOver(diff_b2, dea_b2);
bool deadCross_b2 = CrossUnder(diff_b2, dea_b2);
}