Обсуждение статьи "Автоматизация торговых стратегий на MQL5 (Часть 24): Система торговли на пробое лондонской сессии с риск-менеджментом и трейлинг-стопами"
Ознакомьтесь с новой статьей: Автоматизация торговых стратегий на MQL5 (часть 24): Система прорыва лондонской сессии с управлением рисками и трейлинг-стопами.
Автор: Аллан Мунене Мутирия
Я загрузил и прогнал этот код как есть через тестер стратегий. Он находит диапазон каждый день и рисует рамку на графике. Однако он не совершает сделок каждый день (предполагается, что он должен совершать сделки). За 1,5 месяца он совершил всего 3 сделки.
Вторая проблема заключается в том, что уровни high / low и уровни buy / sell в панели управления не обновляются.
Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, поскольку они получены непосредственно из уровней высокого / низкого диапазона.
Какие у вас есть предложения, чтобы заставить это работать правильно?
Заранее спасибо.
Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.
Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.
Какие у вас есть предложения, чтобы заставить это работать правильно?
Заранее спасибо.
Не могу отредактировать свой комментарий; я использую версию 5.00, сборка 5214 MT5
Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.
Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.
Какие у вас есть предложения, чтобы заставить это работать правильно?
Заранее спасибо.
Здравствуйте. Спасибо за добрый ответ и отзыв. Предполагая, что вы никогда не читали статью, вы просто подключили и играете; программа была разработана на инструменте AUDUSD, поэтому сначала протестируйте ее там, прежде чем переходить к другим валютам. Это даст вам глубокое понимание, потому что пункты нуждаются в корректировке по мере изменения пар. Возможно, вам также нужно проверить журнал на предмет возможных подсказок, почему это может быть неудачным, возможно, из-за неправильных настроек, но, по-видимому, точки для AUDUSD и EURUSD должны работать почти одинаково. Например, вы запускаете его на EURUSD, поэтому мы возьмем аналогичный тест и попробуем посмотреть.
Из изображения видно, что там есть ошибка. Это может быть причиной некорректной работы теста.
Другой потенциальной причиной могут быть ненадежные исторические данные, особенно если тест выполняется на очень старых данных. В вашем примере тест выполняется с 2020 года. Так что давайте протестируем и посмотрим на период, который виден на вашем скриншоте.
После тестирования с периода 2020.01.01 по 2020.01.31, технически январь 2020 года, ни одна сделка фактически не была совершена. Как вы можете видеть, качество данных там плохое, 15% очень ненадежны. Красные участки показывают полностью нулевые данные, а при наведении на них курсора можно увидеть пустой период. Теперь давайте протестируем на данных за 2025 год и посмотрим.
Из изображения видно, что при 100% качестве истории у нас есть несколько сделок, 19 из них за месяц.
Так что, судя по вашему вопросу, возможно, вам нужно проверить качество ваших тестовых данных, поскольку мы доказали, что настройки по умолчанию работают нормально на инструменте EURUSD. Надеюсь, это прояснит ситуацию и окажется полезным. Спасибо. Счастливой торговли.
Вторая проблема заключается в том, что уровни максимума/минимума и уровни покупки/продажи в панели управления не обновляются.
Уровни высокого / низкого диапазона четко отображаются на графике, поэтому я предполагаю, что уровни покупки / продажи также должны отображаться на графике и обновляться в панели управления, так как они являются производными непосредственно от уровней высокого / низкого диапазона.
Какие у вас есть предложения, чтобы заставить это работать правильно?
Заранее спасибо.
Что касается второй проблемы, то в статье это объясняется, но если предположить, что ваша проблема связана с плохими тестовыми данными и дать подсказку, когда диапазон находится в расчете, вы всегда будете видеть статус "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 все еще нетронуты. Однако, когда наступит полночь, мы должны сбросить данные. Смотрите ниже.
Видно, что мы сбросили данные в полночь для другого расчета диапазона. На самом деле, когда расчет диапазона завершен, визуализация может помочь вам понять, что произошло на самом деле. Например, в вашем случае при использовании настроек по умолчанию мы увидим столбики raneg с 03:00 до 08:00, потому что именно это мы и определили. См. ниже:
Надеюсь, это еще раз прояснит ситуацию. Вы можете настроить все в соответствии с вашим стилем торговли. Чтобы избежать проблем, с которыми вы столкнулись, рекомендуется использовать надежные тестовые данные. Спасибо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования








Опубликована статья Автоматизация торговых стратегий на MQL5 (Часть 24): Система торговли на пробое лондонской сессии с риск-менеджментом и трейлинг-стопами:
Стратегия пробоя лондонской сессии работает на повышенной волатильности при открытии лондонского рынка. Она определяет ценовой диапазон, сформированный в часы до открытия Лондона, и выставляет отложенные ордера на пробой этого диапазона. В лондонскую сессию часто наблюдаются высокая ликвидность и значительные ценовые движения, что дает неплохие возможности для получения прибыли. Однако стратегия требует тщательного управления рисками для защиты от ложных пробоев и просадок.
Для такой защиты мы будем рассчитывать максимум и минимум до лондонской сессии для установки ордеров buy stop и sell stop с отступами, добавляя соотношение риск/прибыль для тейк-профитов, трейлинг-стопы для фиксации прибыли и ограничения на количество открытых сделок и дневную просадку для защиты капитала. Также будем использовать панель управления для мониторинга в реальном времени и проверок сессии, чтобы сделки совершались только в заданных диапазонах, а сама система при этому будет адаптивной к различным рыночным условиям. Ниже представлена концепция системы, которую мы будем реализовывать.
Автор: Allan Munene Mutiiria