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

精品伍迪CCI指标 CCI_Woodies_Lnx_v3_1.mq4

CCI_Woodies_Lnx_v3_1指标是CCI的一种优化。用法可以参考伍迪CCI交易模型。

图表:CCI_Woodies_Lnx_v3_1指标

源码:

//+------------------------------------------------------------------+
//|                                         CCI_Woodies_Lnx_v3_1.mq4 |
//|                Based on the code of Jason Robinson (jnrtrading). |
//+------------------------------------------------------------------+
#property copyright "Under The GNU General Public License"
#property link      "http://www.125808047.com/"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 Blue   
#property indicator_color2 Red  
#property indicator_color3 Gray
#property indicator_color4 Gold
#property indicator_color5 Black 
#property indicator_color6 Tomato  
#property indicator_color7 Lime 
#property indicator_color8 Red

#property indicator_level1 300
#property indicator_level2 200
#property indicator_level3 100
#property indicator_level4 -100
#property indicator_level5 -200
#property indicator_level6 -300

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 1
#property indicator_width7 2
#property indicator_width8 2

#property indicator_levelcolor Silver
#property indicator_levelstyle STYLE_DOT
#property indicator_levelwidth 1

extern int TrendCCI_Period = 14;
extern int EntryCCI_Period = 6;
extern int LSMAPeriod = 25;     
extern int EMAPeriod  = 34; 
extern int Trend_period = 5; 
extern string  text1 = "-----------------------";
extern string  text2 = "Mode 1 Shows LSMA hide EMA";
extern string  text3 = "Mode 2 Shows EMA hide LSMA";
extern int  MODE=1;
extern string  text4 = "-----------------------";
extern bool  ZeroLineCross_Alert=false;
extern int  CountBars=500;

double TrendCCI[];
double EntryCCI[];
double CCITrendUp[];
double CCITrendDown[];
double CCINoTrend[];
double CCITimeBar[];
double ZeroLine[];
double LSMABuffer1[];
double LSMABuffer2[];
int FromZero   = 0;     
double LineHighEMA[];
double LineLowEMA[];
int trendUp, trendDown;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   SetIndexStyle(4, DRAW_LINE);
   SetIndexBuffer(4, TrendCCI);
   SetIndexLabel(4, "TrendCCI");
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexBuffer(0, CCITrendUp);
   SetIndexLabel (0, NULL);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexBuffer(1, CCITrendDown);
   SetIndexLabel (1, NULL);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexBuffer(2, CCINoTrend);
   SetIndexLabel (2, NULL);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexBuffer(3, CCITimeBar);
   SetIndexLabel (3, NULL);
   SetIndexStyle(5, DRAW_LINE);// 
   SetIndexBuffer(5, EntryCCI);
   SetIndexLabel(5, "EntryCCI");
   SetIndexStyle(6, DRAW_LINE);
   SetIndexBuffer(6, LSMABuffer2);
   SetIndexLabel (6, NULL);
   SetIndexArrow(6,159);
   SetIndexStyle(7, DRAW_LINE);
   SetIndexBuffer(7, LSMABuffer1); 
   SetIndexArrow(7,159);
   SetIndexLabel (7, NULL);
   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 limit, i, trendCCI, entryCCI;
   int counted_bars=IndicatorCounted();
   static datetime prevtime=0;

   if(counted_bars < 0) return(-1);

   if(counted_bars > 0) counted_bars--;

   limit=Bars;

   SetIndexDrawBegin(0,Bars-CountBars);
   SetIndexDrawBegin(1,Bars-CountBars);
   SetIndexDrawBegin(2,Bars-CountBars);
   SetIndexDrawBegin(3,Bars-CountBars);
   SetIndexDrawBegin(4,Bars-CountBars);
   SetIndexDrawBegin(5,Bars-CountBars);
   SetIndexDrawBegin(6,Bars-CountBars);
   SetIndexDrawBegin(7,Bars-CountBars);

   trendCCI=TrendCCI_Period;
   entryCCI=EntryCCI_Period;

   IndicatorShortName("[CCI: " + trendCCI + "] [TCCI: " + entryCCI + "] [per LSMA: " + LSMAPeriod + "] [Trend: " + Trend_period + "] Values CCI|TCCI:");
     for(i=limit; i>=0; i--) 
     {
      CCINoTrend[i]=0;
      CCITrendDown[i]=0;
      CCITimeBar[i]=0;
      CCITrendUp[i]=0;
      ZeroLine[i]=0;
      TrendCCI[i]=iCCI(NULL, 0, trendCCI, PRICE_TYPICAL, i);
      EntryCCI[i]=iCCI(NULL, 0, entryCCI, PRICE_TYPICAL, i);

        if(TrendCCI[i] > 0 && TrendCCI[i+1] < 0) 
        {
         if (trendDown >  Trend_period) trendUp=0;
        }
        if (TrendCCI[i] > 0) 
        {
           if (trendUp <  Trend_period)
           {
            CCINoTrend[i]=TrendCCI[i];
            trendUp++;
           }
           if (trendUp== Trend_period) 
           {
            CCITimeBar[i]=TrendCCI[i];
            trendUp++;
           }
           if (trendUp >  Trend_period) 
           {
            CCITrendUp[i]=TrendCCI[i];
           }
        }
        if(TrendCCI[i] < 0 && TrendCCI[i+1] > 0) 
        {
         if (trendUp >  Trend_period) trendDown=0;
        }
        if (TrendCCI[i] < 0) 
        {
           if (trendDown <  Trend_period)
           {
            CCINoTrend[i]=TrendCCI[i];
            trendDown++;
           }
           if (trendDown== Trend_period) 
           {
            CCITimeBar[i]=TrendCCI[i];
            trendDown++;
           }
           if (trendDown >  Trend_period) 
           {
            CCITrendDown[i]=TrendCCI[i];
           }
        }
     }

   double sum, lengthvar, tmp, wt;
   int shift;
   int Draw4HowLong, loopbegin;

   if (counted_bars<0) return(0);
   if (counted_bars>0) counted_bars--;
   counted_bars=Bars - counted_bars;
     for(shift=0; shift<counted_bars; shift++) 
     {
      LineLowEMA[shift]=-FromZero;
      LineHighEMA[shift]=-FromZero;

      double EmaValue=iMA(NULL, 0, EMAPeriod, 0, MODE_EMA, PRICE_TYPICAL, shift);
      if (Close[shift]>EmaValue) LineHighEMA[shift]=EMPTY_VALUE;
      if (Close[shift]<EmaValue) LineLowEMA[shift]=EMPTY_VALUE;
     }
   Draw4HowLong=Bars-LSMAPeriod - 5;
   loopbegin=Draw4HowLong - LSMAPeriod - 1;

     for(shift=loopbegin; shift>=0; shift--) 
     {
      sum=0;
        for(i=LSMAPeriod; i>=1; i--) 
        {
         lengthvar=LSMAPeriod + 1;
         lengthvar/=3;
         tmp=0;
         tmp=(i - lengthvar) * Close[LSMAPeriod-i+shift];
         sum+=tmp;
        }
      wt=sum * 6/(LSMAPeriod * (LSMAPeriod + 1));
      LSMABuffer1[shift]=0;
      LSMABuffer2[shift]=0;

      if (wt>Close[shift]) LSMABuffer2[shift]=EMPTY_VALUE;
      if (wt<Close[shift]) LSMABuffer1[shift]=EMPTY_VALUE;
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
打赏
版权所有转载请注明标题及链接:峰汇在线 » 精品伍迪CCI指标 CCI_Woodies_Lnx_v3_1.mq4
上一篇:
下一篇:
分享到: 更多 (0)

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

支付宝扫一扫打赏

微信扫一扫打赏