Navigation:Home > Content >

ICS.mq4

Time: 2015-07-20 | Download file:ICS.mq4

//+------------+-----------------------------------------------------+
//| v.16.08.08 |                            ImposingCandleSticks.mq4 |
//|            |              Bookkeeper, 2008, yuzefovich@gmail.com |
//+------------+-----------------------------------------------------+
// imposing - некоторые варианты перевода с английского:
// требующий, предписывающий, вальяжный, импозантный, жульнический,..
// буквально каждый сможет выбрать свое.
/*-------------------------------------------------------------------+
   
   НЕ МЕРКАНТИЛЬНОЕ, НО ОЧЕНЬ ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ :)
   
   Если Вы получили данный код, будем считать, что Вы принимаете на
   себя нижеследующее:
   1. Вы можете:
   1.1. Использовать данный код в целом или по частям для Вашей
   торговли на Forex (если у Вас это получится).
   1.2. Модифицировать любую часть данного кода или использовать
   любую часть данного кода в Ваших индикаторах и советниках (указать
   ссылку на источник желательно) для Вашей торговли на Forex (если
   у Вас это получится).
   1.3. Передать (только на безвозмездной основе) данный код в целом
   или по частям любому третьему лицу, предварительно получив его
   согласие на данное лицензионное соглашение.
   2. Вы не можете:
   2.1. Использовать данный код в целом или по частям с целью
   извлечения другой выгоды, кроме выгоды, указанной в пунктах 1.1
   и 1.2.
   2.2. Публиковать (в том числе и в виде архива или ex4-файла)
   данный код в целом или по частям (в том числе и в интернете).
   
   ПСы :) И самое главное! Не надо вопросами мылить мне собачку!
   я не гуру и не лекарь - учить не умею, лечить стесняюсь.
   Но любые дополнения по исправлению и улучшению кода приму с
   благодарностью, ибо я ни программистом, ни трейдером не являюсь.

                                                        Bookkeeper

  +-----------------------------------------------------------------*/
#property copyright ""
#property link      ""
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1  Blue
#property indicator_color2  Blue
#property indicator_color3  Red
#property indicator_color4  Green
#property indicator_color5  Navy
#property indicator_color6  Blue
#property indicator_color7  Blue
#property indicator_color8  Blue
//----
extern int SnakeRange =2;        // Максимум =5 ! или бывает не хорошо
//----                                      
double SnakeHigh[];
double SnakeLow[];
double SnakeOpen[];
double SnakeClose[];
double Navel[];
double SnakeHL[];
double SnakeCHL[];
double SnakeC2HL[];
//----
                                  // 0 - Close
                                  // 1 - Open
                                  // 2 - High
                                  // 3 - Low
//----
double SnakeHead[6]={0,0,0,0,0,0};
//---------------------------------------------------------------------
double Price(int CALC_MODE, int Shift)
{
   switch(CALC_MODE)
   {
     case  0:
      return(Close[Shift]);
     case  1:
      return(Open[Shift]);
     case  2:
      return(High[Shift]);
     case  3:
      return(Low[Shift]);
     default:
      return(Close[Shift]);
   }
}
//---------------------------------------------------------------------
double CalcSnakeTail(int CALC_MODE, int Pos)
{  
   int Shift=Pos+SnakeRange;
   double SnakeSum=0.0;
   int SnakeWeight=0;
   for(int i=0;i=0;Shift--)
         {
            i++;
            SnakeSum=SnakeSum+i*Price(CALC_MODE,Shift);
            SnakeWeight=SnakeWeight+i;
         }
         SnakeHead[0]=SnakeSum/SnakeWeight;
         break; 
   }
   for(Shift=SnakeRange;Shift>0;Shift--)
   {
      SnakeSum=0.0;
      SnakeWeight=0;
      i=0;
      int w=Shift+SnakeRange;
      int ww=Shift-SnakeRange;
      if(ww<0) ww=0;
      while(w>=Shift)
      {
         i++;
         SnakeSum=SnakeSum+i*Price(CALC_MODE,w);
         SnakeWeight=SnakeWeight+i;
         w--;
      }
      while(w>=ww)
      {
         i--;
         SnakeSum=SnakeSum+i*Price(CALC_MODE,w);
         SnakeWeight=SnakeWeight+i;
         w--;
      }
      SnakeHead[Shift]=SnakeSum/SnakeWeight;
   }
   return;
}
//---------------------------------------------------------------------
void deinit()
{
  return;
}
//---------------------------------------------------------------------
int init()
{
   IndicatorBuffers  (8);
   SetIndexBuffer    (0,SnakeHigh);
   SetIndexBuffer    (1,SnakeLow);
   SetIndexBuffer    (2,SnakeOpen);
   SetIndexBuffer    (3,SnakeClose);
   SetIndexBuffer    (4,Navel);
   SetIndexBuffer    (5,SnakeHL);
   SetIndexBuffer    (6,SnakeCHL);
   SetIndexBuffer    (7,SnakeC2HL);
   SetIndexStyle     (0,DRAW_HISTOGRAM);
   SetIndexStyle     (1,DRAW_HISTOGRAM);
   SetIndexStyle     (2,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexStyle     (3,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexStyle     (4,DRAW_NONE);//LINE,EMPTY,2);
   SetIndexStyle     (5,DRAW_NONE);//LINE,EMPTY,2);
   SetIndexStyle     (6,DRAW_NONE);//LINE,EMPTY,2);
   SetIndexStyle     (7,DRAW_NONE);//LINE,EMPTY,2);
   return(0);
}
//---------------------------------------------------------------------
int start()
{
   for(int i=0;i<6;i++) SnakeHead[i]=0;
   int counted_bars=IndicatorCounted();
   if(Bars<=(SnakeRange+2)) return(-1);
   if(SnakeRange<1) SnakeRange=1;
   if(counted_bars<0)  return(-1);
   if(counted_bars>0)  counted_bars--;
   int limit=Bars-counted_bars;
   if(limit>Bars-(SnakeRange+2)) limit=Bars-(SnakeRange+2);
   if(limit<=SnakeRange) limit=SnakeRange+1;
   for(i=limit;i>=SnakeRange;i--)
   {
      SnakeHigh[i]=CalcSnakeTail(2,i);
      SnakeLow[i]=CalcSnakeTail(3,i);
      SnakeClose[i]=CalcSnakeTail(0,i);
      SnakeOpen[i]=CalcSnakeTail(1,i);
      Navel[i]=(SnakeClose[i]*5+
                SnakeOpen[i]*2+
                SnakeHigh[i]+
                SnakeLow[i])/9;
      SnakeHL[i]=(SnakeHigh[i]+
                  SnakeLow[i])/2;
      SnakeCHL[i]=(SnakeClose[i]+
                   SnakeHigh[i]+
                   SnakeLow[i])/3;
      SnakeCHL[i]=(SnakeClose[i]*2+
                   SnakeHigh[i]+
                   SnakeLow[i])/4;
   }
   CalcSnakeHead(2);
   for(i=SnakeRange;i>=0;i--) SnakeHigh[i]=SnakeHead[i];
   CalcSnakeHead(3);
   for(i=SnakeRange;i>=0;i--) SnakeLow[i]=SnakeHead[i];
   CalcSnakeHead(0);
   for(i=SnakeRange;i>=0;i--) SnakeClose[i]=SnakeHead[i];
   CalcSnakeHead(1);
   for(i=SnakeRange;i>=0;i--) SnakeOpen[i]=SnakeHead[i];
   for(i=SnakeRange;i>=0;i--)
   {
      Navel[i]=(SnakeClose[i]*5+
                SnakeOpen[i]*2+
                SnakeHigh[i]+
                SnakeLow[i])/9;
      SnakeHL[i]=(SnakeHigh[i]+
                  SnakeLow[i])/2;
      SnakeCHL[i]=(SnakeClose[i]+
                   SnakeHigh[i]+
                   SnakeLow[i])/3;
      SnakeCHL[i]=(SnakeClose[i]*2+
                   SnakeHigh[i]+
                   SnakeLow[i])/4;
   }
   return(0);
}
//---------------------------------------------------------------------

Recommend