MQL5指标转EA:OnCalculate中rates_total与prev_calculated等效项咨询
在MQL5的OnTick函数中替代OnCalculate的rates_total和prev_calculated的方法
在EA的OnTick()函数里,没有直接对应指标OnCalculate()中rates_total和prev_calculated的内置参数,需通过函数自行获取或维护:
1. 替代rates_total的方式
rates_total代表当前K线数组的总数量,可通过Bars()函数直接获取:
int rates_total = Bars(_Symbol, _Period);
也可通过复制K线时间数组后取长度,确保严谨性:
datetime time_array[]; CopyTime(_Symbol, _Period, 0, Bars(_Symbol, _Period), time_array); int rates_total = ArraySize(time_array);
2. 替代prev_calculated的方式
prev_calculated用于记录上一次已处理的K线数量,避免重复计算。EA中需自定义全局变量维护该值:
// 全局变量:存储上一次处理完成的K线总数 int g_prev_calculated = 0; void OnTick() { int current_bars = Bars(_Symbol, _Period); // 首次运行初始化 if(g_prev_calculated == 0) { g_prev_calculated = current_bars; return; } // 计算新增K线数量 int new_bars = current_bars - g_prev_calculated; if(new_bars > 0) { // 此处编写新增K线的处理逻辑 // ... // 更新已处理K线总数记录 g_prev_calculated = current_bars; } }
注意:当品种、周期切换或图表重新加载时,需在OnInitialize()或OnChartEvent()中重置g_prev_calculated的值。
内容的提问来源于stack exchange,提问作者lancegoh
相关产品推荐
相关产品推荐

