Navigation:Home > Content >

IRSI_Channel.mq4

Time: 2010-05-10 | Download file:IRSI_Channel.mq4

//+------------+-----------------------------------------------------+
//| v.16.08.08 |                             ImposingRSI_Channel.mq4 |
//|            |              Bookkeeper, 2008, yuzefovich@gmail.com |
//+------------+-----------------------------------------------------+
//  Необходимо наличие ISC.mq4 v.16.08.08
//  Presence ISC.mq4 v.16.08.08 is necessary 
/*-------------------------------------------------------------------+
   
   НЕ МЕРКАНТИЛЬНОЕ, НО ОЧЕНЬ ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ :)
   
   Если Вы получили данный код, будем считать, что Вы принимаете на
   себя нижеследующее:
   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_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 5
#property indicator_color1  DodgerBlue
#property indicator_color2  Red
#property indicator_color3  ForestGreen
#property indicator_color4  Red
#property indicator_color5  ForestGreen
extern int RSIPeriod=14;
double     IRSIBuffer[];
double     UpUnits[];
double     Up1[];
double     DnUnits[];
double     Dn1[];
double     PosBuffer[];
double     NegBuffer[];
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(7);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2);
   SetIndexStyle(2,DRAW_SECTION,EMPTY,2);
   SetIndexStyle(3,DRAW_ARROW,EMPTY,2);
   SetIndexStyle(4,DRAW_ARROW,EMPTY,2);
   SetIndexBuffer(0,IRSIBuffer);
   SetIndexBuffer(1,UpUnits);
   SetIndexBuffer(2,DnUnits);
   SetIndexBuffer(3,Up1);
   SetIndexBuffer(4,Dn1);
   SetIndexBuffer(5,PosBuffer);
   SetIndexBuffer(6,NegBuffer);
   SetIndexArrow(3,159); 
   SetIndexArrow(4,159); 
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
   SetIndexEmptyValue(3,0.0);
   SetIndexEmptyValue(4,0.0);
   short_name="IRSI_Channel("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,RSIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
{
   int i,counted_bars=IndicatorCounted();
   double rel,negative,positive;
   if(Bars<=RSIPeriod) return(0);
   if(counted_bars<1)
      for(i=1;i<=RSIPeriod;i++) IRSIBuffer[Bars-i]=0.0;
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   i=MathMax(i,5);
   int limit=i;
   while(i>=0)
   {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIPeriod-1)
      {
         int k=Bars-2;
         while(k>=i)
         {
            rel=iCustom(NULL,0,"ICS",1,3,k)-//Close[k]-//
                iCustom(NULL,0,"ICS",1,3,k+1);//Close[k+1];//
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
         }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
      }
      else
      {
         rel=iCustom(NULL,0,"ICS",1,3,i)-//Close[i]-//
             iCustom(NULL,0,"ICS",1,3,i+1);//Close[i+1];//
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
         negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
      }
      PosBuffer[i]=positive;
      NegBuffer[i]=negative;
      if(negative==0.0) IRSIBuffer[i]=0.0;
      else IRSIBuffer[i]=100.0-100.0/(1+positive/negative);
      i--;
   }
//----
   i=limit;
   while(i>0 && IRSIBuffer[i]==IRSIBuffer[i+1]) i--;
   int UpDn;
   if(IRSIBuffer[i]>IRSIBuffer[i+1]) UpDn=1;
   else UpDn=-1;
   while(i>0)
   {
      if(UpDn>0)
      {
         while(IRSIBuffer[i]>=IRSIBuffer[i+1] && i>0)
         {
            UpUnits[i]=0;
            DnUnits[i]=0;
            Up1[i]=0;
            Dn1[i]=0;
            i--;
         }
         if(IRSIBuffer[i]0)
         {
            UpUnits[i+1]=IRSIBuffer[i+1];
            Up1[i+1]=UpUnits[i+1];
         }
         UpDn=-1;
      }
      if(UpDn<0 && i>0)
      {
         while(IRSIBuffer[i]<=IRSIBuffer[i+1] && i>0)
         {
            UpUnits[i]=0;
            DnUnits[i]=0;
            Up1[i]=0;
            Dn1[i]=0;
            i--;
         }
         if(IRSIBuffer[i]>IRSIBuffer[i+1])// && i>0)
         {
            DnUnits[i+1]=IRSIBuffer[i+1];
            Dn1[i+1]=DnUnits[i+1];
         }
         UpDn=1;
      }
   }
   UpUnits[0]=IRSIBuffer[0];
   DnUnits[0]=IRSIBuffer[0];
   Up1[0]=0;
   Dn1[0]=0;
   Up1[1]=0;
   Dn1[1]=0;
   
   return(0);
}
//+------------------------------------------------------------------+

Recommend