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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---