← К каталогу
Исходный код · ID 4740

Time Price Opportunity (TPO)

the time price opportunity (tpo) v2.5.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор TPO (Time Price Opportunity) строит гистограммы распределения цены по заданным временным диапазонам на графике MetaTrader 4. Для каждого диапазона рассчитывается статистика присутствия цены на различных уровнях с несколькими методами имитации тиков, включая учёт объёма. Результаты отображаются в виде цветных гистограмм с градиентным затенением.

Индикатор автоматически определяет модальные уровни (пики гистограммы), которые отрисовываются как горизонтальные линии или прямоугольники, обозначая потенциальные зоны поддержки и сопротивления. Поддерживается сглаживание гистограммы и автоматическое масштабирование.

Настройки позволяют выбрать таймфрейм диапазонов, количество отображаемых гистограмм, стиль и цвет визуализации, а также шаг расчёта цены. Индикатор обновляется при появлении новых баров и управляемый временной горизонт позволяет ограничивать отображаемую историю.

Настройки программы

НастройкаОписание
Notice Текстовый параметр, отображаемый как информационное сообщение.
SimpleForexTeam__ Текстовый параметр, содержащий ссылку на канал автора.
RangePeriod Таймфрейм диапазонов. Должен быть одним из стандартных.
RangeCount Количество отображаемых диапазонов и гистограмм на графике.
ModeStep Шаг поиска модальных уровней, фактически равен удвоенному значению плюс один.
PriceStep Ценовой шаг расчёта. 0 означает автоматическое определение на основе количества цифр котировки.
DataPeriod Таймфрейм данных для расчёта гистограммы. M1 обеспечивает наибольшую точность.
HGColor Цвет гистограммы. Если задан как NONE, гистограмма не отображается.
HGStyle Стиль отображения гистограммы: 0 — линии, 1 — пустые прямоугольники, 2 — залитые прямоугольники.
ModeColor Цвет линий модальных уровней (пиков гистограммы). Если NONE — модальные уровни не отображаются.
MaxModeColor Цвет выделения максимального модального уровня. Если NONE — выделение не отображается.
Id Префикс имён объектов линий, создаваемых индикатором на графике.

Поиск по коду файла

#property indicator_chart_window

input string Notice = "Trading are risky! Trade only if you can loss your money";
input string SimpleForexTeam__ = "free tools for forex! Join our channel for more free eas";
input string The_our_telegram = "";
input string VIP_group = "";

extern int RangePeriod = PERIOD_D1;             // Range timeframe, must be one of the standard ones
extern int RangeCount = 20;                     // Number of ranges/histograms

extern int ModeStep = 10;                       // Mode search step, actually 2 times larger + 1
int Smooth = 0;                                 // Smoothing depth, sequential triad averaging algorithm is applied the specified number of times
extern int PriceStep = 0;                       // Price step, 0 - auto (see #1)
extern int DataPeriod = 1;                      // Data period, M1 is the most accurate
bool ShowHorizon = true;                        // Show data horizon

extern color HGColor = C'160,192,224';          // Histogram color
extern int HGStyle = 1;                         // Histogram style: 0 - lines, 1 - empty rectangles, 2 - filled rectangles
extern color ModeColor = Blue;                  // Mode color
extern color MaxModeColor = CLR_NONE;           // Highlight maximum

int HGLineWidth = 1;                            // Histogram line width
double Zoom = 0;                                // Histogram scale, 0 - autoscale

int ModeWidth = 1;                              // Mode width
int ModeStyle = STYLE_SOLID;                    // Mode style

extern string Id = "+tpo";                      // Line name prefix

int WaitSeconds = 1;                            // Minimum time, in seconds, between updates
int TickMethod = 1;                             // Tick imitation method: 0 - Low >> High, 1 - Open > Low(High) > High(Low) > Close, 2 - HLC, 3 - HL, 4 - Average tick pseudo-volume

string onp;

datetime drawHistory[];     // Drawing history
datetime lastTime = 0;      // Last launch time
bool lastOK = false;

double hgPoint;             // Minimum price change
int modeStep = 0;
int smooth = 0;

bool showHG, showModes, showMaxMode;
bool hgBack = true;
bool hgUseRectangles = false;

#define ERR_HISTORY_WILL_UPDATED 4066

int init()
{
      // код доступен только после оплаты
   }

int start()
{
      // код доступен только после оплаты
   }

int deinit()
{
    clearChart(onp);
    return(0);
}

bool checkDrawHistory(datetime time)
{
    int count = ArraySize(drawHistory);
    bool r = false;
    for (int i = 0; i < count; i++)
    {
        if (drawHistory[i] == time)
        {
            r = true;
            break;
        }
    }
    return(r);
}

void addDrawHistory(datetime time)
{
    if (!checkDrawHistory(time))
    {
        int count = ArraySize(drawHistory);
        ArrayResize(drawHistory, count + 1);
        drawHistory[count] = time;
    }
}

void drawModes(double& vh[], double hLow, int barFrom, double zoom, double point)
{
    int modes[], modeCount, j;
    double price;

    modeCount = getModesIndexes(vh, modeStep, modes);

    double max = 0;
    if (showMaxMode)
    {
        for (j = 0; j < modeCount; j++)
            if (vh[modes[j]] > max)
                max = vh[modes[j]];
    }

    datetime timeFrom = getBarTime(barFrom);

    clearChart(onp + "mode " + TimeToStr(timeFrom) + " ");

    bool back = false;
    if (hgUseRectangles)
        back = true;

    string on;

    for (j = 0; j < modeCount; j++)
    {
        double v = zoom * vh[modes[j]];

        if (MathAbs(v) > 0)
        {
            price = hLow + modes[j]*point;
            datetime timeTo = getBarTime(barFrom - v);

            on = onp + "mode " + TimeToStr(timeFrom) + " " + DoubleToStr(price, Digits);
            if (showMaxMode && (MathAbs(vh[modes[j]] - max) < point))    // Maximum mode
            {
                drawTrend(on, timeFrom, price, timeTo, price, MaxModeColor, ModeWidth, ModeStyle, back, false, 0, hgUseRectangles);

                if (hgUseRectangles && back)
                    drawTrend(on + "+", timeFrom, price, timeTo, price, MaxModeColor, ModeWidth, ModeStyle, false, false, 0, false);
            }
            else if (showModes)    // Regular mode
            {
                drawTrend(on, timeFrom, price, timeTo, price, ModeColor, ModeWidth, ModeStyle, back, false, 0, hgUseRectangles);

                if (hgUseRectangles && back)
                    drawTrend(on + "+", timeFrom, price, timeTo, price, ModeColor, ModeWidth, ModeStyle, false, false, 0, false);
            }
        }
    }
}

datetime getBarTime(int shift, int period = 0)
{
    if (period == 0)
        period = Period();

    if (shift >= 0)
        return(iTime(Symbol(), period, shift));
    else
        return(iTime(Symbol(), period, 0) - shift*period*60);
}

int clearChart(string prefix)
{
    int obj_total = ObjectsTotal();
    string name;

    int count = 0;
    for (int i = obj_total - 1; i >= 0; i--)
    {
        name = ObjectName(i);
        if (StringFind(name, prefix) == 0)
        {
            ObjectDelete(name);
            count++;
        }            
    }
    return(count);
}

void drawVLine(string name, datetime time1, color lineColor = Gray, int width = 1, int style = STYLE_SOLID, bool back = true)
{
    if (ObjectFind(name) >= 0)
        ObjectDelete(name);

    ObjectCreate(name, OBJ_VLINE, 0, time1, 0);
    ObjectSet(name, OBJPROP_COLOR, lineColor);
    ObjectSet(name, OBJPROP_BACK, back);
    ObjectSet(name, OBJPROP_STYLE, style);
    ObjectSet(name, OBJPROP_WIDTH, width);
}

void drawTrend(string name, datetime time1, double price1, datetime timeTo, double price2, 
    color lineColor, int width, int style, bool back, bool ray, int window, bool useRectangle)
{
    if (ObjectFind(name) >= 0)
        ObjectDelete(name);

    if (useRectangle)
        ObjectCreate(name, OBJ_RECTANGLE, window, time1, price1 - hgPoint / 2.0, timeTo, price2 +

Показано первые 50% кода (символов: 11035)