reversalnavi

Author: Copyright � 2015, fxborg
Indicators Used
Indicator of the average true range
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 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 ---