MT4指标编程入门:绘制指标线详解
要在MT4中绘制一条指标线,在程序中明确以下几个要点即可:
首先,需要确定指标线显示的窗口,是在主图还是副图区域。
其次,必须建立一个数组,用于存储指标线在每个价格位置上的数值。
接着,要建立指标线与数组之间的对应关系,明确哪个数组对应哪条线。
然后,需定义指标线的样式,是曲线、柱线还是箭头符号。
如果选择箭头作为线型,还需要进一步指定所使用的箭头类型。
最后,就是对数组进行赋值计算。
这些步骤的代码编写位置有所不同:
其中,第二点关于数组的声明通常写在程序文件的头部。
第三、四、五点则写在init()初始化函数中(该函数仅在指标加载时运行一次)。
第六点赋值计算部分,写在start()函数中(该函数在价格数据变动时触发,每次变动运行一次)。
下面我们以经典的MACD指标为例进行具体说明。
标准的MACD指标由两条曲线和一组柱状线组成。
其中:
白线(DIF)是两条指数移动平均线的差值;
紫线(DEA)是白线的移动平均线;
红绿柱状线(MACD柱)则是白线与紫线的差值,当白线上穿紫线时显示为红柱,下穿时显示为绿柱。
为了简化理解,我们先忽略紫线和柱状线,仅关注如何画出那根白线。理解其绘制原理,对于后续进行更复杂的BCR指标或自定义指标开发都很有帮助。
以下是绘制MACD白线的完整代码示例:
#property indicator_separate_window
#property indicator_color1 White
#property indicator_level1 0
extern int FMA = 12;
extern int SMA = 26;
double buf[];
int init()
{
SetIndexBuffer(0, buf);
SetIndexStyle(0, DRAW_LINE);
return(0);
}
int start()
{
int limit = Bars - IndicatorCounted();
for(int i=0; i { buf[i] = iMA(NULL, 0, FMA, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SMA, 0, MODE_EMA, PRICE_CLOSE, i); } return(0); } 代码说明如下: ============================================== #property indicator_separate_window 表示该指标显示在独立的副图窗口。 #property indicator_color1 White 设置第一条指标线的颜色为白色。 #property indicator_level1 0 在副图窗口的零值位置绘制一条水平参考线。 extern int FMA = 12; extern int SMA = 26; 声明两个外部可调的整数变量,默认值分别为12和26,用户可以在指标属性中修改。 double buf[]; 声明一个双精度浮点型数组。 int init() 这是初始化函数。当指标被加载到图表时,此函数仅自动执行一次。init是系统预定义的函数名,但使用时仍需用int进行定义。 { SetIndexBuffer(0, buf); 将数组buf与第一条指标线绑定。 SetIndexStyle(0, DRAW_LINE); 设置第一条指标线的样式为连续曲线。掌握这些基础设置,是未来开发类似BCR等自定义指标的前提。 return(0); 函数执行完毕的返回语句。 } int start() 这是指标的核心计算函数。与init函数不同,每当图表上有新的价格数据产生或变动时,此函数就会被自动调用执行。start也是系统预定义的函数名,同样需要用int定义。 { int limit = Bars - IndicatorCounted(); 定义一个变量limit并赋值,用于优化计算。 Bars代表当前图表中的总K线柱数。 IndicatorCounted()返回已经计算过并缓存起来的K线柱数。 两者相减得到的limit,就是尚未计算的新K线柱数量,从而避免每次都对所有历史数据进行重复计算,提升效率。 for(int i=0; i 循环语句。 循环从i=0开始,每次循环i的值增加1,直到i小于limit的条件不满足为止。 由于循环计数器i是一个新变量,所以需要在循环开始时用int进行定义。 循环体(由大括号包围的部分)内的语句将被重复执行,本例中只有一条赋值语句。 { buf[i] = iMA(NULL, 0, FMA, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SMA, 0, MODE_EMA, PRICE_CLOSE, i); } 为数组buf的每个元素赋值,其值为对应K线位置上,两条不同周期均线的差值。这是MACD指标的核心计算逻辑,理解它有助于你构建自己的交易策略或BCR分析工具。 变量i代表水平方向的位置索引,即K线从右向左的序号,图表最右侧最新的那根K线序号为0。 return(0); start函数执行结束。 }
