基于已有指标编写新指标(iCustom/派生)
改造开源指标或用 iCustom 引用它,派生出新指标
本文讲如何基于已有指标(内置或自定义)写新指标:①改开源自定义指标加一条信号线;②用 iCustom / IndicatorCreate 引用已有指标,算差值做新标绘。
一、两种站在别人肩膀上的写法
路线一改源码、路线二引用成品,两条路都讲,按你手上有什么选。
二、改造现有指标加信号线
- 改 indicator_buffers / plots 各 +1;
- 声明新缓冲区数组;
- SetIndexBuffer 关联,第三参区分 INDICATOR_DATA(显示)与 INDICATOR_CALCULATIONS(中间);
- PlotIndexSetInteger 切掉开头空白。
三、用 MovingAverages 库算信号线
系统库提供 SMA/EMA/LWMA/SMMA 函数;用 switch(sm) 选类型,ExponentialMAOnBuffer 等把主线平滑成信号线。
四、用 iCustom 引用别的指标
Handle = iCustom(_Symbol, PERIOD_CURRENT, "TSIs", r, s, sp, sm);OnCalculate 里 CopyBuffer 复制源指标缓冲,再循环算差值/着色。
五、彩色直方图与计算范围
- DRAW_COLOR_HISTOGRAM 用值+颜色索引双缓冲,相等继承前色、大于设绿、小于设红;
- 用 prev_calculated 控制计算起点,避免每 tick 重算全部。
六、用 iMA / iADX 取缓冲再组合
派生指标的常见做法:先用 iMA、iADX、iRSI 等拿到底层指标的句柄与缓冲,在自己的 OnCalculate 里读出来做运算(差值、比值、背离),再把结果写进自己的缓冲画线。这样你站在现成指标肩上,只写「组合逻辑」。
注意缓冲索引对齐:不同指标的周期、偏移可能不同,组合前要先统一到同一根 K 线、同一索引,否则会出现「用昨天的快线比今天的慢线」这类错位 bug。 一个稳妥写法是所有输入指标都用同一周期,跨周期组合时显式用 iTime 对齐时间轴,而不是靠索引巧合,这样回测与实盘行为才一致。
七、派生指标的缓冲设计
派生指标通常要两条线:一条主计算线(DRAW_LINE)、一条信号线或箭头(DRAW_ARROW)。在 OnInit 里声明多缓冲,OnCalculate 里分别写值;信号箭头用不同缓冲加箭头缓冲属性。
八、实例:把 RSI 背离做成派生指标
RSI 背离(价格新高但 RSI 不新高)是经典反转信号。派生指标可同时读价格缓冲与 RSI 缓冲,检测「N 根内价格更高但 RSI 更低」,在对应 K 线打箭头。逻辑清晰、可复用,也方便 EA 用 iCustom 直接调用。
做这类指标时把「背离判定窗口 N」「阈值」做成 input 参数,别人和你自己都能调,不必改代码。参数化是派生指标能否被复用的关键。