// Ticker Bars.mq4 // Èíäèêàòîð #property copyright "mandorr@gmail.com" #property indicator_separate_window #property indicator_buffers 2 extern int BarVolume=15; // Òèêîâûé îáúåì áàðà extern int BarWidth=5; // Øèðèíà ëèíèè áàðà extern int BarsCount=1000; // Êîëè÷åñòâî îòîáðàæàåìûõ áàðîâ int win_index; int price_prev; int tickers; int bar_tick; int bar_size; int bar_open []; int bar_high []; int bar_low []; int bar_close[]; double buffer0 []; double buffer1 []; void init() { SetIndexBuffer(0,buffer0); SetIndexBuffer(1,buffer1); SetIndexStyle (0,DRAW_NONE); SetIndexStyle (1,DRAW_NONE); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexLabel (0,"High"); SetIndexLabel (1,"Low"); SetIndexDrawBegin(0,0); SetIndexDrawBegin(1,0); IndicatorDigits(Digits); for (int i=0; i<=BarsCount; i++) { buffer0[i]=0.0; buffer1[i]=0.0; } price_prev=0; tickers=0; bar_tick=0; bar_size=0; } void deinit() { ObjectsDeleteAll(win_index); } void start() { int i, price; string bar_name, line_name, win_name; double open, high, low, close; datetime time; price=MathRound(Bid/Point); if (price==0) {return;} if (price==price_prev) {return;} price_prev=price; tickers++; bar_tick++; win_name="Ticker ("+tickers+") Volume ("+BarVolume+")"; IndicatorShortName(win_name); win_index=WindowFind(win_name); if (bar_size==0) { bar_size=1; ArrayResize(bar_open ,1); ArrayResize(bar_high ,1); ArrayResize(bar_low ,1); ArrayResize(bar_close,1); bar_open [0]=price; bar_high [0]=price; bar_low [0]=price; bar_close[0]=price; } if (bar_tick>BarVolume) { bar_tick=1; bar_size++; if (bar_size>BarsCount) {bar_size=BarsCount;} else { ArrayResize(bar_open ,bar_size); ArrayResize(bar_high ,bar_size); ArrayResize(bar_low ,bar_size); ArrayResize(bar_close,bar_size); } for (i=bar_size-1; i>0; i--) { bar_open [i]=bar_open [i-1]; bar_high [i]=bar_high [i-1]; bar_low [i]=bar_low [i-1]; bar_close[i]=bar_close[i-1]; } bar_open [0]=price; bar_high [0]=price; bar_low [0]=price; bar_close[0]=price; } if (bar_high[0]<price) {bar_high[0]=price;} if (bar_low [0]>price) {bar_low [0]=price;} bar_close[0]=price; for (i=0; i<bar_size; i++) { open =bar_open [i]*Point; high =bar_high [i]*Point; low =bar_low [i]*Point; close=bar_close[i]*Point; time =Time[i]; color bar_color; if (close<open) {bar_color=Red;} else {bar_color=Blue;} bar_name="Win"+win_index+"_Bar"+i+"_HL"; if (ObjectFind(bar_name)!=win_index) { ObjectCreate(bar_name,OBJ_TREND,win_index,time,high,time,low); } ObjectSet(bar_name,OBJPROP_TIME1,time); ObjectSet(bar_name,OBJPROP_TIME2,time); ObjectSet(bar_name,OBJPROP_PRICE1,high); ObjectSet(bar_name,OBJPROP_PRICE2,low); ObjectSet(bar_name,OBJPROP_STYLE,DRAW_LINE); ObjectSet(bar_name,OBJPROP_WIDTH,1); ObjectSet(bar_name,OBJPROP_RAY,false); ObjectSet(bar_name,OBJPROP_COLOR,bar_color); bar_name="Win"+win_index+"_Bar"+i+"_OC"; if (ObjectFind(bar_name)!=win_index) { ObjectCreate(bar_name,OBJ_TREND,win_index,time,open,time,close); } ObjectSet(bar_name,OBJPROP_TIME1,time); ObjectSet(bar_name,OBJPROP_TIME2,time); ObjectSet(bar_name,OBJPROP_PRICE1,open); ObjectSet(bar_name,OBJPROP_PRICE2,close); ObjectSet(bar_name,OBJPROP_STYLE,DRAW_LINE); ObjectSet(bar_name,OBJPROP_WIDTH,BarWidth); ObjectSet(bar_name,OBJPROP_RAY,false); ObjectSet(bar_name,OBJPROP_COLOR,bar_color); buffer0[i]=high; buffer1[i]=low ; } buffer0[bar_size]=0.0; buffer1[bar_size]=0.0; line_name="Win"+win_index+"_Bid"; if (ObjectFind(line_name)!=win_index) { ObjectCreate(line_name,OBJ_HLINE,win_index,time,Bid); } ObjectSet(line_name,OBJPROP_PRICE1,Bid); ObjectSet(line_name,OBJPROP_STYLE,DRAW_LINE); ObjectSet(line_name,OBJPROP_WIDTH,1); ObjectSet(line_name,OBJPROP_COLOR,Silver); } // End
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: