路路发智能交易研发中心

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

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

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6521
帖子
2771
主题
2761
QQ
发表于 2014-4-4 14:36:31 | 显示全部楼层 |阅读模式
MT4智能交易编程示例 CCI指标

  1. #property copyright   "路路发智能交易研发中心"
  2. #property link        "http://www.ea668.com"
  3. #property description "Commodity Channel Index"
  4. #property strict

  5. #include <MovingAverages.mqh>

  6. #property indicator_separate_window
  7. #property indicator_buffers    1
  8. #property indicator_color1     LightSeaGreen
  9. #property indicator_level1    -100.0
  10. #property indicator_level2     100.0
  11. #property indicator_levelcolor clrSilver
  12. #property indicator_levelstyle STYLE_DOT
  13. //--- input parameter
  14. input int InpCCIPeriod=14; // CCI Period
  15. //--- buffers
  16. double ExtCCIBuffer[];
  17. double ExtPriceBuffer[];
  18. double ExtMovBuffer[];
  19. //+------------------------------------------------------------------+
  20. //| Custom indicator initialization function                         |
  21. //+------------------------------------------------------------------+
  22. int OnInit(void)
  23.   {
  24.    string short_name;
  25. //--- 2 additional buffers are used for counting.
  26.    IndicatorBuffers(3);
  27.    SetIndexBuffer(1,ExtPriceBuffer);
  28.    SetIndexBuffer(2,ExtMovBuffer);
  29. //--- indicator line
  30.    SetIndexStyle(0,DRAW_LINE);
  31.    SetIndexBuffer(0,ExtCCIBuffer);
  32. //--- check for input parameter
  33.    if(InpCCIPeriod<=1)
  34.      {
  35.       Print("Wrong input parameter CCI Period=",InpCCIPeriod);
  36.       return(INIT_FAILED);
  37.      }
  38. //---
  39.    SetIndexDrawBegin(0,InpCCIPeriod);
  40. //--- name for DataWindow and indicator subwindow label
  41.    short_name="CCI("+IntegerToString(InpCCIPeriod)+")";
  42.    IndicatorShortName(short_name);
  43.    SetIndexLabel(0,short_name);
  44. //--- initialization done
  45.    return(INIT_SUCCEEDED);
  46.   }
  47. //+------------------------------------------------------------------+
  48. //| Commodity Channel Index                                          |
  49. //+------------------------------------------------------------------+
  50. int OnCalculate(const int rates_total,
  51.                 const int prev_calculated,
  52.                 const datetime &time[],
  53.                 const double &open[],
  54.                 const double &high[],
  55.                 const double &low[],
  56.                 const double &close[],
  57.                 const long &tick_volume[],
  58.                 const long &volume[],
  59.                 const int &spread[])
  60.   {
  61.    int    i,k,pos;
  62.    double dSum,dMul;
  63. //---
  64.    if(rates_total<=InpCCIPeriod || InpCCIPeriod<=1)
  65.       return(0);
  66. //--- counting from 0 to rates_total
  67.    ArraySetAsSeries(ExtCCIBuffer,false);
  68.    ArraySetAsSeries(ExtPriceBuffer,false);
  69.    ArraySetAsSeries(ExtMovBuffer,false);
  70.    ArraySetAsSeries(high,false);
  71.    ArraySetAsSeries(low,false);
  72.    ArraySetAsSeries(close,false);
  73. //--- initial zero
  74.    if(prev_calculated<1)
  75.      {
  76.       for(i=0; i<InpCCIPeriod; i++)
  77.         {
  78.          ExtCCIBuffer[i]=0.0;
  79.          ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
  80.          ExtMovBuffer[i]=0.0;
  81.         }
  82.      }
  83. //--- calculate position
  84.    pos=prev_calculated-1;
  85.    if(pos<InpCCIPeriod)
  86.       pos=InpCCIPeriod;
  87. //--- typical price and its moving average
  88.    for(i=pos; i<rates_total; i++)
  89.      {
  90.       ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
  91.       ExtMovBuffer[i]=SimpleMA(i,InpCCIPeriod,ExtPriceBuffer);
  92.      }
  93. //--- standard deviations and cci counting
  94.    dMul=0.015/InpCCIPeriod;
  95.    pos=InpCCIPeriod-1;
  96.    if(pos<prev_calculated-1)
  97.       pos=prev_calculated-2;
  98.    i=pos;
  99.    while(i<rates_total)
  100.      {
  101.       dSum=0.0;
  102.       k=i+1-InpCCIPeriod;
  103.       while(k<=i)
  104.         {
  105.          dSum+=MathAbs(ExtPriceBuffer[k]-ExtMovBuffer[i]);
  106.          k++;
  107.         }
  108.       dSum*=dMul;
  109.       if(dSum==0.0)
  110.          ExtCCIBuffer[i]=0.0;
  111.       else
  112.          ExtCCIBuffer[i]=(ExtPriceBuffer[i]-ExtMovBuffer[i])/dSum;
  113.       i++;
  114.      }
  115. //---
  116.    return(rates_total);
  117.   }
  118. //+------------------------------------------------------------------+
复制代码



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

使用道具 举报

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

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|路路发智能交易研发中心

GMT+8, 2024-12-22 11:16 , Processed in 0.148339 second(s), 25 queries .

© 2009-2022 520EA.com EA668.com

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