收藏 分销(赏)

MT4编程实例:箭头符号.doc

上传人:xrp****65 文档编号:7687784 上传时间:2025-01-12 格式:DOC 页数:5 大小:40.50KB
下载 相关 举报
MT4编程实例:箭头符号.doc_第1页
第1页 / 共5页
MT4编程实例:箭头符号.doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述
MT4编程实例:箭头符号 (2008-07-05 21:37:14) 转载 符号是一种断断续续的指标线。在指标线有值区域,指标线显示;在指标线无值区域,指标线隐藏。例如下图:当价格上穿、下穿均线时,均线上出现一个标记符号。   原理也很简单:在上图中,存在二条指标线,一条是均线,另一条是笑脸符号线。 均线在任何位置都有值,所以均线是一条连续的曲线; 当价格上、下穿均线时,符号线被赋予了均线值;而在其他位置上,符号线被赋了空值。所以只是在价格上、下穿均线的位置上,符号线才有值,才能出现笑脸符号。因为符号线只是个别位置有值,所以符号线仅在个别位置显现。 符号也正好落在均线上,因为符号线值=均线值。如果符号线被赋了别的值,例如(符号线=均线+10点),那么符号水平坐标不变,垂直坐标将是均线上方的10点位置。 源码如下: //====================================================== #property  indicator_chart_window #property  indicator_buffers 1            #property  indicator_color1 Yellow extern int  均线=10; double mk[]; double temp0,temp1; 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--;    limit=Bars-counted_bars-均线;    for(int i=0; i<limit; i++)       {        temp0=iMA(NULL,0,均线,0,0,0,i);        temp1=iMA(NULL,0,均线,0,0,0,i+1);        mk[i]=EMPTY_VALUE;        if(Close[i]>temp0  && Close[i+1]<temp1)  mk[i]=temp0;        if(Close[i]<temp0  && Close[i+1]>temp1)  mk[i]=temp0;       }   return(0);   } //源码到此已结束 ============================================= 语句简要解释如下: ============================================= #property  indicator_chart_window 指标放在主图 #property  indicator_buffers 1            设置指标线数为1条 #property  indicator_color1 Yellow 设置第一条指标线颜色为黄色 extern int  均线=10; 设立一个自定义变量,允许外部值修改,整数形,变量名为"均线",默认值10 double mk[]; 设立一个自定义数组,双精度型 double temp0,temp1; 设立二个自定义变量,双精度型,变量名为temp0、temp1 int init() 设立初始化函数init。init为系统规定函数名,函数内容自定义。该函数在指标被加载时仅运行一次   {     IndicatorBuffers(1);     指标线数量为1条        SetIndexBuffer(0,mk);     第一条指标线的数组为mk     SetIndexStyle(0,DRAW_ARROW);     第一条指标线的线型为箭头符号     SetIndexArrow(0,204);     第一条指标线的箭头符号为第204种符号,如果换一个编号,那出现的就是另一种符号。箭头符号的编码详见《MT4编程参考》     IndicatorDigits(Digits);     设置指标线的小数位数     Digits=当前汇率的小数位数,如日元叉盘Digits=2,其他币对Digits==4    return(0);    函数结束,返回零值   } int start() 设立触发函数start。start为系统规定函数名,函数内容自定义。当数据变动时,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    这是为了配合下一句,以避免limit相差1而发生出错    limit=Bars-counted_bars-均线;    这是给limit赋值    Bars为图表中的柱数    counted_bars为已经赋值的柱数    这样limit的结果就是未赋值的烛柱数    再减去“均线”是因为图表最右边段均线无意义    for(int i=0; i<limit; i++)    循环语句,括号中有三个语句:    第一句int i=0; 表示循环从i=0开始    第二句i<limit; 这是循环的条件,如果条件满足则执行大括号中的循环体,如果条件不满足,则中止循环,跳到大括号下面的语句执行    第三句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_VALUE就是空值        if(Close[i]>temp0  && Close[i+1]<temp1)  mk[i]=temp0;        条件判断语句。如果在i位置上价格大于均线,并且在(i+1)位置上价格小于均线(即价格上穿均线),则给数组mk在i位置上赋该位置的均线值        Close[i]:在i位置上收盘价。        &&:逻辑运算符“并且”        if(Close[i]<temp0  && Close[i+1]>temp1)  mk[i]=temp0;        与上一句相似       }   return(0);   start函数结束语句
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服