//+——————————————————————+ //| 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 //—- 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;i2*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=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