无锡路路发软件有限公司

 找回密码
 立即注册
查看: 3505|回复: 0

MT4智能交易编程示例 Ichimoku指标

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6544
帖子
2772
主题
2762
QQ
发表于 2014-4-4 14:37:28 | 显示全部楼层 |阅读模式
MT4智能交易编程示例 Ichimoku指标
  1. #property copyright   "路路发智能交易研发中心"
  2. #property link        "http://www.ea668.com"
  3. #property description "Ichimoku Kinko Hyo"
  4. #property strict

  5. #property indicator_chart_window
  6. #property indicator_buffers 7
  7. #property indicator_color1 Red          // Tenkan-sen
  8. #property indicator_color2 Blue         // Kijun-sen
  9. #property indicator_color3 SandyBrown   // Up Kumo
  10. #property indicator_color4 Thistle      // Down Kumo
  11. #property indicator_color5 Lime         // Chikou Span
  12. #property indicator_color6 SandyBrown   // Up Kumo bounding line
  13. #property indicator_color7 Thistle      // Down Kumo bounding line
  14. //--- input parameters
  15. input int InpTenkan=9;   // Tenkan-sen
  16. input int InpKijun=26;   // Kijun-sen
  17. input int InpSenkou=52;  // Senkou Span B
  18. //--- buffers
  19. double ExtTenkanBuffer[];
  20. double ExtKijunBuffer[];
  21. double ExtSpanA_Buffer[];
  22. double ExtSpanB_Buffer[];
  23. double ExtChikouBuffer[];
  24. double ExtSpanA2_Buffer[];
  25. double ExtSpanB2_Buffer[];
  26. //---
  27. int    ExtBegin;
  28. //+------------------------------------------------------------------+
  29. //| Custom indicator initialization function                         |
  30. //+------------------------------------------------------------------+
  31. void OnInit(void)
  32.   {
  33.    IndicatorDigits(Digits);
  34. //---
  35.    SetIndexStyle(0,DRAW_LINE);
  36.    SetIndexBuffer(0,ExtTenkanBuffer);
  37.    SetIndexDrawBegin(0,InpTenkan-1);
  38.    SetIndexLabel(0,"Tenkan Sen");
  39. //---
  40.    SetIndexStyle(1,DRAW_LINE);
  41.    SetIndexBuffer(1,ExtKijunBuffer);
  42.    SetIndexDrawBegin(1,InpKijun-1);
  43.    SetIndexLabel(1,"Kijun Sen");
  44. //---
  45.    ExtBegin=InpKijun;
  46.    if(ExtBegin<InpTenkan)
  47.       ExtBegin=InpTenkan;
  48. //---
  49.    SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
  50.    SetIndexBuffer(2,ExtSpanA_Buffer);
  51.    SetIndexDrawBegin(2,InpKijun+ExtBegin-1);
  52.    SetIndexShift(2,InpKijun);
  53.    SetIndexLabel(2,NULL);
  54.    SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
  55.    SetIndexBuffer(5,ExtSpanA2_Buffer);
  56.    SetIndexDrawBegin(5,InpKijun+ExtBegin-1);
  57.    SetIndexShift(5,InpKijun);
  58.    SetIndexLabel(5,"Senkou Span A");
  59. //---
  60.    SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
  61.    SetIndexBuffer(3,ExtSpanB_Buffer);
  62.    SetIndexDrawBegin(3,InpKijun+InpSenkou-1);
  63.    SetIndexShift(3,InpKijun);
  64.    SetIndexLabel(3,NULL);
  65.    SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
  66.    SetIndexBuffer(6,ExtSpanB2_Buffer);
  67.    SetIndexDrawBegin(6,InpKijun+InpSenkou-1);
  68.    SetIndexShift(6,InpKijun);
  69.    SetIndexLabel(6,"Senkou Span B");
  70. //---
  71.    SetIndexStyle(4,DRAW_LINE);
  72.    SetIndexBuffer(4,ExtChikouBuffer);
  73.    SetIndexShift(4,-InpKijun);
  74.    SetIndexLabel(4,"Chikou Span");
  75. //--- initialization done
  76.   }
  77. //+------------------------------------------------------------------+
  78. //| Ichimoku Kinko Hyo                                               |
  79. //+------------------------------------------------------------------+
  80. int OnCalculate(const int rates_total,
  81.                 const int prev_calculated,
  82.                 const datetime &time[],
  83.                 const double &open[],
  84.                 const double &high[],
  85.                 const double &low[],
  86.                 const double &close[],
  87.                 const long &tick_volume[],
  88.                 const long &volume[],
  89.                 const int &spread[])
  90.   {
  91.    int    i,k,pos;
  92.    double high_value,low_value;
  93. //---
  94.    if(rates_total<=InpTenkan || rates_total<=InpKijun || rates_total<=InpSenkou)
  95.       return(0);
  96. //--- counting from 0 to rates_total
  97.    ArraySetAsSeries(ExtTenkanBuffer,false);
  98.    ArraySetAsSeries(ExtKijunBuffer,false);
  99.    ArraySetAsSeries(ExtSpanA_Buffer,false);
  100.    ArraySetAsSeries(ExtSpanB_Buffer,false);
  101.    ArraySetAsSeries(ExtChikouBuffer,false);
  102.    ArraySetAsSeries(ExtSpanA2_Buffer,false);
  103.    ArraySetAsSeries(ExtSpanB2_Buffer,false);
  104.    ArraySetAsSeries(open,false);
  105.    ArraySetAsSeries(high,false);
  106.    ArraySetAsSeries(low,false);
  107.    ArraySetAsSeries(close,false);
  108. //--- initial zero
  109.    if(prev_calculated<1)
  110.      {
  111.       for(i=0; i<InpTenkan; i++)
  112.          ExtTenkanBuffer[i]=0.0;
  113.       for(i=0; i<InpKijun; i++)
  114.          ExtKijunBuffer[i]=0.0;
  115.       for(i=0; i<ExtBegin; i++)
  116.         {
  117.          ExtSpanA_Buffer[i]=0.0;
  118.          ExtSpanA2_Buffer[i]=0.0;
  119.         }
  120.       for(i=0; i<InpSenkou; i++)
  121.         {
  122.          ExtSpanB_Buffer[i]=0.0;
  123.          ExtSpanB2_Buffer[i]=0.0;
  124.         }
  125.      }
  126. //--- Tenkan Sen
  127.    pos=InpTenkan-1;
  128.    if(prev_calculated>InpTenkan)
  129.       pos=prev_calculated-1;
  130.    for(i=pos; i<rates_total; i++)
  131.      {
  132.       high_value=high[i];
  133.       low_value=low[i];
  134.       k=i+1-InpTenkan;
  135.       while(k<=i)
  136.         {
  137.          if(high_value<high[k])
  138.             high_value=high[k];
  139.          if(low_value>low[k])
  140.             low_value=low[k];
  141.          k++;
  142.         }
  143.       ExtTenkanBuffer[i]=(high_value+low_value)/2;
  144.      }
  145. //--- Kijun Sen
  146.    pos=InpKijun-1;
  147.    if(prev_calculated>InpKijun)
  148.       pos=prev_calculated-1;
  149.    for(i=pos; i<rates_total; i++)
  150.      {
  151.       high_value=high[i];
  152.       low_value=low[i];
  153.       k=i+1-InpKijun;
  154.       while(k<=i)
  155.         {
  156.          if(high_value<high[k])
  157.             high_value=high[k];
  158.          if(low_value>low[k])
  159.             low_value=low[k];
  160.          k++;
  161.         }
  162.       ExtKijunBuffer[i]=(high_value+low_value)/2;
  163.      }
  164. //--- Senkou Span A
  165.    pos=ExtBegin-1;
  166.    if(prev_calculated>ExtBegin)
  167.       pos=prev_calculated-1;
  168.    for(i=pos; i<rates_total; i++)
  169.      {
  170.       ExtSpanA_Buffer[i]=(ExtKijunBuffer[i]+ExtTenkanBuffer[i])/2;
  171.       ExtSpanA2_Buffer[i]=ExtSpanA_Buffer[i];
  172.      }
  173. //--- Senkou Span B
  174.    pos=InpSenkou-1;
  175.    if(prev_calculated>InpSenkou)
  176.       pos=prev_calculated-1;
  177.    for(i=pos; i<rates_total; i++)
  178.      {
  179.       high_value=high[i];
  180.       low_value=low[i];
  181.       k=i+1-InpSenkou;
  182.       while(k<=i)
  183.         {
  184.          if(high_value<high[k])
  185.             high_value=high[k];
  186.          if(low_value>low[k])
  187.             low_value=low[k];
  188.          k++;
  189.         }
  190.       ExtSpanB_Buffer[i]=(high_value+low_value)/2;
  191.       ExtSpanB2_Buffer[i]=ExtSpanB_Buffer[i];
  192.      }
  193. //--- Chikou Span
  194.    pos=0;
  195.    if(prev_calculated>1)
  196.       pos=prev_calculated-1;
  197.    for(i=pos; i<rates_total; i++)
  198.       ExtChikouBuffer[i]=close[i];
  199. //---
  200.    return(rates_total);
  201.   }
  202. //+------------------------------------------------------------------+
复制代码





外汇智能交易,成就财富梦想!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|无锡路路发软件有限公司 ( 沪ICP备13011711号-1 )

苏公网安备 32021102000151号

GMT+8, 2019-7-20 07:51 , Processed in 1.328125 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表