诚信为本
量力而为
当前位置:峰汇在线 > MetaTrader 4 > MT4指标 > 正文

ColouredWoodie.mq4

ColouredWoodie指标属于CCI指标的一种优化。

图表:ColouredWoodie指标

源码:

//+------------------------------------------------------------------+
//|                                               ColouredWoodie.mq4 |
//|                                                            thorr |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.125808047.com"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 DimGray
#property indicator_color4 Red
#property indicator_color5 RoyalBlue
#property indicator_level1 0

extern int       A_period=50;
extern int       B_period=12;
extern int       neutral = 6;
extern int       num_bars=5000;

int i=0;
bool initDone=true;
int bar=0;
int prevbars=0;
int startpar=0;
int cs=0;
int prevcs=0;
string commodt="nonono";
int frame=0;
int bars=0;

int count = 0, thisbar = 0;
double now, prev;
bool flag;

double FastWoodieCCI[];
double SlowWoodieCCI[];
double HistoWoodieCCI[];
double HistoRed[];
double HistoBlue[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
{
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
   SetIndexBuffer(0,FastWoodieCCI);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
   SetIndexBuffer(1,SlowWoodieCCI);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(2,HistoWoodieCCI);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(3,HistoRed);
   SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(4,HistoBlue);
   IndicatorShortName("ColouredWoodiesCCI("+A_period+","+B_period+")");
   Comment("www.125808047.com");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars=IndicatorCounted();

   cs = A_period + B_period + num_bars; 
   if ((cs==prevcs) && (commodt == Symbol()) && 
      (frame == (Time[4] - Time[5])) &&
      ((Bars - prevbars) < 2))
      startpar = Bars - prevbars; 
   else 
      startpar = -1;  
   commodt = Symbol();
   frame= Time[4] - Time[5];
   prevbars = Bars;
   prevcs = cs;

   if (startpar == 1 || startpar == 0)  
      bar = startpar;
   else 
      initDone = true;

   if (initDone) {
      FastWoodieCCI[num_bars-1]=0;
      SlowWoodieCCI[num_bars-1]=0;
      HistoWoodieCCI[num_bars-1]=0;
      HistoBlue[num_bars-1]=0;
      HistoRed[num_bars-1]=0;
      bar=num_bars-2;
      initDone=false;
   }

   for (i = bar; i >= 0; i--) {
      FastWoodieCCI[i]=iCCI(NULL,0,B_period,PRICE_TYPICAL,i);
      SlowWoodieCCI[i]=iCCI(NULL,0,A_period,PRICE_TYPICAL,i);
      
      now = iCCI(NULL,0,A_period,PRICE_TYPICAL,i);

      if ((prev >= 0 && now < 0) || (prev < 0 && now >= 0)) { 
         flag = true;
         count = 0;
      }

      if (flag) { 
         if (thisbar != i)
            count++;
         prev = now;
         HistoWoodieCCI[i] = now;
         if (count >= neutral)
            flag = false;
         thisbar = i;
         continue;
      }
      
      if (now > 0)
      HistoBlue[i] = now;

      if (now < 0)
      HistoRed[i] = now;
      prev = now;
   }
   return(rates_total);
  }
打赏
版权所有转载请注明标题及链接:峰汇在线 » ColouredWoodie.mq4
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏