1、MT4编程实例:箭头符号 (2008-07-05 21:37:14) 转载 符号是一种断断续续的指标线。在指标线有值区域,指标线显示;在指标线无值区域,指标线隐藏。例如下图:当价格上穿、下穿均线时,均线上出现一个标记符号。 原理也很简单:在上图中,存在二条指标线,一条是均线,另一条是笑脸符号线。 均线在任何位置都有值,所以均线是一条连续的曲线; 当价格上、下穿均线时,符号线被赋予了均线值;而在其他位置上,符号线被赋了空值。所以只是在价格上、下穿均线的位置上,符号线才有值,才能出现笑脸符号。因为符号线只是个别位置有值,所以符号线仅在个别位置显现。 符号也正好落在均线上,
2、因为符号线值=均线值。如果符号线被赋了别的值,例如(符号线=均线+10点),那么符号水平坐标不变,垂直坐标将是均线上方的10点位置。 源码如下: //====================================================== #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Yellow extern int 均线=10; double mk[]; double temp0,temp1;
3、 int init() { IndicatorBuffers(1); SetIndexBuffer(0,mk); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,204); IndicatorDigits(Digits); return(0); } int start() { int limit; int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--;
4、 limit=Bars-counted_bars-均线;
for(int i=0; i
5、 } return(0); } //源码到此已结束 ============================================= 语句简要解释如下: ============================================= #property indicator_chart_window 指标放在主图 #property indicator_buffers 1 设置指标线数为1条 #property indicator_color1 Yellow 设置第一条指标线颜色为黄色 extern in
6、t 均线=10; 设立一个自定义变量,允许外部值修改,整数形,变量名为"均线",默认值10 double mk[]; 设立一个自定义数组,双精度型 double temp0,temp1; 设立二个自定义变量,双精度型,变量名为temp0、temp1 int init() 设立初始化函数init。init为系统规定函数名,函数内容自定义。该函数在指标被加载时仅运行一次 { IndicatorBuffers(1); 指标线数量为1条 SetIndexBuffer(0,mk); 第一条指标线的数组为mk SetIndex
7、Style(0,DRAW_ARROW); 第一条指标线的线型为箭头符号 SetIndexArrow(0,204); 第一条指标线的箭头符号为第204种符号,如果换一个编号,那出现的就是另一种符号。箭头符号的编码详见《MT4编程参考》 IndicatorDigits(Digits); 设置指标线的小数位数 Digits=当前汇率的小数位数,如日元叉盘Digits=2,其他币对Digits==4 return(0); 函数结束,返回零值 } int start() 设立触发函数start。start为系统规定函数
8、名,函数内容自定义。当数据变动时,start函数被触发 { int limit; 设立整数型自定义变量limit int counted_bars=IndicatorCounted(); 设立整数型自定义变量counted_bars,并将IndicatorCounted()的值赋给counted_bars IndicatorCounted()为缓存数量,即已经计算过值的烛柱数 if(counted_bars>0) counted_bars--; 如果counted_bars大于零,则将counted_bars的值减掉1 这是
9、为了配合下一句,以避免limit相差1而发生出错
limit=Bars-counted_bars-均线;
这是给limit赋值
Bars为图表中的柱数
counted_bars为已经赋值的柱数
这样limit的结果就是未赋值的烛柱数
再减去“均线”是因为图表最右边段均线无意义
for(int i=0; i 10、号下面的语句执行
第三句i++,这是循环步调控制语句,每循环一次后执行一次此语句。
i++相当于i=i+1,即i值在原有数值上增加1
{
temp0=iMA(NULL,0,均线,0,0,0,i);
把均线在i位置上的值赋给temp0
iMA:均线取值函数
temp1=iMA(NULL,0,均线,0,0,0,i+1);
把均线在(i+1)位置上的值赋给temp1
mk[i]=EMPTY_VALUE;
给数组mk在i位置上赋空值
EMPTY_ 11、VALUE就是空值
if(Close[i]>temp0 && Close[i+1]






