//+------------------------------------------------------------------+ //| Ticks.mq4 | //| MetaQuotes | //| http://www.alpari-idc.ru/ru/experts/articles/ | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://www.alpari-idc.ru/ru/experts/articles/" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Aqua #property indicator_color2 Red #property indicator_color3 Lime //---- buffers extern int MaxDrawTicks=500; double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; int myBars; int tickCounter; int delimeterCounter; string nume1,nume2,nume3; //----------------------- string Path; int Counter; int CounterPlus; int CounterMinus; double BidPrev; //---------------------- //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int i; init_tick(); nume1 ="Bid_"+Symbol(); nume2 ="Ask_"+Symbol(); nume3 ="Open_"+Symbol(); GlobalVariableSet(nume1,0); GlobalVariableSet(nume2,0); GlobalVariableSet(nume3,0); //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, ExtMapBuffer1); SetIndexEmptyValue(0,0.0); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, ExtMapBuffer2); SetIndexEmptyValue(1,0.0); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2, ExtMapBuffer3); SetIndexEmptyValue(2,0.0); Print("Îáíóëÿåì òèêè"); for (i=Bars-1;i>=0;i--) ExtMapBuffer1[i]=0.0; for (i=Bars-1;i>=0;i--) ExtMapBuffer2[i]=0.0; for (i=Bars-1;i>=0;i--) ExtMapBuffer3[i]=0.0; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| ñäâèíåì ìàññèâ | //+------------------------------------------------------------------+ void SetDelimeter() { //---- string delimeterDate=TimeToStr(Time[0]); if (myBars!=0) { Print("Ñòàâèì ðàçäåëèòåëü"); int handle=WindowFind("Ticks_mod_v1.0"); if(!ObjectCreate(delimeterDate,OBJ_VLINE,handle,Time[0],0)) { //Alert("Íåäà÷íàÿ ïîïûòêà ñîçäàíèÿ ðàçäåëèòåëÿ â îêíå ", //handle," ïî âðåìåíè ",TimeToStr(CurTime())); Print("Îøèáêà ¹",GetLastError(),", èìÿ ðàçäåëèòåëÿ ",delimeterDate); } else { ObjectSet(delimeterDate,OBJPROP_COLOR,Yellow); ObjectSet(delimeterDate,OBJPROP_STYLE,STYLE_DASHDOT); ObjectsRedraw(); } } //---- return(0); } //+------------------------------------------------------------------+ //| ñäâèíåì ìàññèâ | //+------------------------------------------------------------------+ void ShiftArray() { //---- int V_lines,i1; string delimeterName; datetime firstTime; int BarFirstTime; if (tickCounter>2*MaxDrawTicks) { for (i1=tickCounter;i1>=MaxDrawTicks;i1--) ExtMapBuffer1[i1]=0.0; for (i1=tickCounter;i1>=MaxDrawTicks;i1--) ExtMapBuffer2[i1]=0.0; for (i1=tickCounter;i1>=MaxDrawTicks;i1--) ExtMapBuffer3[i1]=0.0; tickCounter=MaxDrawTicks; } for(int cnt=tickCounter;cnt>0;cnt--) { ExtMapBuffer1[cnt]=ExtMapBuffer1[cnt-1]; ExtMapBuffer2[cnt]=ExtMapBuffer2[cnt-1]; ExtMapBuffer3[cnt]=ExtMapBuffer3[cnt-1]; } V_lines=ObjectsTotal(); for (int z=0;z<V_lines;z++) { delimeterName=ObjectName(z); if (ObjectFind(delimeterName)!=-1) { if (ObjectType(delimeterName)==OBJ_VLINE) { firstTime=ObjectGet(delimeterName,OBJPROP_TIME1); BarFirstTime=iBarShift(NULL,0,firstTime); firstTime=Time[BarFirstTime+1]; ObjectSet(delimeterName,OBJPROP_TIME1,firstTime); } } } //---- return(0); } //+------------------------------------------------------------------+ //| ïðèçíàê íîâîãî áàðà | //+------------------------------------------------------------------+ bool isNewBar() { //---- bool res=false; if (myBars!=Bars) { res=true; myBars=Bars; } //---- return(res); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- if (isNewBar()) { // óñòàíîâèòü ðàçäåëèòåëü //tickCounter++; init_tick(); SetDelimeter(); ExtMapBuffer1[0]=Bid; ExtMapBuffer2[0]=Ask; ExtMapBuffer3[0]=Open[0]; GlobalVariableSet(nume1,Bid); GlobalVariableSet(nume2,Ask); GlobalVariableSet(nume3,Open[0]); } else { tickCounter++; ShiftArray(); ExtMapBuffer1[0]=Bid; ExtMapBuffer2[0]=Ask; ExtMapBuffer3[0]=Open[0]; GlobalVariableSet(nume1,Bid); GlobalVariableSet(nume2,Ask); GlobalVariableSet(nume3,Open[0]); } //---- path1(Symbol()); Comment(""); Comment("\nPath: ",Path, "\nPlus:",CounterPlus," Minus:",CounterMinus); return(0); } //+------------------------------------------------------------------+ void init_tick() { Path=""; Counter=0; CounterPlus=0; CounterMinus=0; BidPrev=MarketInfo(Symbol(),MODE_BID); } void path1(string symbol1) { int PathLimit =767; double Deltha = MarketInfo(symbol1,MODE_BID) * MathPow(10, MarketInfo(symbol1,MODE_DIGITS)) - BidPrev * MathPow(10, MarketInfo(symbol1,MODE_DIGITS)); //if(Deltha !=0) if (Deltha >= 0) Path = StringConcatenate("+",DoubleToStr ( Deltha, 0 ), Path); else Path = StringConcatenate( DoubleToStr ( Deltha, 0 ), Path ); Path = StringSubstr ( Path, 0, PathLimit ); if (MarketInfo(symbol1,MODE_BID)!= BidPrev){ Counter ++; if ((Deltha > 0) && (Deltha !=0)) CounterPlus++; if ((Deltha < 0) && (Deltha !=0)) CounterMinus++; BidPrev = MarketInfo(symbol1,MODE_BID); // } }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains open prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: