Price Action Indicator

 

Dears Sirs,


I use in Metatrader 4 this indicator : https://www.mql5.com/en/code/8590

is possible traslete it for Metatrade 5 ?

I'm not a programmer.


Thanks

Dario

 
 
//+——————————————————————+
//| Ticks2Rangebar.mq4 |
//| A Sexy Trader |
//| http://5to5000.wordpress.com |
//+——————————————————————+
#property copyright "A Sexy Trader"
#property link "http://yijomza.wordpress.com"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Navy
 
#include <stdlib.mqh>
//—- buffers
extern int MaxDrawTicks=500
          ,Range =10
          ;
 
double ExtMapBuffer1[],iNOpen[8888888],iLClose[8888888]
      ,nOpen,Price1,Price2,lastTick,lastOpen,lastClose
      ,TickMOM
      ,tick[8888888]
      ;
int myBars,Time1,Time2,BarTime1,BarTime2,shift;
int tickCounter,BarCounter,iBTime1[8888888],iBTime2[8888888];
int delimeterCounter;
bool NewBar;
string StrBar="Bar",tickstr;
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int init()
{
//—- indicators
      SetIndexStyle(0,DRAW_LINE);
      SetIndexBuffer(0, ExtMapBuffer1);
      SetIndexEmptyValue(0,0.0);
 
      IndicatorShortName("TickPrice("+Range+")~MaxDrawTicks("+MaxDrawTicks+")");
 
      for (int i=Bars-1;i>=0;i--) ExtMapBuffer1[i]=0.0;
      
      nOpen=Bid;
      
      ArrayResize(iNOpen,MaxDrawTicks);
      ArrayResize(iLClose,MaxDrawTicks);
      ArrayResize(iBTime1,MaxDrawTicks);
      ArrayResize(iBTime2,MaxDrawTicks);
 
      for(i=0;i<ObjectsTotal();i++)
      {
         string ObjName=ObjectName(i);
         if(ObjectType(ObjName)==OBJ_RECTANGLE)
         {
            ObjectDelete(ObjName);
         }
      }
//—-
return(0);
}
//+——————————————————————+
//| Custom indicator deinitialization function |
//+——————————————————————+
int deinit()
{
//—-
 
//—-
return(0);
}
//+——————————————————————+
//| ??????? ?????? |
//+——————————————————————+
void SetDelimeter()
{
//—-
   string delimeterDate=TimeToStr(Time[0]);
//—-
return(0);
}
//+——————————————————————+
//| Shift Array          |
//+——————————————————————+
void ShiftArray()
{
//—-
      int V_lines;
      string delimeterName;
      datetime firstTime;
      int BarFirstTime;
 
      if (tickCounter>2*MaxDrawTicks)
      {
         for (int i=tickCounter;i>=MaxDrawTicks;i--) ExtMapBuffer1[i]=0.0;
         tickCounter=MaxDrawTicks;
      }
 
      for(int cnt=tickCounter;cnt>0;cnt--)
      {
         ExtMapBuffer1[cnt]=ExtMapBuffer1[cnt-1];
      }
 
      if(NewBar==true)
      {
         for(int Bcnt=BarCounter;Bcnt>0;Bcnt--)
         {
            iBTime1[Bcnt]=Time[Bcnt+1];
            iBTime2[Bcnt]=Time[Bcnt];
            iNOpen[Bcnt] =iNOpen[Bcnt-1];
            iLClose[Bcnt]=iLClose[Bcnt-1];
         }
      }
      
      V_lines=ObjectsTotal();
      
      for (int z=0;z<V_lines;z++)
      {
         delimeterName=ObjectName(z);
         if (ObjectFind(delimeterName)!=-1)
         {
            if (ObjectType(delimeterName)==OBJ_VLINE)
            {
               Time1=ObjectGet(delimeterName,OBJPROP_TIME1);
               BarTime1=iBarShift(NULL,0,Time1);
               Time1=Time[BarTime1+1];
               ObjectSet(delimeterName,OBJPROP_TIME1,Time1);
 
               Time2=ObjectGet(delimeterName,OBJPROP_TIME2);
               BarTime2=iBarShift(NULL,0,Time2);
               Time2=Time[BarTime2+1];
               ObjectSet(delimeterName,OBJPROP_TIME1,Time2);
 
               Price1=ObjectGet(delimeterName,OBJPROP_PRICE1);
               ObjectSet(delimeterName,OBJPROP_PRICE1,Price1);
               Price2=ObjectGet(delimeterName,OBJPROP_PRICE2);
               ObjectSet(delimeterName,OBJPROP_PRICE2,Price2);
 
         }
      }
   }
//—-
return(0);
}
//+——————————————————————+
//| If The New Bar Comes |
//+——————————————————————+
bool isNewBar()
{
//—-
   bool res=false;
   if (myBars!=Bars)
   {
      res=true;
      myBars=Bars;
   }
//—-
return(res);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
int start()
{
   int counted_bars=IndicatorCounted();
   int handle=WindowFind("TickPrice");
//—-
   if (isNewBar())
   {
      tickCounter++;
      SetDelimeter();
      ExtMapBuffer1[0]=Bid;
      lastTick=Bid;
   }
   else
   {
      tickCounter++;
      ShiftArray();
      ExtMapBuffer1[0]=Bid;
      lastTick=Bid;
   }
 
 
if(IsConnected() && TimeHour(iTime(Symbol(),60,0))==Hour())
{
   string name;
   if(MathAbs(nOpen-lastTick)/Point>=Range)
   {
      lastOpen=nOpen;
      lastClose=lastTick;
 
      NewBar=true;
      nOpen=Bid;
      ShiftArray();
      BarCounter++;shift++;
      StrBar="Bar"+(BarCounter+1);
 
      int i=1;
      for(i=1;i<=BarCounter;i++)
      {
         if(ObjectFind("Bar"+i)!=-1)
         {
            name="Bar"+i;
            
            int time1=ObjectGet(name,OBJPROP_TIME1);
            
            time1=iBarShift(Symbol(),0,time1,false);
            
            ObjectSet(name,OBJPROP_TIME1,Time[time1+1]);
            ObjectSet(name,OBJPROP_TIME2,Time[time1]);
            
            double p1=ObjectGet(name,OBJPROP_PRICE1)
                  ,p2=ObjectGet(name,OBJPROP_PRICE2);
            
            ObjectSet(name,OBJPROP_PRICE1,p1);
            ObjectSet(name,OBJPROP_PRICE2,p2);
            if(ObjectMove(name,0,Time[time1+1],p1)){}
            else
            {
               Print("OjectMove 1 : ",ErrorDescription(GetLastError()));
            }
 
            if(ObjectMove(name,1,Time[time1],p2)){}
            else
            {
               Print("OjectMove 2 : ",ErrorDescription(GetLastError()));
            }
         }
      }
 
      iNOpen[0]=nOpen;
      iLClose[0]=nOpen;
      iBTime1[0]=Time[1];
      iBTime2[0]=Time[0];
      
      ObjectCreate(StrBar,OBJ_RECTANGLE,0,Time[1],nOpen,Time[0],nOpen+(0.6*Point));
      ObjectSet(StrBar,OBJPROP_COLOR,DeepPink);
      ObjectSet(StrBar,OBJPROP_WIDTH,5);
      ObjectSet(StrBar,OBJPROP_RAY,0);
   }
   else
   {
   NewBar=false;
   lastTick=Bid;
   
   if(lastTick==nOpen)lastTick=nOpen+(0.6*Point);
   
   iLClose[0]=lastTick;
   iBTime1[0]=Time[1];
   iBTime2[0]=Time[0];
   if(ObjectsTotal(OBJ_RECTANGLE)==0)
   {
      StrBar="Bar"+(BarCounter+1);
      ObjectCreate(StrBar,OBJ_RECTANGLE,0,Time[1],nOpen,Time[0],lastTick);
      ObjectSet(StrBar,OBJPROP_COLOR,DeepPink);
      ObjectSet(StrBar,OBJPROP_WIDTH,5);
      ObjectSet(StrBar,OBJPROP_RAY,0);
   }
   else
   if(ObjectGet(StrBar,OBJPROP_TIME2)!=Time[0])//if(isNewBar())//
   {
      i=BarCounter;int j=0;
      for(i=BarCounter+1;i>=1;i--)
      {
         if(ObjectFind("Bar"+i)!=-1)
         {
            name="Bar"+(i);
            
            int time2=ObjectGet(name,OBJPROP_TIME2);
            
            time2=iBarShift(Symbol(),0,time2,false);
            
            ObjectSet(name,OBJPROP_TIME2,Time[j]);
            ObjectSet(name,OBJPROP_TIME1,Time[j+1]);
            
            p1=ObjectGet(name,OBJPROP_PRICE1);
            p2=ObjectGet(name,OBJPROP_PRICE2);
            
            ObjectSet(name,OBJPROP_PRICE1,p1);
            ObjectSet(name,OBJPROP_PRICE2,p2);
            if(ObjectMove(name,0,Time[j+1],p2))
            {
               if(ObjectMove(name,1,Time[j],p1)){j++;}
            }
         }
      }
   }
   else
   {
      if(lastTick>=nOpen)
      {
         ObjectSet(StrBar,OBJPROP_COLOR,HotPink);
      }else
      if(lastTick<nOpen)
      {
         ObjectSet(StrBar,OBJPROP_COLOR,DeepSkyBlue);
      }
      else
      {
         ObjectSet(StrBar,OBJPROP_COLOR,DeepPink);
      }
   ObjectSet(StrBar,OBJPROP_PRICE2,lastTick);
   ObjectSet(StrBar,OBJPROP_PRICE1,nOpen);
   ObjectSet(StrBar,OBJPROP_TIME1,Time[1]);
   ObjectSet(StrBar,OBJPROP_TIME2,Time[0]);
   }
   }
   }
 
   Comment(
   "\nnOpen : "+DoubleToStr(nOpen,Digits)
   ,"\nlastTick : "+DoubleToStr(lastTick,Digits)
 
   ,"\n\nPrevOpen : "+DoubleToStr(iNOpen[1],Digits)
   ,"\nPrevClose : "+DoubleToStr(iLClose[1],Digits)
 
   ,"\n\nBarRange : "+DoubleToStr(MathAbs(nOpen-lastTick)/Point,0)
   ,"\nBarCounter : "+BarCounter
   ,"\nBars_Total : "+ObjectsTotal(OBJ_RECTANGLE)
 
   );
//—-
return(0);
}
//+——————————————————————+
 
Please, insert source properly.
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
Reason: