//+------------------------------------------------------------------+ //| Volumes Hist.mq4 | //| Copyright © Vadim Shumilov (DrShumiloff) | //| shumiloff@mail.ru | //| ICQ 84796634 | //+------------------------------------------------------------------+ #property copyright "Vadim Shumilov (DrShumiloff)" #property link "shumiloff@mail.ru" //---- #property indicator_chart_window extern int MinutesCount = 5000; // 3000 - 10000 ; extern int Amplitude = 20; // 10 .. 100 extern int RefreshPeriod = 1; // 1 .. 60 extern color HistColor = SteelBlue; extern double PricePoint = 0.0002; // For the next versions // extern int Method = 0; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA, 4 - LRMA // extern int VolumePeriod = 21; double Hist[]; datetime OpenTime = 0; int init() { return(0); } int deinit() { DeleteObjects(); return(0); } int DeleteObjects() { for (int i = 0; i< 3000; i++) ObjectDelete("VH"+i); } int DrawLine(int n, double price, int vol, int max) { vol = MathRound(Amplitude * vol / max ); if (vol > 0) { int first = WindowFirstVisibleBar(); datetime dt1 = iTime(NULL, Period(), first); datetime dt2 = iTime(NULL, Period(), first-vol); ObjectCreate("VH"+n, OBJ_RECTANGLE, 0, dt1, price, dt2, price+PricePoint); ObjectSet("VH"+n, OBJPROP_STYLE, DRAW_HISTOGRAM); ObjectSet("VH"+n, OBJPROP_COLOR, HistColor); ObjectSet("VH"+n, OBJPROP_BACK, true); } return (0); } int start() { if (OpenTime != iOpen(Symbol(), PERIOD_M1, 0)) { OpenTime = iOpen(Symbol(), PERIOD_M1, 0); int n, MaxVolume; double max = iHigh(Symbol(), PERIOD_M1, iHighest(Symbol(), PERIOD_M1, MODE_HIGH, MinutesCount, 0)); double min = iLow(Symbol(), PERIOD_M1, iLowest(Symbol(), PERIOD_M1, MODE_LOW, MinutesCount, 0)); int items = MathRound((max - min) / PricePoint); if (max == 0) { Alert("There is no minutes data. Please download M1."); return (0); } ArrayResize(Hist, items); ArrayInitialize(Hist, 0); for (int i = 1; i <= MinutesCount; i++) { n = MathRound((iClose(Symbol(), PERIOD_M1, i) - min) / PricePoint); Hist[n] += iVolume(Symbol(), PERIOD_M1, i); } MaxVolume = Hist[ArrayMaximum(Hist)]; DeleteObjects(); for (i = 0; i <= items; i++) { DrawLine(i, min + i*PricePoint, Hist[i], MaxVolume); } } return(0); }
Sample
Analysis
Market Information Used:
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains tick volumes of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen