PA IO detection v2

Author: mason
PA IO detection v2
Indicators Used
Indicator of the average true rangeMoving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
PA IO detection v2
//------------------------------------------------------------------/
// PA IO detection v2.mq4
// 
//------------------------------------------------------------------/
#property copyright "mason" 

#property indicator_chart_window 
#property indicator_buffers 8
#property indicator_color1 Chocolate
#property indicator_color2 Chocolate
#property indicator_color3 OrangeRed
#property indicator_color4 OrangeRed
#property indicator_color5 Chocolate
#property indicator_color6 Chocolate
#property indicator_color7 OrangeRed
#property indicator_color8 OrangeRed

extern bool   ShowIB=false;
extern bool   ShowINB=true;
extern bool   ShowOB=true;
extern bool   ShowStrongOB=true;
extern double PreviousInsideBars=4;
extern double PercentOBClosefromStart=50;
extern double PercentOBClosetoEnd=20;
extern int    backperiod=10;
extern double IBPercentLabel=40;
extern double INBPercentLabel=80;
extern double OBPercentLabel=50;
extern double SOBPercentLabel=100;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int init() 
  {
   SetIndexStyle(0,DRAW_ARROW,0,1);  //Inside Bar Up
   SetIndexArrow(0,241);
   SetIndexBuffer(0,ExtMapBuffer1); 
   SetIndexEmptyValue(0,0.0);
   SetIndexLabel(0,"IB Up");

   SetIndexStyle(1,DRAW_ARROW,0,1);  //Inside Bar Down
   SetIndexArrow(1,242); 
   SetIndexBuffer(1,ExtMapBuffer2); 
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(1,"IB Down");

   SetIndexStyle(2,DRAW_ARROW,0,2); //I4B Up
   SetIndexArrow(2,241); 
   SetIndexBuffer(2,ExtMapBuffer3); 
   SetIndexEmptyValue(2,0.0);
   SetIndexLabel(2,"INB Up");

   SetIndexStyle(3,DRAW_ARROW,0,2); //I4B Down
   SetIndexArrow(3,242); 
   SetIndexBuffer(3,ExtMapBuffer4); 
   SetIndexEmptyValue(3,0.0);
   SetIndexLabel(3,"INB Down");

   SetIndexStyle(4,DRAW_ARROW,0,1); //Outside Bar Up
   SetIndexArrow(4,233); 
   SetIndexBuffer(4,ExtMapBuffer5); 
   SetIndexEmptyValue(4,0.0);
   SetIndexLabel(4,"BUOB Up");

   SetIndexStyle(5,DRAW_ARROW,0,1); //Outside Bar Down
   SetIndexArrow(5,234); 
   SetIndexBuffer(5,ExtMapBuffer6); 
   SetIndexEmptyValue(5,0.0);
   SetIndexLabel(5,"BEOB Down");

   SetIndexStyle(6,DRAW_ARROW,0,2); //Strong Outside Bar Up
   SetIndexArrow(6,233); 
   SetIndexBuffer(6,ExtMapBuffer7); 
   SetIndexEmptyValue(6,0.0);   
   SetIndexLabel(6,"Strong BUOB Up");

   SetIndexStyle(7,DRAW_ARROW,0,2); //Strong Outside Bar Down
   SetIndexArrow(7,234); 
   SetIndexBuffer(7,ExtMapBuffer8); 
   SetIndexEmptyValue(7,0.0);  
   SetIndexLabel(7,"Strong BEOB Down");

   return(0);
  } 

int deinit() {
   }

  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double range,rangecurrent;
   int limit,count,count2,baratr;
   int    counted_bars=IndicatorCounted();
   bool nb,ib,ob,tbh,tbl;
   double buff1[],buff2[];
   
  //---- check for possible errors
   if(counted_bars<0) return(-1);
  //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   if (backperiod==0) limit=Bars-counted_bars; else limit=backperiod;
   
   if (Bars<400) baratr=Bars/2; else baratr=200;

   ArrayResize(buff1,limit+baratr);
   ArrayResize(buff2,baratr);
   
   for(int i2=limit+baratr; i2>=0; i2--) buff1[i2]=iATR(NULL,0,1,i2);
   
  //---- main loop
     for(int i=limit; i>=0; i--)
       {
         range=iMAOnArray(buff1,Bars,baratr,0,0,i);  // for arrow position
         rangecurrent=High[i]-Low[i];
         
         ExtMapBuffer1[i]=0;
         ExtMapBuffer2[i]=0;
         ExtMapBuffer3[i]=0;
         ExtMapBuffer4[i]=0;
         ExtMapBuffer5[i]=0;
         ExtMapBuffer6[i]=0;
         ExtMapBuffer7[i]=0;
         ExtMapBuffer8[i]=0;
         
//       Inside Bar
         if ((ShowIB)||(ShowINB)&&(i!=0))
         if ((High[i]<High[i+1])&&(Low[i]>Low[i+1])) {
            if (ShowIB) {
                ExtMapBuffer1[i] = High[i]+(IBPercentLabel/100*range);
                ExtMapBuffer2[i] = Low[i]-(IBPercentLabel/100*range);
            }

            if (ShowINB) {
                bool rangesmaller=true;
                for (int i3=2;i3<PreviousInsideBars;i3++) {
                    if ((High[i+i3]-Low[i+i3])<(High[i]-Low[i])) {
                        rangesmaller=false;
                        break;
                    }
                }
                if (rangesmaller) {
                   ExtMapBuffer3[i] = High[i]+(INBPercentLabel/100*range);
                   ExtMapBuffer4[i] = Low[i]-(INBPercentLabel/100*range);
                }
            }
         }
         

//       Outside Bar
         if ((ShowOB)||(ShowStrongOB))
         if ((High[i]>High[i+1])&&(Low[i]<Low[i+1])) {
            if (ShowOB) {
               if ((Open[i]<Close[i])&&(Close[i]>PercentOBClosefromStart/100*rangecurrent+Low[i]))  ExtMapBuffer5[i] = High[i]+(OBPercentLabel/100*range);
               if ((Open[i]>Close[i])&&(Close[i]<High[i]-PercentOBClosefromStart/100*rangecurrent)) ExtMapBuffer6[i] = Low[i]-(OBPercentLabel/100*range);
             }
             if (ShowStrongOB) {
                if ((Open[i]<Close[i])&&(Close[i]>High[i+1])&&((High[i]-Close[i])<(PercentOBClosetoEnd/100*rangecurrent))) ExtMapBuffer7[i] = High[i]+(SOBPercentLabel/100*range);
                if ((Open[i]>Close[i])&&(Close[i]<Low[i+1])&&((Close[i]-Low[i])<(PercentOBClosetoEnd/100*rangecurrent)))   ExtMapBuffer8[i] = Low[i]-(SOBPercentLabel/100*range);
             }
         }


       } //for
   return(0);
  } //start()
//+------------------------------------------------------------------+

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