TPO
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «+tpo_mod.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор TPO (Time Price Opportunity) отображает распределение цен на графике MetaTrader 4 в виде гистограмм по заданным временным диапазонам. Продукт анализирует ценовые данные за каждый диапазон, формируя гистограмму частоты появления цен на различных уровнях. На основе гистограммы определяются моды — уровни с максимальной концентрацией цен.
Индикатор позволяет настраивать таймфрейм диапазонов, количество отображаемых диапазонов, шаг цены и шаг поиска мод. Гистограмма может отображаться в виде линий или прямоугольников с настраиваемыми цветами и стилями. Моды рисуются отдельными линиями, при этом максимальная мода может быть выделена особым цветом.
Дополнительно индикатор может отображать треугольники, соединяющие максимум и минимум ценового диапазона с уровнем моды. Встроена линия горизонта данных для ориентира по времени. Расчёты выполняются на каждом новом баре с контролем частоты обновления.
Настройки программы
| Настройка | Описание |
|---|---|
| RangePeriod | Таймфрейм диапазона для анализа распределения цен; должен быть одним из стандартных. |
| RangeCount | Количество отображаемых диапазонов и гистограмм на графике. |
| ModeStep | Шаг поиска мод; фактический размер участка поиска в два раза больше указанного значения плюс один. |
| PriceStep | Шаг цены для построения гистограммы. Значение 0 означает автоматический расчёт шага. |
| DataPeriod | Период данных для расчёта гистограммы; минутные данные обеспечивают наибольшую точность. |
| HGColor | Цвет гистограммы распределения цен. Значение clrNONE скрывает гистограмму. |
| HGStyle | Стиль отображения гистограммы: 0 — линии, 1 — пустые прямоугольники, 2 — заполненные прямоугольники. |
| ModeColor | Цвет линий мод — уровней локальной максимальной концентрации цен. |
| MaxModeColor | Цвет выделения максимальной моды — уровня с наибольшей концентрацией цен. |
| TriangleShow | Переключатель отображения треугольников, соединяющих максимум и минимум диапазона с уровнем моды. |
| TriangleClr | Цвет треугольников, соединяющих экстремумы ценового диапазона с уровнем моды. |
| TriangleFill | Переключатель заливки треугольников: включено — треугольники заливаются, выключено — только контур. |
| Id | Префикс имён графических объектов, создаваемых индикатором на графике. |
Поиск по коду файла
#property indicator_chart_window
extern int RangePeriod = PERIOD_D1; // ТФ диапазона, должен быть одним из стандартных
extern int RangeCount = 20; // количество диапазонов/гистограмм
extern int ModeStep = 10; // шаг поиска мод, фактически в 2 раза больше + 1
int Smooth = 0; // глубина сглаживания, применяется алгоритм последовательного усреднения триад указанное число раз
extern int PriceStep = 0; // шаг цены, 0 - авто (см. #1)
extern int DataPeriod = 1; // период для данных, минутки - самые точные
bool ShowHorizon = true; // показать горизонт данных
extern color HGColor = clrNONE; // цвет гистограммы
extern int HGStyle = 1; // стиль гистограммы: 0 - линии, 1 - пустые прямоугольники, 2 - заполненные прямоугольники
extern color ModeColor = clrNONE; // цвет мод
extern color MaxModeColor = clrYellow; // выделить максимум
input bool TriangleShow = true; //Show Triangle
input color TriangleClr = clrDimGray; //__ color
input bool TriangleFill = true; //__ Fill
int HGLineWidth = 1; // ширина линий гистограммы
double Zoom = 0; // масштаб гистограммы, 0 - автомасштаб
int ModeWidth = 1; // толщина мод
int ModeStyle = STYLE_SOLID; // стиль мод
extern string Id = "+tpo"; // префикс имен линий
int WaitSeconds = 1; // минимальное время, в секундах, между обновлениями
int TickMethod = 1; // метод имитации тиков: 0 - Low >> High, 1 - Open > Low(High) > High(Low) > Close, 2 - HLC, 3 - HL, 4 - Среднетиковый псевдо-объ¸м
string onp;
datetime drawHistory[]; // история рисования
datetime lastTime = 0; // последнее времся запуска
bool lastOK = false;
double hgPoint; // минимальное изменение цены
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);
ObjectsDeleteAll(0,"tri"+Id);
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)) // максимальная мода
{
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) // обычная мода
{
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_toПоказано первые 50% кода (символов: 12563)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.