: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

[转载]MT4编程实例:箭头符号(1)

[转载]MT4编程实例:箭头符号(1)

均线在任何位置都有值,所以均线是一条连续的曲线;
当价格上、下穿均线时,符号线被赋予了均线值;而在其他位置上,符号线被赋了空值。所以只是在价格上、下穿均线的位置上,符号线才有值,才能出现笑脸符号。因为符号线只是个别位置有值,所以符号线仅在个别位置显现。
符号也正好落在均线上,因为符号线值=均线值。如果符号线被赋了别的值,例如(符号线=均线+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函数结束语句

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表