VolumesHist





//+------------------------------------------------------------------+
//|                                                 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