1. 用 OnCalculate 做增量更新,替换全量 start()
问题:当前 start() 每个 Tick 都要跑两段 for(i=bars–1 …) 的全量循环(TMA ...
1. 用 OnCalculate 做增量更新,替换全量 start()
问题:当前 start() 每个 Tick 都要跑两段 for(i=bars–1 …) 的全量循环(TMA、EMA、MarkBS 内的多层循环),即使你把 bars 砍到 500,也仍是 O(500²) 的重复计算。
建议:改用 MQL4 新版指标模板的 OnCalculate(),并利用 prev_calculated 只对 “新增” 或 “修改” 的那根/几根 Bar 做计算:
mql4
复制
编辑
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[], const double &high[],
const double &low[], const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int start = prev_calculated > 0 ? prev_calculated - 1 : HalfLength;
// 只针对 start..rates_total-1 的点做中轨/趋势线/EMA 计算
for(int i = start; i < rates_total; i++)
{
// …三角加权、中轨、上下轨、趋势线、EMA9/45 计算
}
ChartRedraw();
return rates_total;
}
这样,每次 Tick 最多只计算几根 K 线,大幅降低 CPU 占用。
这个OnCalculate参数很不错呀,只是没有尝试过。 |
|
|
|
|
|
|
|