fractalsnoredraw

Author: Tapochun
0 Views
0 Downloads
0 Favorites
fractalsnoredraw
//+------------------------------------------------------------------+
//|                                             FractalsNoRedraw.mq5 |
//|                                                         Tapochun |
//|                         https://login.mql5.com/ru/users/tapochun |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property copyright "Tapochun"
#property link      "https://login.mql5.com/ru/users/tapochun"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//---
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrWhite
#property indicator_label1  "Fractal_nr Up"
#property indicator_width1  1
//---
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrWhite
#property indicator_label2  "Fractal_nr Dn"
#property indicator_width2  1
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum ENUM_FRACTAL      // Ïåðå÷èñëåíèå - òèïû ôðàêòàëîâ
  {
   UP, // Ôðàêòàë ââåðõ
   DN  // Ôðàêòàë âíèç
  };
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);   // Òî÷íîñòü îòîáðàæåíèÿ èíäèêàòîðà
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,-10);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,10);
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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<5) return(0);         // Âîçâðàùàåì 0 (áóäåò çàïèñàíî â prev_calculated íà ñëåä. òèêå)
//---
   if(prev_calculated<=0) // Åñëè ïåðâûé çàïóñê					
     {                    // Ðèñóåì ïðåäûäóùèå ôðàêòàëû
      //--- Óñòàíàâëèâàåì ïóñòûå çíà÷åíèÿ âñåõ ýëåìåíòîâ ìàññèâîâ
      ArrayInitialize( ExtUpperBuffer, EMPTY_VALUE );   // Öåíû ôðàêòàëîâ ââåðõ
      ArrayInitialize( ExtLowerBuffer, EMPTY_VALUE );   // Öåíû ôðàêòàëîâ âíèç
      //---
      for(int i=2; i<rates_total-3; i++) // Öèêë ïî ïðîñ÷èòàííûì ñâå÷àì
        {
         CheckFractal(UP,i,ExtUpperBuffer,high);        // Ïðîâåðÿåì ôðàêòàë ââåðõ
         CheckFractal(DN,i,ExtLowerBuffer,low);         // Ïðîâåðÿåì ôðàêòàë âíèç
        }
      return( rates_total );
     }
   else                               // Åñëè íå ïåðâûé çàïóñê
     {
      if(rates_total>prev_calculated) // Åñëè îáðàçîâàëñÿ íîâûé áàð
        {
         //--- Î÷èùàåì çíà÷åíèÿ ôðàêòàëîâ íà òåêóùåì áàðå
         ExtUpperBuffer[ rates_total-1 ] = EMPTY_VALUE;
         ExtLowerBuffer[ rates_total-1 ] = EMPTY_VALUE;
         //--- Ïðîâåðÿåì, îáðàçîâàëñÿ ëè íîâûé ôðàêòàë íà áàðå rates_total-4 (òðåòèé ñôîðìèðîâàííûé ñ êîíöà)
         CheckFractal(UP,rates_total-4,ExtUpperBuffer,high);   // Ïðîâåðÿåì ôðàêòàë ââåðõ
         CheckFractal(DN,rates_total-4,ExtLowerBuffer,low);    // Ïðîâåðÿåì ôðàêòàë âíèç
        }
      return( rates_total );
     }
//---
   return(rates_total); // Âîçâðàùàåì êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ íà òåêóùåì òèêå
  }
//+------------------------------------------------------------------+
//| Ïðîâåðÿåì íàëè÷èå ôðàêòàëà íà i ñâå÷å òèïà type                  |
//+------------------------------------------------------------------+
void CheckFractal(const ENUM_FRACTAL type, // Òèï ôðàêòàëà, êîòîðûé èùåì
                  const int i,             // Íîìåð ñâå÷è íà êîòîðîé èùåì
                  double &buffer[],        // Áóôåð çíà÷åíèé ôðàêòàëîâ (out)
                  const double &price[])   // Ñîîòâåòñòâóþùèå öåíû
  {
//--- Êîðîòêèå èìåíà (äëÿ óäîáñòâà)
   double p=price[i];                  // Öåíà ïðîâåðÿåìîãî ýêñòðåìóìà (rates_total-4)
   double pf_1 = price[ i+1 ];         // Öåíà ïîñëåäóþùåãî ïåðâîãî
   double pf_2 = price[ i+2 ];         // Öåíà ïîñëåäóþùåãî âòîðîãî (ïåðâîãî ñôîðìèðîâàííîãî/rates_total-2)
   double pp_1 = price[ i-1 ];         // Öåíà ïðåäûäóùåãî ïåðâîãî
   double pp_2 = price[ i-2 ];         // Öåíà ïðåäûäóùåãî âòîðîãî (rates_total-6)
//---
   if(type==UP) // Ïðîâåðÿåì ôðàêòàë ââåðõ	
     {
      if(p>pf_1 && p>pf_2 && p>=pp_1 && p>=pp_2)
         ExtUpperBuffer[i]=price[i];   // Çàïîìèíàåì çíà÷åíèå ôðàêòàëà ââåðõ
      //---
      return;
     }
//---
   if(type==DN) // Ïðîâåðÿåì ôðàêòàë âíèç
     {
      if(p<pf_1 && p<pf_2 && p<=pp_1 && p<=pp_2)
         ExtLowerBuffer[i]=price[i];   // Çàïîìèíàåì çíà÷åíèå ôðàêòàëà âíèç
      //---
      return;
     }
//--- Åñëè ïåðåäàí íåèçâåñòíûé òèï ôðàêòàëà
   Print(__FUNCTION__,": ÎØÈÁÊÀ! Ïåðåäàí íåèçâåñòíûé òèï ôðàêòàëà: "+EnumToString(type));
   return;
  }
//+------------------------------------------------------------------+

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 ---