Premium Discount OTE
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «premiumdiscountote.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Premium Discount OTE — пользовательский индикатор для MetaTrader 5, реализующий концепции торгового диапазона (dealing range), премиума и дисконта, зоны оптимального входа (OTE), стандартных отклонений и диапазонов данных IPDA. Индикатор определяет подтверждённые свинги (вершины и впадины) на заданном количестве свечек с каждой стороны и строит торговой диапазон от более раннего свинга до текущего момента.
Верхняя и нижняя границы диапазона делятся на зоны премиума и дисконта относительно линии равновесия (50%). Зона OTE охватывает ретрейсмент 62%–79% с линией 70.5%. Дополнительно отображаются проекции стандартных отклонений за пределами диапазона и диапазоны данных IPDA на 20, 40 и 60 завершённых торговых дней. Все расчёты выполняются по закрытым свечкам, что исключает перерисовку.
Индикатор поддерживает уведомления о появлении нового торгового диапазона, входе цены в зону OTE и пересечении равновесия закрытой свечкой. Уведомления могут отправляться как всплывающие окна, push-уведомления или по электронной почте. Для экспертных советников доступны 13 буферов данных, читаемых через iCustom. Индикатор не выполняет торговых операций.
Настройки программы
| Настройка | Описание |
|---|---|
| InpSwing | Сила свинга — количество свечек с каждой стороны для подтверждения свинг-вершины или свинг-впадины. |
| InpOTE | Включает отображение зоны OTE (62%–79%) и линии 70.5%. |
| InpFibs | Включает отображение дополнительных уровней ретрейсмента (23.6%, 38.2%, 61.8%, 78.6%). |
| InpDeviations | Включает отображение проекций стандартных отклонений за пределами торгового диапазона. |
| InpDevLevels | Список значений стандартных отклонений в высотах диапазона (например, -1,-2,-2.5,-4). |
| InpIPDA20 | Включает отображение диапазона данных IPDA за последние 20 завершённых торговых дней. |
| InpIPDA40 | Включает отображение диапазона данных IPDA за последние 40 завершённых торговых дней. |
| InpIPDA60 | Включает отображение диапазона данных IPDA за последние 60 завершённых торговых дней. |
| InpBars | Количество баров для сканирования при расчёте диапазонов и свинг-точек. |
| InpLabels | Отображает названия и цены подписей у правого края графика. |
| InpStatus | Отображает строку состояния в углу графика с текущей зоной цены. |
| InpPremiumColor | Цвет заливки и подписей зоны премиума. |
| InpDiscountColor | Цвет заливки и подписей зоны дисконта. |
| InpOTEColor | Цвет заливки и подписей зоны OTE. |
| InpLineColor | Цвет линии равновесия и линии 70.5%. |
| InpDevColor | Цвет линий и подписей проекций стандартных отклонений. |
| InpIPDAColor | Цвет линий и подписей диапазонов данных IPDA. |
| InpTextColor | Цвет текста подписей и строки состояния. |
| InpAlertRange | Включает уведомление при формировании нового торгового диапазона. |
| InpAlertOTE | Включает уведомление при входе цены в зону OTE. |
| InpAlertEQ | Включает уведомление при закрытии свечкой через линию равновесия. |
| InpPush | Отправляет уведомления также в виде push-уведомлений. |
| InpEmail | Отправляет уведомления также по электронной почте. |
Поиск по коду файла
#property version "1.00"
#property description "ICT dealing range: premium and discount zones, equilibrium, the OTE band (62 - 79 %, 70.5 %),"
#property description "standard deviation projections and the IPDA 20 / 40 / 60-day ranges."
#property description "Confirmed swings only (no repaint). Alerts and buffers for EAs. Read-only: never trades."
#property indicator_chart_window
#property indicator_buffers 13
#property indicator_plots 13
#property indicator_type1 DRAW_NONE
#property indicator_label1 "Range top"
#property indicator_type2 DRAW_NONE
#property indicator_label2 "Range bottom"
#property indicator_type3 DRAW_NONE
#property indicator_label3 "Equilibrium"
#property indicator_type4 DRAW_NONE
#property indicator_label4 "OTE 62%"
#property indicator_type5 DRAW_NONE
#property indicator_label5 "OTE 79%"
#property indicator_type6 DRAW_NONE
#property indicator_label6 "Leg (+1 up, -1 down)"
#property indicator_type7 DRAW_NONE
#property indicator_label7 "Zone (+1 premium, -1 discount, 2 OTE)"
#property indicator_type8 DRAW_NONE
#property indicator_label8 "IPDA 20 high"
#property indicator_type9 DRAW_NONE
#property indicator_label9 "IPDA 20 low"
#property indicator_type10 DRAW_NONE
#property indicator_label10 "IPDA 40 high"
#property indicator_type11 DRAW_NONE
#property indicator_label11 "IPDA 40 low"
#property indicator_type12 DRAW_NONE
#property indicator_label12 "IPDA 60 high"
#property indicator_type13 DRAW_NONE
#property indicator_label13 "IPDA 60 low"
input int InpSwing = 10; // Swing strength (candles on each side)
input bool InpOTE = true; // OTE band (62 - 79 %) and the 70.5 % line
input bool InpFibs = false; // More retracements (23.6, 38.2, 61.8, 78.6 %)
input bool InpDeviations = true; // Standard deviation projections
input string InpDevLevels = "-1,-2,-2.5,-4"; // Deviations (in range heights)
input bool InpIPDA20 = true; // IPDA 20-day range
input bool InpIPDA40 = true; // IPDA 40-day range
input bool InpIPDA60 = true; // IPDA 60-day range
input int InpBars = 3000; // Bars to scan
input bool InpLabels = true; // Names and prices at the right edge
input bool InpStatus = true; // Status line in the chart corner
input color InpPremiumColor = C'252,222,222'; // Premium colour
input color InpDiscountColor = C'214,240,221'; // Discount colour
input color InpOTEColor = C'255,236,186'; // OTE colour
input color InpLineColor = clrDimGray; // Equilibrium and 70.5 % colour
input color InpDevColor = C'105,105,190'; // Deviation colour
input color InpIPDAColor = C'120,140,170'; // IPDA colour
input color InpTextColor = clrDimGray; // Text colour
input bool InpAlertRange = false; // Alert on a new dealing range
input bool InpAlertOTE = false; // Alert when price comes into the OTE band
input bool InpAlertEQ = false; // Alert when a candle closes across equilibrium
input bool InpPush = false; // Alerts also as push notification
input bool InpEmail = false; // Alerts also by e-mail
#define PREFIX "PDOTE_"
#define MAX_DEVS 8
#define DAYS_KEPT 70
struct Levels
{
bool ok;
double top;
double bottom;
int topIdx;
int botIdx;
int leg; // +1 up, -1 down
double eq;
double o62;
double o705;
double o79;
};
double g_bTop[], g_bBot[], g_bEq[], g_b62[], g_b79[], g_bLeg[], g_bZone[];
double g_b20h[], g_b20l[], g_b40h[], g_b40l[], g_b60h[], g_b60l[];
double g_dev[MAX_DEVS];
int g_devN = 0;
int g_lastClosed = -1;
datetime g_closedTime = 0;
bool g_live = false;
bool g_dirty = true;
datetime g_lastBar = 0;
uint g_drawTick = 0;
string g_drawn[];
int g_shIdx = -1, g_slIdx = -1;
int g_anchor = -1;
double g_rTop = 0, g_rBot = 0;
int g_topIdx = -1, g_botIdx = -1;
bool g_oteTouched = false;
int g_side = 0;
double g_dHi[], g_dLo[];
datetime g_dStart[];
int g_dn = 0;
datetime g_curDay = 0, g_curStart = 0;
double g_curHi = 0, g_curLo = 0;
bool g_curEvening = false;
int g_dayIdx = -1; // last candle added to the days
double g_ipH[3], g_ipL[3];
datetime g_ipT[3];
int g_ipDays[3] = {20, 40, 60};
Levels g_shown;
int g_shownAnchor = -2;
string g_status = "";
bool g_draw = true; // false in a Strategy Tester run without visualization
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0, PREFIX);
ChartRedraw();
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_CHART_CHANGE)
g_dirty = true;
}
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
const double &open[], const double &high[], const double &low[], const double &close[],
const long &tick_volume[], const long &volume[], const int &spread[])
{
// код доступен только после оплаты
}
bool ConfirmSwing(const int k, const double &high[], const double &low[])
{
int p = k - InpSwing;
if(p - InpSwing < 0)
return false;
bool isHigh = true, isLow = true;
for(int j = 1; j <= InpSwing && (isHigh || isLow); j++)
{
if(high[p] <= high[p - j] || high[p] < high[p + j])
isHigh = false;
if(low[p] >= low[p - j] || low[p] > low[p + j])
isLow = false;
}
if(isHigh)
g_shIdx = p;
if(isLow)
g_slIdx = p;
if(!(isHigh || isLow) || g_shIdx < 0 || g_slIdx < 0)
return false;
int a = MathMin(g_shIdx, g_slIdx);
if(a == g_anchor)
return false;
g_anchor = a;
g_rTop = high[a];
g_rBot = low[a];
g_topIdx = a;
g_botIdx = a;
for(int i = a + 1; i <= k; i++)
{
if(high[i] > g_rTop)
{
g_rTop = high[i];
g_topIdx = i;
}
if(low[i] < g_rBot)
{
g_rBot = low[i];
g_botIdx = i;
}
}
return true;
}
void MakeLevels(Levels &v)
{
v.ok = false;
if(g_anchor < 0)
return;
v.top = g_rTop;
v.bottom = g_rBot;
v.topIdx = g_topIdx;
v.botIdx = g_botIdx;
FillLevels(v);
}
void FillLevels(Levels &v)
{
double r = v.top - v.bottom;
v.ok = (r > 0);
if(!v.ok)
return;
v.leg = (v.botIdx <= v.topIdx ? 1 : -1);
v.eq = v.bottom + r * 0.5;
if(v.leg > 0)
{
v.o62 = v.top - r * 0.62;
v.o705 = v.top - r * 0.705;
v.o79 = v.top - r * 0.79;
}
else
{
v.o62 = v.bottom + r * 0.62;
v.o705 = v.bottom + r * 0.705;
v.o79 = v.bottom + r * 0.79;
}
}
int Zone(const Levels &v, const double price)
{
double tol = _Point * 0.005;
int zone = (price > v.eq + tol ? 1 : (price < v.eq - tol ? -1 : 0));
if(price >= MathMin(v.o62, v.o79) - tol && price <= MathMax(v.o62, v.o79) + tol)
zone *= 2;
return zone;
}
bool Same(const Levels &a, const Levels &b)
{
if(a.ok != b.ok)
return false;
if(!a.ok)
return true;
return (a.top == b.top && a.boПоказано первые 50% кода (символов: 18892)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.