Author: Copyright � 2005, ����������� ��������
0 Views
0 Downloads
0 Favorites
kagi-1
//+------------------------------------------------------------------+
//|                                                       KAGI-1.mq5 |
//|                           Copyright © 2005, Èíñòðóìåíòû òðåéäåðà |
//|                                   http://www.traderstools.h15.ru |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2005, Èíñòðóìåíòû òðåéäåðà"
//---- ññûëêà íà ñàéò àâòîðà
#property link      "http://www.traderstools.h15.ru" 
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 3
#property indicator_buffers 3 
//---- èñïîëüçîâàíî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà    |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ìíîãîöâåòíîé ëèíèè
#property indicator_type1   DRAW_COLOR_LINE
//---- â êà÷åñòâå öâåòîâ òðåõöâåòíîé ëèíèè èñïîëüçîâàíû
#property indicator_color1  clrMagenta,clrTeal
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1  STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "KAGI-1"
//+-----------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà      |
//+-----------------------------------+
input bool Percent=true;
input uint Threshold=1;
input uint Size=12;
//+-----------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double KagiBuffer[];
double IndBuffer[];
double ColorIndBuffer[];
//----
double dThreshold;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+    
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+  
void OnInit()
  {
//---- èíèöèàëèçàöèÿ êîíñòàíò
   min_rates_total=2;
   dThreshold=Threshold/_Point;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(IndBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(1,ColorIndBuffer,INDICATOR_COLOR_INDEX);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(ColorIndBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(2,KagiBuffer,INDICATOR_CALCULATIONS);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(KagiBuffer,true);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname="KAGI-1";
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
  }
//+------------------------------------------------------------------+  
//| 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[])
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(rates_total<min_rates_total) return(0);
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé  
   double;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ
   int i,j,Ind,size1,Threshold1,KagiBuffShift=0;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(close,true);
//----
   KagiBuffer[KagiBuffShift]=close[rates_total-1];
//----
   for(int bar=rates_total-2; bar>=0; bar--)
     {
      if(Percent) Threshold1=int(close[bar]/100*dThreshold);
      else Threshold1=int(Threshold);
      //----
      if(!KagiBuffShift)
        {
         if(close[bar]>=KagiBuffer[KagiBuffShift]+Threshold1*_Point)
           {
            KagiBuffShift++;
            KagiBuffer[KagiBuffShift]=close[bar];
           }
         //----
         if(close[bar]<=KagiBuffer[KagiBuffShift]-Threshold1*_Point)
           {
            KagiBuffShift++;
            KagiBuffer[KagiBuffShift]=close[bar];
           }
        }
      //----
      if(KagiBuffShift>0)
        {
         if(KagiBuffer[KagiBuffShift]>KagiBuffer[KagiBuffShift-1])
           {
            if(close[bar]>KagiBuffer[KagiBuffShift]) KagiBuffer[KagiBuffShift]=close[bar];
            //----
            if(close[bar]<=KagiBuffer[KagiBuffShift]-Threshold1*_Point)
              {
               KagiBuffShift++;
               KagiBuffer[KagiBuffShift]=close[bar];
              }
           }
         //----
         if(KagiBuffer[KagiBuffShift]<KagiBuffer[KagiBuffShift-1])
           {
            if(close[bar]<KagiBuffer[KagiBuffShift]) KagiBuffer[KagiBuffShift]=close[bar];
            //----
            if(close[bar]>=KagiBuffer[KagiBuffShift]+Threshold1*_Point)
              {
               KagiBuffShift++;
               KagiBuffer[KagiBuffShift]=close[bar];
              }
           }
        }
     }
//---- 
   size1=int(MathMin(MathMax(3,Size),50));
//----
   for(i=rates_total-1; i>=0; i--) IndBuffer[i]=0.0;
//----
   for(i=0; i<=KagiBuffShift; i++)
      for(j=0; j<size1; j++)
        {
         int barX=MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1);
         IndBuffer[barX]=KagiBuffer[i];
         ColorIndBuffer[barX]=0;
        }
//----    
   if(KagiBuffer[0]<KagiBuffer[1]) Ind=1;
   else Ind=2;
//----    
   for(i=0; i<2; i++) for(j=0; j<size1; j++)
      if(Ind==1 || Ind==2) ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1)]=1;
//----
   for(i=2; i<=KagiBuffShift; i++)
     {
      if(Ind==2 && KagiBuffer[i]>KagiBuffer[i-1] && KagiBuffer[i]>KagiBuffer[i-2])
        {
         ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1+1,0),rates_total-1)]=1;
         Ind=1;
        }
      //----
      if(Ind==1 && KagiBuffer[i]<KagiBuffer[i-1] && KagiBuffer[i]<KagiBuffer[i-2])
        {
         ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1,0),rates_total-1)]=1;
         Ind=2;
        }
      //----
      if(Ind==1) for(j=0; j<size1; j++) ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1)]=1;
     }
//----    
   return(rates_total);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---