Range用法与多周期数据计算
以下代码一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); }