Indicators Used
0
Views
0
Downloads
0
Favorites
reversalnavi
//+------------------------------------------------------------------+
//| ReversalNavi.mq5 |
//| Copyright © 2015, fxborg |
//| http://blog.livedoor.jp/fxborg/ |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2015, fxborg"
//---- àâòîðñòâî èíäèêàòîðà
#property link "http://blog.livedoor.jp/fxborg/"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî âîñåìü áóôåðîâ
#property indicator_buffers 8
//---- èñïîëüçîâàíî øåñòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots 6
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà 1 |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí Red öâåò
#property indicator_color1 clrRed
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "Sell Reversal Bar Mark"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà 1 |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "Buy Reversal Bar Mark"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà 2 |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí Red öâåò
#property indicator_color3 clrRed
//--- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 4
#property indicator_width3 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label3 "Sell Reversal Bar"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà 2 |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 4 â âèäå ñèìâîëà
#property indicator_type4 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color4 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 4
#property indicator_width4 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label4 "Buy Reversal Bar"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà 3 |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type5 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí Red öâåò
#property indicator_color5 clrRed
//---- ëèíèÿ èíäèêàòîðà - ñïëîøíàÿ ëèíèÿ
#property indicator_style5 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width5 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label5 "Sell Reversal Bar Line"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà 3 |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type6 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color6 clrDodgerBlue
//---- ëèíèÿ èíäèêàòîðà - ñïëîøíàÿ ëèíèÿ
#property indicator_style6 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width6 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label6 "Buy Reversal Bar Line"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int InpHiLoPeriod=8; // High Low Period
input int InpStanbyBars=8; // Stanby Bars
int CalcBarCount=4; // Calc Bar Count
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtTopBuffer[];
double ExtBtmBuffer[];
double ExtSellStandbyBuffer[];
double ExtBuyStandbyBuffer[];
double ExtSellLineBuffer[];
double ExtBuyLineBuffer[];
//---- for calc
double ExtHighesBuffer[];
double ExtLowesBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=10;
min_rates_total=int(MathMax(InpHiLoPeriod+InpStanbyBars+CalcBarCount,ATR_Period));
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,ExtTopBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,218);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,ExtBtmBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,217);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,ExtSellStandbyBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 3
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(2,PLOT_ARROW,159);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(3,ExtBuyStandbyBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 4
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_ARROW,159);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 4 ïî ãîðèçîíòàëè
PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(4,ExtSellLineBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 5
PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(4,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(5,ExtBuyLineBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 6
PlotIndexSetInteger(5,PLOT_DRAW_BEGIN,min_rates_total);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(5,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(6,ExtHighesBuffer,INDICATOR_CALCULATIONS);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(7,ExtLowesBuffer,INDICATOR_CALCULATIONS);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"ReversalNavi(",InpHiLoPeriod,", ",InpStanbyBars,", ",Shift,")");
//---- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//---- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//----
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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(BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int first,bar;
double dmin,dmax,entry_point,range_lo,range_hi,ATR[1];
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
first=min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
}
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//----
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
//--- calculate range spread
dmin=1000000.0;
dmax=-1000000.0;
for(int iii=bar-int(InpHiLoPeriod)+1; iii<=bar; iii++)
{
if(dmin>low[iii]) dmin=low[iii];
if(dmax<high[iii]) dmax=high[iii];
}
ExtLowesBuffer[bar]=dmin;
ExtHighesBuffer[bar]=dmax;
ExtBuyStandbyBuffer[bar]=NULL;
ExtSellStandbyBuffer[bar]=NULL;
ExtBuyLineBuffer[bar]=NULL;
ExtSellLineBuffer[bar]=NULL;
ExtTopBuffer[bar]=NULL;
ExtBtmBuffer[bar]=NULL;
}
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
//--- buy
int btm_pos=bar-1;
for(int iii=bar-1; iii>1; iii--)
{
if(ExtLowesBuffer[iii-2]>ExtLowesBuffer[iii-1] && ExtLowesBuffer[iii-1]==ExtLowesBuffer[iii])
{
btm_pos=iii-1;
break;
}
}
int setup=NULL;
for(int iii=btm_pos; iii<=bar-1; iii++)
{
if(ExtBuyStandbyBuffer[iii])
{
setup=iii;
break;
}
}
//--- entry line
entry_point=NULL;
range_lo=1000000.0;
range_hi=-1000000.0;
if(!setup || bar-setup<=int(InpStanbyBars))
{
for(int iii=btm_pos; iii<=bar-1; iii++)
{
if(range_hi<high[iii])range_hi=high[iii];
if(range_lo>low[iii])range_lo=low[iii];
}
//---
entry_point=(range_hi+range_lo)/2;
ExtBuyLineBuffer[bar]=entry_point;
}
//---
if(MathMin(low[bar-4],MathMin(low[bar-3],low[bar-2]))<low[bar-1])
{
if(!setup)
{
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[btm_pos],1,ATR)<=0) return(RESET);
ExtBtmBuffer[btm_pos]=low[btm_pos]-MathMax(ATR[0]*3/8,5*_Point);
ExtBuyStandbyBuffer[bar]=entry_point;
}
//else ExtBtmBuffer[btm_pos]=NULL;
}
//--- sell
int top_pos=bar-1;
for(int iii=bar-1; iii>1; iii--)
{
if(ExtHighesBuffer[iii-2]<ExtHighesBuffer[iii-1] && ExtHighesBuffer[iii-1]==ExtHighesBuffer[iii])
{
top_pos=iii-1;
break;
}
}
setup=NULL;
for(int iii=top_pos; iii<=bar-1; iii++)
{
if(ExtSellStandbyBuffer[iii])
{
setup=iii;
break;
}
}
//----
entry_point=NULL;
range_lo=1000000.0;
range_hi=-1000000.0;
//----
if(!setup || (bar-setup)<=int(InpStanbyBars))
{
//---
for(int iii=top_pos; iii<=bar-1; iii++)
{
if(range_hi<high[iii]) range_hi=high[iii];
if(range_lo>low[iii]) range_lo=low[iii];
}
entry_point=(range_hi+range_lo)/2;
ExtSellLineBuffer[bar]=entry_point;
}
if(MathMax(high[bar-4],MathMax(high[bar-3],high[bar-2]))>high[bar-1])
{
if(!setup)
{
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[top_pos],1,ATR)<=0) return(RESET);
ExtTopBuffer[top_pos]=high[top_pos]+MathMax(ATR[0]*3/8,5*_Point);
ExtSellStandbyBuffer[bar]=entry_point;
}
// else ExtTopBuffer[top_pos]=NULL;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
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
---