Обсуждение статьи "Автоматизация торговых стратегий на MQL5 (Часть 24): Система торговли на пробое лондонской сессии с риск-менеджментом и трейлинг-стопами"

 

Опубликована статья Автоматизация торговых стратегий на MQL5 (Часть 24): Система торговли на пробое лондонской сессии с риск-менеджментом и трейлинг-стопами:

В этой статье мы разработаем систему анализа пробоев на Лондонской сессии, которая будет определять пробои диапазона перед открытием сессии и выставлять отложенные ордера с настройкой типа сделок и параметров риска. Мы реализуем в системе трейлинг-стоп, соотношение риска и прибыли, контроль максимальной просадки, а также панель управления для мониторинга в режиме реального времени.

Стратегия пробоя лондонской сессии работает на повышенной волатильности при открытии лондонского рынка. Она определяет ценовой диапазон, сформированный в часы до открытия Лондона, и выставляет отложенные ордера на пробой этого диапазона. В лондонскую сессию часто наблюдаются высокая ликвидность и значительные ценовые движения, что дает неплохие возможности для получения прибыли. Однако стратегия требует тщательного управления рисками для защиты от ложных пробоев и просадок.

Для такой защиты мы будем рассчитывать максимум и минимум до лондонской сессии для установки ордеров buy stop и sell stop с отступами, добавляя соотношение риск/прибыль для тейк-профитов, трейлинг-стопы для фиксации прибыли и ограничения на количество открытых сделок и дневную просадку для защиты капитала. Также будем использовать панель управления для мониторинга в реальном времени и проверок сессии, чтобы сделки совершались только в заданных диапазонах, а сама система при этому будет адаптивной к различным рыночным условиям. Ниже представлена концепция системы, которую мы будем реализовывать.

СТРУКТУРА СТРАТЕГИИ


Автор: Allan Munene Mutiiria

 
etherxp #:
Спасибо;)

Добро пожаловать

[Удален]  
Можете ли вы загрузить индикатор сюда?
 
hungxiro #:
Вы можете загрузить индикатор сюда?

Просмотрите статью выше, пожалуйста.

 
Отличная статья. Спасибо за ваши усилия!
 
Kyle Young Sangster #:
Отличная статья. Спасибо за ваши усилия!

Конечно. Спасибо за добрый отзыв. Добро пожаловать.

 

Я загрузил и прогнал этот код как есть через тестер стратегий. Он находит диапазон каждый день и рисует рамку на графике. Однако он не совершает сделок каждый день (предполагается, что он должен совершать сделки). За 1,5 месяца он совершил всего 3 сделки.


торговый рекорд


Вторая проблема заключается в том, что уровни high / low и уровни buy / sell в панели управления не обновляются.

Панель управления не обновляется


Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, поскольку они получены непосредственно из уровней высокого / низкого диапазона.

Какие у вас есть предложения, чтобы заставить это работать правильно?

Заранее спасибо.

 
Kyle Young Sangster тестер стратегий. Он находит диапазон каждый день и рисует рамку на графике. Однако он не совершает сделок каждый день (предполагается, что он должен совершать сделки). За 1,5 месяца он совершил всего 3 сделки.



Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.


Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.

Какие у вас есть предложения, чтобы заставить это работать правильно?

Заранее спасибо.

Не могу отредактировать свой комментарий; я использую версию 5.00, сборка 5214 MT5

 
Kyle Young Sangster тестер стратегий. Он находит диапазон каждый день и рисует рамку на графике. Однако он не совершает сделок каждый день (предполагается, что он должен совершать сделки). За 1,5 месяца он совершил всего 3 сделки.



Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.


Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.

Какие у вас есть предложения, чтобы заставить это работать правильно?

Заранее спасибо.

Здравствуйте. Спасибо за добрый ответ и отзыв. Предполагая, что вы никогда не читали статью, вы просто подключили и играете; программа была разработана на инструменте AUDUSD, поэтому сначала протестируйте ее там, прежде чем переходить к другим валютам. Это даст вам глубокое понимание, потому что пункты нуждаются в корректировке по мере изменения пар. Возможно, вам также нужно проверить журнал на предмет возможных подсказок, почему это может быть неудачным, возможно, из-за неправильных настроек, но, по-видимому, точки для AUDUSD и EURUSD должны работать почти одинаково. Например, вы запускаете его на EURUSD, поэтому мы возьмем аналогичный тест и попробуем посмотреть.

ТЕСТ EURUSD

Из изображения видно, что там есть ошибка. Это может быть причиной некорректной работы теста.

Другой потенциальной причиной могут быть ненадежные исторические данные, особенно если тест выполняется на очень старых данных. В вашем примере тест выполняется с 2020 года. Так что давайте протестируем и посмотрим на период, который виден на вашем скриншоте.

ПЛОХИЕ ИСТОРИЧЕСКИЕ ДАННЫЕ

После тестирования с периода 2020.01.01 по 2020.01.31, технически январь 2020 года, ни одна сделка фактически не была совершена. Как вы можете видеть, качество данных там плохое, 15% очень ненадежны. Красные участки показывают полностью нулевые данные, а при наведении на них курсора можно увидеть пустой период. Теперь давайте протестируем на данных за 2025 год и посмотрим.

100 ДАТА

Из изображения видно, что при 100% качестве истории у нас есть несколько сделок, 19 из них за месяц.

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

 
Kyle Young Sangster тестер стратегий. Он находит диапазон каждый день и рисует рамку на графике. Однако он не совершает сделок каждый день (предполагается, что он должен совершать сделки). За 1,5 месяца он совершил всего 3 сделки.



Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.


Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.

Какие у вас есть предложения, чтобы заставить это работать правильно?

Заранее спасибо.

Что касается второй проблемы, то в статье это объясняется, но если предположить, что ваша проблема связана с плохими тестовыми данными и дать подсказку, когда диапазон находится в расчете, вы всегда будете видеть статус "Calculating...", пока не будет достаточно данных для установки сессии диапазона Лондона или любой сессии, которую вы определите во входных данных. Предполагая, что вы используете настройки по умолчанию, с предлондонским временем 3, и ваше время из общего скриншота 13 февраля, 2 бара после 22:00, что составляет 2*15 минут = 30, следовательно, давая 22:30, находится вне времени расчета диапазона, поэтому данные на панели должны быть видны, так как предыдущий установленный диапазон все еще в игре, если первая сессия еще не найдена, и будет очищен, когда расчет диапазона будет достигнут с полуночи. См. ниже:

const int PreLondonStartHour = 3; //--- Фиксированный час начала работы до Лондона
const int PreLondonStartMinute = 0; //--- Фиксированная минута начала до Лондона

Вам может понадобиться увидеть приведенную ниже логику поиска диапазона

//+------------------------------------------------------------------+
//| Проверьте торговые условия и разместите ордера |
//+------------------------------------------------------------------+
void CheckTradingConditions(datetime currentTime) {
   MqlDateTime timeStruct;            //--- Структура времени
   TimeToStruct(currentTime, timeStruct); //--- Конвертировать время
   datetime today = StringToTime(StringFormat("%04d.%02d.%02d", timeStruct.year, timeStruct.mon, timeStruct.day)); //--- Получить сегодня

   datetime preLondonStart = today + PreLondonStartHour * 3600 + PreLondonStartMinute * 60; //--- Старт перед Лондоном
   datetime londonStart = today + LondonStartHour * 3600 + LondonStartMinute * 60; //--- Начало в Лондоне
   datetime londonEnd = today + LondonEndHour * 3600 + LondonEndMinute * 60; //--- London end
   analysisTime = londonStart;        //--- Установите время анализа

   if (currentTime < analysisTime) return; //--- Выход, если не успели провести анализ

   double preLondonRange = GetRange(preLondonStart, currentTime, PreLondonHigh, PreLondonLow, PreLondonHighTime, PreLondonLowTime); //--- Получить диапазон
   if (preLondonRange < MinRangePoints || preLondonRange > MaxRangePoints) { //--- Проверьте границы диапазона
      noTradeToday = true;            //--- Установить отсутствие торговли
      sessionChecksDone = true;       //--- Проверки набора выполнены
      DrawSessionRanges(preLondonStart, londonEnd); //--- Нарисуйте диапазоны
      return;                         //--- Выход
   }

   LondonRangePoints = preLondonRange; //--- Установите точки диапазона
   PlacePendingOrders(PreLondonHigh, PreLondonLow, today); //--- Разместить заказы
   noTradeToday = true;               //--- Установить отсутствие торговли
   sessionChecksDone = true;          //--- Проверки набора выполнены
   DrawSessionRanges(preLondonStart, londonEnd); //--- Нарисуйте диапазоны
}

И как он устанавливается.

//+------------------------------------------------------------------+
//| Обновление панели с текущими данными|
//+------------------------------------------------------------------+
void UpdatePanel() {
   string rangeText = "Range (points): " + (LondonRangePoints > 0 ? DoubleToString(LondonRangePoints, 0) : "Calculating..."); //--- Форматирование текста диапазона
   ObjectSetString(0, panelPrefix + "RangePoints", OBJPROP_TEXT, rangeText); //--- Обновите текст диапазона

   //---

}

На изображении ниже, хотя мы не знаем год вашего тестирования, мы возьмем 2025, если это 2020, как в вашем случае, у нас нет качественных данных для этого, поэтому в любом случае мы используем 2025 и, таким образом, расчет диапазона должен начаться в полночь.

23:55

Из изображения видно, что данные в 23:55 все еще нетронуты. Однако, когда наступит полночь, мы должны сбросить данные. Смотрите ниже.

ПОЛНОЧНЫЕ ДАННЫЕ 00:00

Видно, что мы сбросили данные в полночь для другого расчета диапазона. На самом деле, когда расчет диапазона завершен, визуализация может помочь вам понять, что произошло на самом деле. Например, в вашем случае при использовании настроек по умолчанию мы увидим столбики raneg с 03:00 до 08:00, потому что именно это мы и определили. См. ниже:

ЧАСЫ ДИАПАЗОНА

Надеюсь, это еще раз прояснит ситуацию. Вы можете настроить все в соответствии с вашим стилем торговли. Чтобы избежать проблем, с которыми вы столкнулись, рекомендуется использовать надежные тестовые данные. Спасибо.