自定义指标的基础知识


引言

本文的通过举例来解释创建自定义指标的原理, 程序员可以在语言NTL+中开始创建的第一步.


在创建自定义指标时, 您需要确定指标的算法, 如何计算指标缓冲区的值, 并如何显示在屏幕中. 这些值的正确编辑是指标的最终目的


作为创建指标的例子, 将展示大量收盘价大于收盘价的柱图和收盘价小于开盘价的柱图的区别 ; 这些区别在n个区间中积累. 我们将展示该指标以直方图的形式显示在单独的窗口中.


编写脚本代码

我们的算法非常简单并且直观, 可以在图表中轻松查看指标的工作. 对于每个第i个柱图, 我们将分析前n个柱图并形成统计, 如果检测到柱图上升, 则加1, 相反则减1.

让我们来看一下指标的代码.


开始需要声明指标用到的所有参数.

#set_indicator_separate double ExtMapBuffer1[]; int ExtCountedBars=0; extern int period = 10;

预处理指令#set_indicator_separate指示我们将在单独的窗口中输出图表, 并不在主图表中叠加. 在下一行声明了一个全局数组ExtMapBuffer1, 其中将保存指标缓存区的值. 注意我们不会设置该数组的大小, 因为编辑器自动分配存储器 .


在数组ExtMapBuffer1 中实际保存的是点的坐标值, 数组索引确定横坐标. 之后我们初始化参数ExtCountedBars为0. 该参数将保存已经计算的数量. 因此我们不需要每次都计算所有的柱图, 这大大加快了指标值的计算; 指标图表的运行将更快. 在下一行声明全局变量period , 其用来保存计算设定统计的区间的数量. 注意extern的使用使得我们可以不需要编译通过指标属性直接修改参数.


分析函数Initialize(), 将指定每个指标的基础设置.


Indicator 的对象SetIndexCount 放置指标的值的缓存数量. 带有值的缓存ExtMapBuffer1我们只有一个, 因此指明作为唯一参数为1. 同样我们需要将缓存的号码与带有缓存值的数字联系起来. 该联系将在行SetIndexBuffer(0,ExtMapBuffer1)给出, 在该处定义描述来自缓存ExtMapBuffer1非零指标的属性.


下面一行中, 我们设置指标的属性. SetIndexStyle的第一个参数提供缓冲号; 我们指定SetIndexBuffer值为0. 第二个参数指定渲染类型:柱状图。第三参数指定lsSolid的样式(事实上, 可以设置为任意值, 因此该选项只影响线和宽度)。下一个参数设定clrBlue线宽度5和颜色为蓝色(颜色也可设定为RGB格式, 例如, 0x0000FF).


之后运行函数Run(), 该函数完成基本的检测并执行用户函数draw(). 函数draw() 完成所有计算.