Освоение быстрых сделок: Преодоление паралича исполнения
Введение
Эта статья предназначена как для скальперов, так и для трейдеров, которым необходимо быстро принимать решения и совершать сделки. Она также пригодится для трейдеров, страдающих от паралича исполнения или чрезмерного анализа при поиске точки входа в сделку, в результате чего упускают всю возможность, потому что не решаются нажать кнопку и войти в сделку Я считаю, что в большинстве случаев, если не всегда, быстрое исполнение сделок и оперативное проведение операций могут стать решающим фактором, определяющим успех или неудачу между трейдером А и трейдером Б, обладающих одинаковым уровнем мастерства и опыта. Для трейдера крайне важно принимать быстрые, мгновенные решения в торговле, особенно при скальпинге и краткосрочных сделках, поскольку задержка даже в несколько секунд/минут может привести к значительным убыткам, а своевременное исполнение ордеров может принести дополнительные сотни, если не тысячи долларов прибыли.
Как трейдер, я знаю, что трейдеры сталкиваются с бесчисленными трудностями, новыми психологическими и техническими барьерами, которые нам приходится преодолевать каждый раз, когда мы открываем или совершаем новую сделку. На самом деле, большинство трейдеров сталкиваются с почти одинаковыми, если не идентичными, проблемами на каком-то этапе своей торговой карьеры, но всех их отличает то, что разные трейдеры по-разному справляются с этими проблемами, реагируют на них и предвидят их; отсюда и разница в результатах торговли, которая оказывается колоссальной, даже когда трейдеры, примерно равные по уровню мастерства, опыту, выдержке, принятию решений и технике, отличаются друг от друга лишь незначительными различиями.
Одна из основных психологических проблем заключается в том, что для большинства, если не для всех, трейдеров, следящих за ценой, наступает момент, когда они сталкиваются с этим знакомым демоном: они отслеживают, предвидят, анализируют и, наконец, обнаруживают торговую возможность, будучи уверенными в ее прибыльности. Однако в глубине души их тревожит голос, говорящий: а вдруг они ошиблись? А что, если они потеряют деньги? В конце концов, эти сомнения в себе и неуверенность берут верх, они впадают в паралич исполнения и не вступают в сделку, и, конечно же, сделка в итоге движется в их направлении, но без их участия. Это вызывает ряд сожалений и грубых ошибок.
В результате трейдеры начинают входить в рынок импульсивно, открывая позиции в неудачных точках под влиянием FOMO и стремления к мести, что в конечном итоге приводит к еще большим ошибкам и, в итоге, к потере денег. Все это вызвано неуверенностью в себе, сомнениями и голосом, нашептывающим негативные мысли.
Этот индикатор призван решить эту проблему, выступая как визуальное подтверждение на графике, которое словно говорит трейдеру: вход оправдан и вы можете совершить сделку без всяких сомнений. Кроме того, его можно использовать в качестве предупреждения о выходе, чтобы избежать разворотов и консолидации.

Рис. 1. Иллюстрации UT B0T, построенные на таймфрейме H4 графика
Введение в индикатор UT Bot
Теперь, когда мы рассмотрели и определили общую проблему, с которой постоянно сталкиваются многие трейдеры по всему миру, я хотел бы категорически заявить, что трейдерам следует меньше беспокоиться и больше не говорить, потому что сегодня я хочу представить этот необычный пользовательский индикатор, который принесет наибольшую пользу трейдерам, предпочитающим скальпинг и быстрое исполнение краткосрочных ордеров. Этот настраиваемый индикатор генерирует сигналы, точки входа и выхода, а также имеет линию трейлинг-стоп-лосса, которая может служить точкой выхода в случае ошибки или для фиксации прибыли.
Еще одна группа пользователей, которым этот индикатор будет особенно полезен, — трейдеры, находящиеся на этапе становления и оттачивающие свои навыки. Этот индикатор можно использовать вместе с их техникой, стилем и методом торговли в качестве инструмента подтверждения входа в сделку и выхода из нее. Как только индикатор и его торговая методика согласуются и дают одинаковую информацию, он может совершать сделки. В конце концов, трейдер обретет уверенность в себе и своей методике. Его также можно использовать в качестве общего инструмента подтверждения даже для опытных трейдеров, которые хотят иметь дополнительный инструмент контроля и подтверждения своих торговых решений.

Рис. 2 Отображение индикатора UT BOT на минутном графике
Внутренняя работа индикатора UT bot
Цель этой статьи — предоставить читателю персонализированного UT Bot, который сканирует рынок и текущую торговую цену, а также дает представление о тренде и подсказывает оптимальные точки входа/исполнения в соответствии со средним истинным диапазоном и трендом. Это означает, что он сможет совершать быстрые сделки и быстро их исполнять с минимальным временем анализа, а также заниматься скальпингом с мгновенной реакцией и использовать линию трейлинг-стоп-лосса для выхода из сделок.
Индикатор UT BOT — это, по сути, индикатор следования за трендом, предназначенный для генерации сигналов на покупку и продажу в потенциальных точках входа на графике на основе ценового движения и относительно скорректированного по волатильности и динамического трейлинг-стоп-лосса. Трейлинг-стоп-лосс (скользящий стоп-лосс) корректируется с использованием среднего истинного диапазона (ATR). В своей основной логике UT BOT не использует традиционные скользящие средние, а применяет однопериодную экспоненциальную скользящую среднюю для обнаружения пересечения на текущих ценах. Индикатор генерирует сигналы в потенциальных точках входа, используя следующие методы. Он выводит на график:
- зеленые стрелки под барами для сигналов на покупку ("UT Long");
- красные стрелки над барами для сигналов на продажу ("UT Short");
- синяя линия, обозначающая уровень трейлинг-стопа;
- оповещения для получения уведомлений в режиме реального времени о появлении сигналов.
Этот индикатор можно использовать для любого класса активов (металлы, форекс, индексы, сырьевые товары), и он генерирует сигналы на всех таймфреймах. Самое лучшее и самое важное в этом индикаторе то, что его можно настроить индивидуально в соответствии с предпочтениями трейдера. Период, чувствительность и сглаживание сигнала - вот некоторые из настраиваемых функций. UT BOT использует средний истинный диапазон (ATR), часто используемый в качестве показателя волатильности рынка, для расчета трейлинг-стоп-лосса, являющегося основным методом, используемым индикатором. Еще одно преимущество среднего истинного диапазона (ATR) заключается в том, что UT BOT адаптируется к волатильности, избегая ложных сигналов на нестабильных рынках, и использует простую, надежную логику без перерисовки.
UT BOT использует элементарную торговую логику и формулу генерации сигналов, поскольку для работы требуется лишь пересечение ценой скользящего стоп-лосса, а не сложные взаимодействия со скользящими средними, что делает его быстрее и менее подверженным переобучению.
UT BOT использует средний истинный диапазон (ATR) для динамической корректировки расстояния трейлинг-стопа от текущей торговой цены, что делает его гибким и позволяет быстро реагировать на постоянно меняющиеся рыночные условия. Вот как это работает:
- Вычисление ATR:
- ATR измеряет средний диапазон цен (максимум-минимум) за определенный трейдером период (c, по умолчанию 10 баров).
- Для установки смещения трейлинг‑стоп-лосса (nLoss = a * ATR) значение умножается на коэффициент чувствительности (a, по умолчанию 1,0).
- Пример: Если ATR = 0,0010 (10 пипсов) и a = 1,0, то трейлинг‑стоп-лосс находится на расстоянии 10 пипсов от цены.
- Логика трейлинг-стоп-лосса:
- Трейлинг-стоп-лосс (трейл) следует за ценой, корректируясь в зависимости от того, движется ли цена вверх или вниз.
- Восходящий тренд: Если текущая цена (src) и предыдущая цена (src1) выше предыдущего трейлинг-стоп-лосса (trail[i-1]), стоп-лосс перемещается вверх до max(trail[i-1], src - nLoss). Это позволяет зафиксировать прибыль, оставаясь при этом ниже цены.
- Нисходящий тренд: Если обе цены ниже предыдущего стоп-лосса, он перемещается вниз к min(trail[i-1], src + nLoss).
- Изменение направления:
- Если цена пересечет над предыдущим стопом (src > trail[i-1]), стоп сбросится до src - nLoss.
- Если же пересечет под ним, стоп сбросится до src + nLoss.
- Это создает «ступенчатую» линию, которая адаптируется к движениям цен, оставаясь ближе на рынках с низкой волатильностью и шире на рынках с высокой волатильностью.
- Трейлинг-стоп-лосс (трейл) следует за ценой, корректируясь в зависимости от того, движется ли цена вверх или вниз.
- Источник цен:
- По умолчанию цена (src) — это цена закрытия каждого бара (close[i]).
- Если включена опция Heikin Ashi (h = true), она использует цены закрытия Heikin Ashi, которые сглаживают колебания цен для получения более точных сигналов.
- Генерация сигналов:
- Сигналы основаны на пересечениях цены относительно трейлинг-стопа:
- Сигнал на покупку ("UT Long"): возникает, когда текущая цена пересекает уровень трейлинг-стопа снизу вверх (src > trail_curr && src1 <= trail1).
- Сигнал на продажу ("UT Short»): возникает, когда текущая цена пересекает уровень трейлинг-стопа сверху вниз (trail_curr > src && trail1 <= src1).
- В оригинальном коде Pine Script для подтверждения пересечений используется однопериодная экспоненциальная скользящая средняя EMA (ema = src), но на практике она эквивалентна цене закрытия, поэтому в коде MQL5 это упрощается за счет прямого использования src.
- Сигналы основаны на пересечениях цены относительно трейлинг-стопа:

Рис. 3. График H1, показывающий графическое отображение индикатора UT BOT
Автоматизация торговых решений с помощью UT Bot на MQL5
Чтобы автоматизировать, проиллюстрировать и реализовать эту стратегию, я создал:
- Индикатор UT Bot для анализа трендов, определения возможных точек входа в сделку, а также построения сигналов на покупку/продажу на графиках.
- Индикатор UT + советник UT Bot для торговли на основе направлений точек входа в сделку, с помощью индикатора UT, включающего ATR и EMA для точек входа.
Процесс принятия решений
Решения, принимаемые этим индикатором (построение стрелок, рисование линии трейлинг-стопа и срабатывание оповещений), основаны на следующей логике:
- Расчет трейлинг-стопа
- Для каждого бара индикатор рассчитывает trail[i] на основе текущей цены (src), предыдущей цены (src1) и предыдущего трейлинг-стопа (trail[i-1]). Смещение на основе ATR (nLoss) обеспечивает адаптацию стоп-лосса к волатильности, уменьшая количество ложных сигналов на нестабильных рынках.
// Initialize first trailing stop value trail[0] = calculate_ha ? ha_close[0] : close[0]; // Trailing stop and position calculation for (int i = 1; i < rates_total; i++) { double src = calculate_ha ? ha_close[i] : close[i]; double src1 = calculate_ha ? ha_close[i - 1] : close[i - 1]; double nLoss = a * atr[i]; if (src > trail[i - 1] && src1 > trail[i - 1]) trail[i] = MathMax(trail[i - 1], src - nLoss); else if (src < trail[i - 1] && src1 < trail[i - 1]) trail[i] = MathMin(trail[i - 1], src + nLoss); else if (src > trail[i - 1]) trail[i] = src - nLoss; else trail[i] = src + nLoss; if (src1 < trail[i - 1] && src > trail[i - 1]) pos_arr[i] = 1.0; else if (src1 > trail[i - 1] && src < trail[i - 1]) pos_arr[i] = -1.0; else pos_arr[i] = pos_arr[i - 1]; Print("Bar ", i, ": src=", src, ", trail=", trail[i], ", pos=", pos_arr[i]); } ArrayResize(BuyBuffer, rates_total); ArrayResize(SellBuffer, rates_total); ArrayResize(TrailBuffer, rates_total); ArrayInitialize(BuyBuffer, EMPTY_VALUE); ArrayInitialize(SellBuffer, EMPTY_VALUE); ArrayInitialize(TrailBuffer, EMPTY_VALUE); // Signal and trailing stop plotting for (int i = 1; i < rates_total; i++) { double src = calculate_ha ? ha_close[i] : close[i]; double src1 = calculate_ha ? ha_close[i - 1] : close[i - 1]; double trail_curr = trail[i]; double trail1 = trail[i - 1]; bool above = (src > trail_curr) && (src1 <= trail1); bool below = (trail_curr > src) && (trail1 <= src1); bool buy_signal = above; // Simplified to ensure signals bool sell_signal = below; if (buy_signal) { BuyBuffer[i] = low[i] - Point() * 10; // Offset for visibility Print("Buy signal at bar ", i, ", time: ", TimeToString(time[i]), ", low: ", low[i]); } if (sell_signal) { SellBuffer[i] = high[i] + Point() * 10; // Offset for visibility Print("Sell signal at bar ", i, ", time: ", TimeToString(time[i]), ", high: ", high[i]); } TrailBuffer[i] = trail[i]; if (trail[i] != EMPTY_VALUE) Print("Trailing stop at bar ", i, ": ", trail[i]); }
- Отслеживание позиций:
- Массив pos_arr отслеживает направление тренда:
- pos = 1.0 (long) когда цена пересекает трейлинг-стоп сверху вниз.
- pos = -1.0 (short) когда она пересекает снизу вверх.
- pos = предыдущая pos. В противном случае сохраняется непрерывность тренда.
- Это неприменимо для использования при построении графиков в версии MQL5 (из-за ограничения одноцветности графиков в MetaTrader 5), но помогает генерировать сигналы.
double trail[]; double pos_arr[]; ArrayResize(trail, rates_total); ArrayResize(pos_arr, rates_total); ArraySetAsSeries(trail, false); ArraySetAsSeries(pos_arr, false); ArrayInitialize(trail, EMPTY_VALUE); ArrayInitialize(pos_arr, 0.0);
- Обнаружение сигналов:
- Сигнал на покупку возникает, когда цена пересекает уровень трейлинг-стопа снизу вверх (выше = src > trail_curr && src1 <= trail1).
- Сигнал на продажу возникает, когда цена пересекает трейлинг-стоп сверху вниз (ниже = trail_curr > src && trail1 <= src1).
- Эти точки пересечения гарантируют генерацию сигналов только при подтвержденных изменениях тренда, что снижает уровень шума.
// Trailing stop and position calculation for (int i = 1; i < rates_total; i++) { double src = calculate_ha ? ha_close[i] : close[i]; double src1 = calculate_ha ? ha_close[i - 1] : close[i - 1]; double nLoss = a * atr[i]; if (src > trail[i - 1] && src1 > trail[i - 1]) trail[i] = MathMax(trail[i - 1], src - nLoss); else if (src < trail[i - 1] && src1 < trail[i - 1]) trail[i] = MathMin(trail[i - 1], src + nLoss); else if (src > trail[i - 1]) trail[i] = src - nLoss; else trail[i] = src + nLoss; if (src1 < trail[i - 1] && src > trail[i - 1]) pos_arr[i] = 1.0; else if (src1 > trail[i - 1] && src < trail[i - 1]) pos_arr[i] = -1.0; else pos_arr[i] = pos_arr[i - 1]; Print("Bar ", i, ": src=", src, ", trail=", trail[i], ", pos=", pos_arr[i]); } ArrayResize(BuyBuffer, rates_total); ArrayResize(SellBuffer, rates_total); ArrayResize(TrailBuffer, rates_total); ArrayInitialize(BuyBuffer, EMPTY_VALUE); ArrayInitialize(SellBuffer, EMPTY_VALUE); ArrayInitialize(TrailBuffer, EMPTY_VALUE);
- Графическое представление данных и оповещения:
- Покупка: Отображает зеленую стрелку ниже минимума бара при срабатывании сигнала на покупку.
- Продажа: Отображает красную стрелку выше максимума бара при срабатывании сигнала на продажу.
- Трейлинг-стоп: Отображает значение trail[i] в виде синей линии для каждого бара.
- Оповещения: Запускает оповещения "UT Long" или "UT Short" на последнем баре при появлении нового сигнала; это проверяется по временной метке бара, чтобы избежать дублирования.
// Signal and trailing stop plotting
for (int i = 1; i < rates_total; i++)
{
double src = calculate_ha ? ha_close[i] : close[i];
double src1 = calculate_ha ? ha_close[i - 1] : close[i - 1];
double trail_curr = trail[i];
double trail1 = trail[i - 1];
bool above = (src > trail_curr) && (src1 <= trail1);
bool below = (trail_curr > src) && (trail1 <= src1);
bool buy_signal = above; // Simplified to ensure signals
bool sell_signal = below;
if (buy_signal)
{
BuyBuffer[i] = low[i] - Point() * 10; // Offset for visibility
Print("Buy signal at bar ", i, ", time: ", TimeToString(time[i]), ", low: ", low[i]);
}
if (sell_signal)
{
SellBuffer[i] = high[i] + Point() * 10; // Offset for visibility
Print("Sell signal at bar ", i, ", time: ", TimeToString(time[i]), ", high: ", high[i]);
}
TrailBuffer[i] = trail[i];
if (trail[i] != EMPTY_VALUE)
Print("Trailing stop at bar ", i, ": ", trail[i]);
}
// Alerts on the latest bar
if (rates_total > 1)
{
int i = rates_total - 1;
double src = calculate_ha ? ha_close[i] : close[i];
double src1 = calculate_ha ? ha_close[i - 1] : close[i - 1];
double trail_curr = trail[i];
double trail1 = trail[i - 1];
bool above = (src > trail_curr) && (src1 <= trail1);
bool below = (trail_curr > src) && (trail1 <= src1);
bool buy_signal = above;
bool sell_signal = below;
static datetime last_time = 0;
if (time[i] != last_time)
{
if (buy_signal)
{
Alert("UT Long at ", TimeToString(time[i]));
Print("UT Long alert triggered at ", TimeToString(time[i]));
}
if (sell_signal)
{
Alert("UT Short at ", TimeToString(time[i]));
Print("UT Short alert triggered at ", TimeToString(time[i]));
}
last_time = time[i];
}
}
return rates_total;
} Этот индикатор анализирует, обнаруживает и строит сигналы со стрелками на покупку/продажу, отслеживая пересечения тренда и скользящей средней для возможных входов в сделку, а также строит линию стоп-лосса для отображения точек выхода.
#property copyright "UT BOT ATR Trailing System" #property version "1.00" #property description "Converted from Pine Script to MQL5 with Trailing Stop Line" #property indicator_chart_window #property indicator_buffers 3 #property indicator_plots 3 #property indicator_label1 "Buy" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_label2 "Sell" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 2 #property indicator_label3 "Trailing Stop" #property indicator_type3 DRAW_LINE #property indicator_color3 clrBlue #property indicator_style3 STYLE_SOLID #property indicator_width3 2 input double a = 1.0; // Key Value. 'This changes the sensitivity' input int c = 10; // ATR Period input bool h = false; // Signals from Heikin Ashi Candles double BuyBuffer[]; double SellBuffer[]; double TrailBuffer[]; int atr_handle; double ha_open[], ha_high[], ha_low[], ha_close[]; bool calculate_ha = false; int OnInit() { SetIndexBuffer(0, BuyBuffer, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_ARROW, 233); // Up arrow PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE); SetIndexBuffer(1, SellBuffer, INDICATOR_DATA); PlotIndexSetInteger(1, PLOT_ARROW, 234); // Down arrow PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE); SetIndexBuffer(2, TrailBuffer, INDICATOR_DATA); PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, EMPTY_VALUE); atr_handle = iATR(_Symbol, PERIOD_CURRENT, c); if (atr_handle == INVALID_HANDLE) { Print("Failed to create ATR handle"); return INIT_FAILED; } calculate_ha = h; ArraySetAsSeries(BuyBuffer, false); ArraySetAsSeries(SellBuffer, false); ArraySetAsSeries(TrailBuffer, false); Print("Indicator initialized. Symbol: ", _Symbol, ", Timeframe: ", Period()); return INIT_SUCCEEDED; } void OnDeinit(const int reason) { if (atr_handle != INVALID_HANDLE) IndicatorRelease(atr_handle); } 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[]) { if (rates_total < c + 2) { Print("Not enough bars: ", rates_total, " (need ", c + 2, ")"); return 0; } ArraySetAsSeries(open, false); ArraySetAsSeries(high, false); ArraySetAsSeries(low, false); ArraySetAsSeries(close, false); ArraySetAsSeries(time, false); double atr[]; ArrayResize(atr, rates_total); ArraySetAsSeries(atr, false); if (CopyBuffer(atr_handle, 0, 0, rates_total, atr) != rates_total) { Print("Failed to copy ATR buffer"); return 0; }
Установка: Скомпилируем в MetaEditor и прикрепим к графику. Зелеными стрелками обозначены точки входа в сделку при бычьем тренде, красными — при медвежьем.
Пример использования: На GOLD M15/H1 он отображает стрелки и линию трейлинг-стопа на основном графике для визуального анализа и представления.
Исходный код советника UT bot
Этот советник обнаруживает торговые сигналы от индикатора и интерпретирует их в зависимости от направления тренда и сигнальных точек для входа в сделку, проверяет средний истинный диапазон для определения уровней стоп-лосса и открывает сделки. Он включает в себя управление рисками (2% риска на сделку).
Настраиваемые параметры для советника
Этот раздел входных параметров позволяет трейдерам настраивать поведение советника без изменения кода. Для торговых пар GBPUSD и GBPJPY я снизил показатель RiskPct до 1,0%, чтобы ограничить потенциальные убытки по каждой сделке и предотвратить значительные просадки в условиях умеренной волатильности этих пар. Значение ATR_Prd установлено на 10 для более быстрого расчета волатильности, поскольку GBPUSD и GBPJPY демонстрируют более кратковременные ценовые свинги по сравнению с золотом.
Значение EMA_Prd сокращено до 12, чтобы повысить скорость определения тренда на таймфрейме M15. Продолжительность NewsPause увеличена до 20 минут, чтобы избежать затяжной волатильности, часто наблюдаемой в парах с фунтом стерлингов во время публикации экономических данных Великобритании / США.
Значение MinBrkStr увеличено для обеих пар, чтобы гарантировать совершение сделок только по сильным сигналам, отфильтровывая шум и повышая коэффициент успешных сделок. Функция useHTF включена по умолчанию для согласования сделок с трендами на более высоких таймфреймах, что уменьшает количество ложных сигналов. Параметры MaxSpreadPips и UseDynamicSpread регулируют фильтрацию спредов, что крайне важно для более широких спредов по паре GBPJPY во время азиатских торговых сессий. Для обеспечения строгого управления рисками установлены лимиты просадки в размере 5% в день и 10% в целом, при превышении которых торговля приостанавливается с целью сохранения капитала.
В следующем коде объявляются входные параметры://+------------------------------------------------------------------+ //| UT BOT EA.mq5 | //| EUGENE MMENE | //| https://EMcapital.com | //+------------------------------------------------------------------+ #property copyright "EUGENE MMENE" #property link "https://EMCAPITAL2022" #property version "2.51" #include <Trade\Trade.mqh> #include <Object.mqh> #include <StdLibErr.mqh> #include <Trade\OrderInfo.mqh> #include <Trade\HistoryOrderInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\DealInfo.mqh> input double RiskPct = 1.0; // Reduced risk per trade input double MaxLossUSD = 100.0; input double RecTgt = 7000.0; input int ATR_Prd = 10; // Faster ATR for GBPUSD/GBPJPY input int Brk_Prd = 10; input int EMA_Prd = 12; // Faster EMA for M15 input string GS_Url = ""; input bool NewsFilt = true; input int NewsPause = 60; // Extended news pause input double MinBrkStr_XAUUSD = 0.3; // Not used input double MinBrkStr_GBPUSD = 0.07; // Increased for stronger breakouts input double MinBrkStr_GBPJPY = 0.1; // Increased for GBPJPY volatility input int Vol_Prd = 3; // Increased for volume confirmation input bool Bypass = false; // Enforce breakout strength input bool useHTF = true; // Enable HTF trend filter input string NewsAPI_Url = "https://www.alphavantage.co/query?function=NEWS_SENTIMENT&apikey="; input string NewsAPI_Key = "pub_3f54bba977384ac19b6839a744444aba"; input double DailyDDLimit = 5.0; // Stricter daily drawdown input double OverallDDLimit = 10.0; // Stricter overall drawdown input double TargetBalanceOrEquity = 9000.0; input bool ResetProfitTarget = false; input double MaxLotSize = 4.0; input double MaxSpreadPips = 30.0; // Adjusted for GBPUSD/GBPJPY input bool UseDynamicSpread = true; // Enable dynamic spread input int SpreadAvgPeriod = 5; // Shorter spread averaging
Функция OnInit: Установка и инициализация
Функция OnInit вызывается однократно при загрузке советника. Она проверяет торговые пары (GBPUSD или GBPJPY) и устанавливает минимальную силу пробоя в соответствии с торгуемой парой. Это гарантирует, что UT Bot динамично адаптируется к любой волатильности пары, которая ниже для GBPUSD, чтобы использовать больше возможностей в более узких диапазонах, и выше для пары GBPJPY, чтобы избежать ложных пробоев при резких движениях. Массив таймфреймов разработан таким образом, чтобы фокусироваться исключительно на M15, уменьшая шум от M5 и задержку от H1, что повышает точность сигнала для этих пар.
Такие индикаторы, как ATR (для SL/TP на основе волатильности), volume (для подтверждения) и EMA (для тренда), инициализируются на M15. Для фильтрации тренда загружаются экспоненциальные скользящие средние (EMA) на более высоких таймфреймах, на D1 и H4. Это ключевая адаптация по сравнению с торговлей золотом, где достаточно более низких таймфреймов из-за больших движений цены. Если включена фильтрация новостей, вызывается функция FetchNewsCalendar для загрузки предстоящих событий, что предотвращает совершение сделок в периоды высокой волатильности. Такая настройка гарантирует, что бот будет готов к прибыльной торговле на парах GBPUSD/GBPJPY в соответствии с их рыночной динамикой.
int OnInit() { // Validate symbol and set breakout strength string sym = Symbol(); if(StringFind(TradeSymbol, "GBPUSD") >= 0) { MinBrkStr = MinBrkStr_GBPUSD; } else if(StringFind(TradeSymbol, "GBPJPY") >= 0) { MinBrkStr = MinBrkStr_GBPJPY; } dynBrkStr = MinBrkStr; // Initialize M15 timeframe and indicators ArrayResize(tfs, 1); // Focus on M15 tfs[0].tf = PERIOD_M15; tfs[0].h_atr = iATR(TradeSymbol, tfs[0].tf, ATR_Prd); tfs[0].h_vol = iVolumes(TradeSymbol, tfs[0].tf, VOLUME_TICK); tfs[0].h_vol_ma = iMA(TradeSymbol, tfs[0].tf, Vol_Prd, 0, MODE_SMA, PRICE_CLOSE); h_ema_d1 = iMA(TradeSymbol, PERIOD_D1, EMA_Prd, 0, MODE_EMA, PRICE_CLOSE); h_ema_h4 = iMA(TradeSymbol, PERIOD_H4, EMA_Prd, 0, MODE_EMA, PRICE_CLOSE); if(NewsFilt) FetchNewsCalendar(); return(INIT_SUCCEEDED);
Функция IsTradingTime: Ограничение торговли на основе сессии
Эта функция ограничивает торговлю лондонской и нью-йоркской сессиями (8:00–20:00 GMT, с понедельника по пятницу), которые являются наиболее ликвидными и волатильными периодами для пар GBPUSD и GBPJPY.
Значительный объем торгов парой GBPUSD наблюдается во время перекрытия лондонского (8:00–12:00 GMT) и нью-йоркского (13:00–20:00 GMT) периодов, в то время как пара GBPJPY выигрывает от перекрытия лондонского и токийского периодов, но демонстрирует более высокую волатильность во время пересечения лондонского и нью-йоркского периодов.
Ограничивая торговлю этими часами, UT Bot избегает периодов низкой ликвидности (например, азиатской сессии), которые часто приводят к ложным пробоям и расширению спредов, повышая общую прибыльность и уменьшая просадки. Структура MqlDateTime используется для извлечения текущего часа и дня, обеспечивая точный контроль. Эта адаптация необходима для пар с GBP.
bool IsTradingTime() { MqlDateTime time; TimeCurrent(time); return (time.hour >= 8 && time.hour <= 20 && time.day_of_week >= 1 && time.day_of_week <= 5); }
Функция CalcLots: Динамическое определение размера позиции с контролем рисков
Функция CalcLots рассчитывает размер позиции на основе эквити счета, процента риска и расстояния стоп-лосса в пипсах, гарантируя, что ни для одной сделки риск не превысит 1%. Для пары GBPJPY корректировка значения пипса составляет 0,1, чтобы учесть более высокое значение пипса из-за масштаба JPY, предотвращая чрезмерную подверженность риску; для пары GBPUSD это значение равно 0,5.
Во избежание катастрофических убытков, сумма риска ограничена значением MaxLossUSD. Итеративный цикл уменьшения размера лота сокращает его, если он превышает доступную маржу (с 20% буфером), что позволяет избежать ошибок типа «нет денег», распространенных в волатильных валютных парах, таких как GBPJPY.
Размер лота нормализуется в соответствии с правилами брокера (минимальный/максимальный размер лота). Этот метод способствует последовательному управлению рисками, что имеет решающее значение для долгосрочной прибыльности пары GBPUSD/GBPJPY, где свинги цен менее резкие, чем в случае с золотом.
double CalcLots(double eq, double riskPct, double slPips) { double pipVal = SymbolInfoDouble(TradeSymbol, SYMBOL_TRADE_TICK_VALUE); double pipValAdjust = StringFind(TradeSymbol, "GBPJPY") >= 0 ? 0.1 : 0.5; double riskAmt = MathMin(eq * (riskPct / 100), MaxLossUSD); double lots = (riskAmt / (slPips * pipVal)) * pipValAdjust; double minLot = SymbolInfoDouble(TradeSymbol, SYMBOL_VOLUME_MIN); double maxLot = MathMin(SymbolInfoDouble(TradeSymbol, SYMBOL_VOLUME_MAX), MaxLotSize); double freeMarg = AccountInfoDouble(ACCOUNT_MARGIN_FREE); while(lots > minLot && freeMarg < (SymbolInfoDouble(TradeSymbol, SYMBOL_MARGIN_INITIAL) * lots * 1.2)) { lots *= 0.8; // Reduce lot size iteratively } lots = NormalizeDouble(MathMax(minLot, MathMin(maxLot, lots)), 2); return lots; }
Установка и тестирование на истории: Скомпилируем в MetaEditor и прикрепим к графику. Тестирование на истории на паре GBPUSD/GBPJPY M15 (2025) с 2% риском.
Тестирование стратегии
Индикатор оптимально работает с любым классом активов благодаря относительно быстрому обнаружению движений для оперативного принятия решений и адаптации к высокой волатильности, что выгодно для скальперов и розничной внутридневной торговли. Мы протестируем этот индикатор, торгуя ЗОЛОТОМ с 1 января 2025 года по 1 апреля 2025 года на 60-минутном таймфрейме (H1), чтобы показать, как он отображается на графике. Вот параметры, выбранные нами для этой стратегии.


Тестирование стратегии на советнике UT Bot
Эта стратегия наиболее эффективна для большинства, если не для всех, валютных пар благодаря относительно быстрой адаптации к трендам и высокой волатильности, что выгодно для внутридневной торговли розничных инвесторов, особенно для скальпинга. Мы протестируем эту стратегию, торгуя на паре GBPJPY с 1 января 2025 года по 1 апреля 2025 года на 15-минутном таймфрейме (M15). Вот параметры, выбранные нами для этой стратегии.
GBPJPY

GBPUSD


Результаты тестера стратегий
После тестирования в тестере стратегий, вот результаты того, как он работает, анализирует и строит точки входа в сделку с помощью стрелок, а также линии стоп-лосса.

Рис.4. Построение графика сигнала и трейлинг-стопа

Результаты тестера стратегий на советнике UT Bot
График баланса/эквити: GBPJPY

GBPUSD

Результаты тестирования на истории: GBPJPY

GBPUSD

Итоги
Я написал эту статью, чтобы попытаться объяснить индикатор MetaTrader 5, который сочетает в себе использование среднего истинного диапазона (ATR) и экспоненциальной скользящей средней для определения высоковероятностных торговых установок по ЗОЛОТУ, а также возможных точек выхода, которые могут быть либо зонами профит-тейкинга, либо зонами стоп-лосса. Этот индикатор UT BOT является одной из самых ценных и революционных концепций для торговли и генерации сигналов, используемых для отслеживания возможных входов в торговую цену и изменений тренда.
Я протестировал индикатор на ЗОЛОТЕ, GBPUSD и GBPJPY, и он показал свою способность эффективно и точно определять возможные входы в сделку на любом таймфрейме, но определение точки входа в сделку - это только часть уравнения, потому что, если на скользящей средней нет пересечения, индикатор не распознает это как возможный вход в сделку или сценарий. И тогда сделки не должны совершаться там, даже если произойдет внезапный скачок цены. Эти пересечения скользящих средних являются подтверждением, которое помогает повысить точность и качество торговли во время волатильных сессий.
Чтобы реализовать эту стратегию использования индикатора, настройте входные параметры индикатора, как показано ниже, для получения желаемых результатов. Индикатор предназначен для поиска возможных входов в сделку на любом таймфрейме, который трейдер выбирает для просмотра, от M1 до MN, обеспечивая соответствие возможных точек входа в сделку пересечению тренда и скользящей средней, а также среднему истинному диапазону. Заинтересованные пользователи должны выполнить бэктест этого индикатора на своих демо-счетах с каким-либо активом или валютной парой. Основная задача и цель этого индикатора заключались в его оптимизации для быстрых и оперативных решений и высоковероятных сетапов, возникающих на младших таймфреймах и особенно интересных скальперам, а также в интеграции управления рисками с помощью реализованных трейлинг-стопов.
Я бы также посоветовал пользователям регулярно просматривать логи, чтобы корректировать настройки и входные параметры в зависимости от целей, класса активов или склонности к риску. Отказ от ответственности: Любой, кто использует этот индикатор, должен сначала протестировать его и начать торговать на своем демо-счете, чтобы освоить этот подход к скальпингу и получать стабильную прибыль, прежде чем рисковать реальными средствами.
Заключение
Основной вывод и акцент этой статьи состоит в том, чтобы попытаться четко объяснить и решить проблемы, с которыми трейдеры сталкиваются ежедневно при совершении сделок. Это такие проблемы, как неуверенность в себе, паралич анализа, а также необходимость быстрого совершения сделок и принятия решений, где бы они ни происходили и когда бы они ни происходили. В статье четко указано, как UT BOT пытается устранить эти ограничения и сделать торговый процесс заметно более простым, и как его можно идеально использовать для анализа, понимания, подтверждения и даже совершения сделок, используя его быстрый и надежный инструмент генерации торговых сигналов.
Большинство экспертов, начинающих трейдеров и даже некоторые трейдеры среднего уровня не имеют ни малейшего представления о том, как ориентироваться в этом мрачном мире скальпинга, и даже разочаровываются в технике, поскольку они не в состоянии по-настоящему понять, что там происходит, или даже не обладают проницательностью, чтобы понять, как всегда движется цена и как она использует привычные паттерны или скользящие средние для совершения классических сделок и их исполнения, которые на самом деле могут быть прибыльными для них в краткосрочной перспективе, что происходит часто, в отличие от долгосрочной торговли и позиционных трейдеров. И даже если они не будут совершать сделки на основе сигналов индикатора, трейдеры смогут проверять свои торговые идеи, позиции и сетапы, а также даже тренд и направление относительно того, чем я поделился в этой статье. Им будет очень интересно, как UT BOT может играть очень важную роль в генерации сигнала.
Автоматизируя этот генерирующий сигналы индикатор с помощью MQL5, трейдеры снижают эмоциональную предубежденность, паралич анализа и неуверенность в себе, обеспечивая последовательное исполнение генерируемых торговых сигналов с помощью этой стратегии скальпинга, которая также очень хорошо работает для долгосрочной/ позиционной торговли.
Весь код, на который мы ссылаемся в настоящей статье, прилагается ниже. В следующей таблице описаны все файлы исходного кода, которые прилагаются к статье.
| Название файла | Описание |
|---|---|
| UT BOT.mq5 | Файл, содержащий полный исходный код индикатора UT BOT. |
| UT BOT EA.mq5 | Файл, содержащий полный исходный код полностью скомбинированного советника UT BOT. |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/19576
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Создание интеллектуального торгового менеджера в MQL5: Автоматический перевод в безубыток, трейлинг-стоп и частичное закрытие позиции
Статистический арбитраж на основе коинтегрированных акций (Часть 10): Обнаружение структурных разрывов
Интеграция MQL5 с пакетами обработки данных (Часть 5): Адаптивное обучение и гибкость
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ознакомьтесь с новой статьей: Mastering Quick Trades: Преодоление паралича исполнения.
Автор: Юджин Ммене
Чрезвычайно полезный Евгений, отличная адаптация, primo confluence