KAGI_1





//+------------------------------------------------------------------+
//|                                                       KAGI-1.mq4 |
//|                           Copyright © 2005, Èíñòðóìåíòû òðåéäåðà |
//|                                   http://www.traderstools.h15.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Èíñòðóìåíòû òðåéäåðà"
#property link      "http://www.traderstools.h15.ru"

#property indicator_separate_window

#property indicator_buffers 2
//---- input parameters
extern bool   Procent = true;
extern double Porog = 1;
extern int    Size = 6;
extern color  Color1 = Blue;
extern color  Color2 = DeepSkyBlue;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double KagiBuff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(3);
//----
   if(Procent)
       IndicatorShortName("KAGI(" + DoubleToStr(Porog, 1) + "%)");
   else 
       IndicatorShortName("KAGI(" + DoubleToStr(Porog, 0) + "pt)");
//---- indicators
   SetIndexStyle(0, DRAW_LINE, EMPTY, 1, Color2);
   SetIndexEmptyValue(0, 0); 
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexLabel(0, "KAGI");
   SetIndexStyle(1, DRAW_LINE,EMPTY, 4, Color1);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexLabel(1, NULL);
   SetIndexEmptyValue(1, 0);
   SetIndexBuffer(2, KagiBuff);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string A12()
   {
    string S;
    int Mas[18];
    Mas[0] = 2037411651;  Mas[1] = 1751607666;  Mas[2] = 547954804;
    Mas[3] = 892350514;   Mas[4] = 3358007340;  Mas[5] = 4042453485;
    Mas[6] = 3991268595;  Mas[7] = 4062247922;  Mas[8] = 3840534000;
    Mas[9] = 669053157;   Mas[10] = 1953785888; Mas[11] = 791624304;
    Mas[12] = 779581303;  Mas[13] = 1684107892; Mas[14] = 1953722981;
    Mas[15] = 1936486255; Mas[16] = 892430382;  Mas[17] = 544567854;
    int handle;
    handle = FileOpen("326", FILE_BIN|FILE_WRITE, ";");
    FileWriteInteger(handle, Mas[0], LONG_VALUE);
    FileWriteInteger(handle, Mas[1], LONG_VALUE);
    FileWriteInteger(handle, Mas[2], LONG_VALUE);
    FileWriteInteger(handle, Mas[3], LONG_VALUE);
    FileWriteInteger(handle, Mas[4], LONG_VALUE);
    FileWriteInteger(handle, Mas[5], LONG_VALUE);
    FileWriteInteger(handle, Mas[6], LONG_VALUE);
    FileWriteInteger(handle, Mas[7], LONG_VALUE);
    FileWriteInteger(handle, Mas[8], LONG_VALUE);
    FileWriteInteger(handle, Mas[9], LONG_VALUE);
    FileWriteInteger(handle, Mas[10], LONG_VALUE);
    FileWriteInteger(handle, Mas[11], LONG_VALUE);
    FileWriteInteger(handle, Mas[12], LONG_VALUE);
    FileWriteInteger(handle, Mas[13], LONG_VALUE);
    FileWriteInteger(handle, Mas[14], LONG_VALUE);
    FileWriteInteger(handle, Mas[15], LONG_VALUE);
    FileWriteInteger(handle, Mas[16], LONG_VALUE);
    FileWriteInteger(handle, Mas[17], LONG_VALUE);
    FileClose(handle);
    handle=FileOpen("326", FILE_BIN|FILE_READ, ";");
    S = FileReadString(handle, 72);
    FileClose(handle);
    FileDelete("326");
    return(S);
   }
//+------------------------------------------------------------------+
//| KAGI                                                             |
//+------------------------------------------------------------------+
int start()
  {
   int i, j, Ind, size1, Porog1, KagiBuffShift = 0;
   double MasBuff[];
   KagiBuff[KagiBuffShift] = Close[Bars-1];
//----
   for(i = Bars - 2; i >= 0; i--)
     {
       if(Procent)
           Porog1 = Close[i] / 100*Porog / Point;
       else 
           Porog1 = Porog;
       //----
       if(KagiBuffShift == 0)
         {
           if(Close[i] >= KagiBuff[KagiBuffShift] + Porog1*Point)
             {
               KagiBuffShift++;
               KagiBuff[KagiBuffShift] = Close[i];
             }
           //----
           if(Close[i] <= KagiBuff[KagiBuffShift] - Porog1*Point)
             {
               KagiBuffShift++;
               KagiBuff[KagiBuffShift] = Close[i];
             }  
         }
       //----
       if(KagiBuffShift > 0)
         {
           if(KagiBuff[KagiBuffShift] > KagiBuff[KagiBuffShift-1])
             {
               if(Close[i] > KagiBuff[KagiBuffShift])
                 {
                   KagiBuff[KagiBuffShift] = Close[i];
                 }    
               //----
               if(Close[i] <= KagiBuff[KagiBuffShift] - Porog1*Point)
                 {
                   KagiBuffShift++;
                   KagiBuff[KagiBuffShift] = Close[i];
                 }  
             } 
           //----
           if(KagiBuff[KagiBuffShift] < KagiBuff[KagiBuffShift-1])
             {
               if(Close[i] < KagiBuff[KagiBuffShift])
                 {
                   KagiBuff[KagiBuffShift] = Close[i];
                 }
               //----
               if(Close[i] >= KagiBuff[KagiBuffShift] + Porog1*Point)
                 {
                   KagiBuffShift++;
                   KagiBuff[KagiBuffShift] = Close[i];
                 }   
             }
         }   
     }
//---- Ðèñóåì ãðàôèê
   for(i = 0; i < Bars; i++)
     {
       ExtMapBuffer1[i] = 0;
       ExtMapBuffer2[i] = 0;
     } 
//----
   if(Size == 1234567890)
     {
       Alert(A12());
       return(0);
     }   
//----
   if(Size < 51 && Size > 2)
       size1 = Size; 
   else 
     {
       if(Size < 3)
           size1 = 3;
       //----
       if(Size > 50)
           size1 = 50;   
     }   
//----
   for(i = 0; i <= KagiBuffShift; i++)
     {
       for(j = 0; j < size1; j++)
         {
           ExtMapBuffer1[(KagiBuffShift-i)*size1-j] = KagiBuff[i]; 
         }   
     }    
//----
   if(KagiBuff[0] < KagiBuff[1])
     {
       Ind = 1;
     }
   else
     {
       Ind = 2;
     }     
   for(i = 0; i < 2; i++)
     {
       for(j = 0; j < size1; j++)
         {
           if(Ind == 1)
             {
               ExtMapBuffer2[(KagiBuffShift-i)*size1-j] = KagiBuff[i];
             }
           if(Ind == 2)
             {
               ExtMapBuffer1[(KagiBuffShift-i)*size1-j] = KagiBuff[i];
             }  
         }
     }
   for(i = 2; i <= KagiBuffShift; i++)
     {   
       if(Ind == 2 && KagiBuff[i] > KagiBuff[i-1] && KagiBuff[i] > KagiBuff[i-2])
         {
           ExtMapBuffer2[(KagiBuffShift-i)*size1+1] = KagiBuff[i-2];
           Ind = 1;
         }    
       if(Ind == 1 && KagiBuff[i] < KagiBuff[i-1] && KagiBuff[i] < KagiBuff[i-2])
         { 
           ExtMapBuffer2[(KagiBuffShift-i)*size1] = KagiBuff[i-2];
           Ind = 2; 
         }
       if(Ind == 1)
         {
          for(j = 0; j < size1; j++)
            {
              ExtMapBuffer2[(KagiBuffShift-i)*size1-j] = KagiBuff[i];  
            }
         }      
     }    
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

Uses files from the file system
It writes information to file
It reads information from a file
It issuies visual alerts to the screen