首页 / 交易学院 / 基于已有指标编写新指标(iCustom/派生)
基于已有指标编写新指标(iCustom/派生)
🧬

基于已有指标编写新指标(iCustom/派生)

改造开源指标或用 iCustom 引用它,派生出新指标

MQL5 编程 难度 · 进阶 2026-07-15 10 分钟阅读
#MQL5#指标#iCustom#派生#缓冲区

本文讲如何基于已有指标(内置或自定义)写新指标:①改开源自定义指标加一条信号线;②用 iCustom / IndicatorCreate 引用已有指标,算差值做新标绘。

一、两种站在别人肩膀上的写法

路线一改源码、路线二引用成品,两条路都讲,按你手上有什么选。

二、改造现有指标加信号线

三、用 MovingAverages 库算信号线

系统库提供 SMA/EMA/LWMA/SMMA 函数;用 switch(sm) 选类型,ExponentialMAOnBuffer 等把主线平滑成信号线。

✦ 原料与成品分开
中间计算缓冲用 INDICATOR_CALCULATIONS,不会画出来但能被主计算引用——把原料和成品缓冲分开是写好复杂指标的关键。

四、用 iCustom 引用别的指标

Handle = iCustom(_Symbol, PERIOD_CURRENT, "TSIs", r, s, sp, sm);OnCalculate 里 CopyBuffer 复制源指标缓冲,再循环算差值/着色。

五、彩色直方图与计算范围

⚠ begin 与错误重算
begin 参数别早于源数据起始(文中 begin2 = begin + r + s - 1);CopyBuffer 返回 -1 时设静态 error 下次全量重算,否则会画出断层。

常见问题

要画出来的缓冲用 DATA;只当中间变量的用 CALCULATIONS,既省显存也避免图上多出无关线。
几乎一样,都返回句柄再用 CopyBuffer 取数;差别只是指标 Create 用 MqlParam 数组传参,iCustom 直接列参数。
让指标只在新增的柱上算,历史部分不重算,既快又不会在左端画出计算空洞。
准备一个颜色索引缓冲,循环里按大于/小于/等于前一根赋 0/1/继承,渲染器据此选色。
先另存副本再改;确认原指标的缓冲区含义与索引;新增缓冲后重新索引,否则新旧缓冲会错位。