Trading Window and Spread Guard MT4
- Утилиты
-
Kazuma Uezono
MQL5 / MQL4 / Pine Script v6 developer and active trader.
Seller on the MQL5 Market (indicators for MT4/MT5).
Services:
- TradingView Pine Script to MT5/MT4 conversion (bar-by-bar matching, with tester report)
- MT4 to MT5 migration - Версия: 1.1
- Активации: 5
Trading Window and Spread Guard — утилита для MetaTrader 4, которая сообщает вашим собственным советникам, когда не открывать новые сделки. Вы задаёте до пяти окон остановки (день недели и время, например ежедневный ролловер, ночные часы с низкой ликвидностью или часы, когда спреды вашего брокера широкие) и предел спреда. Пока окно активно или пока спред символа выше вашего предела, утилита поднимает флаг, который могут прочитать ваши советники. По желанию она также может закрывать позиции, открытые в то время, когда новые сделки были запрещены.
Это инструмент для приостановки торговли, а не торговая стратегия. Он не ищет удачное время для сделок, не даёт сигналов на покупку или продажу и никогда не открывает позиции и не выставляет ордера на реальном или демо-счёте. Он не предотвращает убытки: он может только заставить ваши советники пропустить новые входы или закрыть новую позицию после её открытия. Какие часы избегать, торговать ли и как — решаете вы.
При настройках по умолчанию ничего не включено: окон нет, предел спреда выключен, закрытие выключено. Пока вы не заполните параметры, утилита только показывает свою панель.
Важно: ваши советники должны читать флаг. Советник, который не проверяет флаг, продолжает торговать как раньше. Проверка — несколько строк кода (ниже). Для советника, который вы не можете изменить, работает только опция «Закрывать позиции, открытые во время запрета», и она закрывает позицию уже после открытия, что стоит спреда и комиссии.
Возможности
- До 5 окон остановки. Форматы: 12:00-12:30 (каждый день), Mon-Fri 23:50-01:15 (начинается в каждый указанный день и может переходить через полночь), Mon,Wed,Fri 08:00-08:30, Fri 21:00-Mon 01:00 (один отрезок через несколько дней). Дни недели по-английски (Mon или Monday, регистр не важен) или по-японски; All = каждый день. Конец может быть 24:00. Соприкасающиеся и перекрывающиеся окна объединяются.
- Время окон по серверу (по умолчанию) или по часам этого компьютера.
- Предел спреда в пунктах: одно значение для всех символов и, по желанию, значения для отдельных символов (например GOLD=50,US30=300).
- Символы: символ графика (по умолчанию), список или * = все символы в «Обзоре рынка» (до 100).
- Флаги для ваших советников в виде глобальных переменных терминала и готовые функции чтения (TWG_Reader.mqh).
- По желанию: закрытие позиций, открытых во время запрета, только для выбранных вами символов и магических номеров. Позиции, которые уже были открыты при запуске утилиты, никогда не затрагиваются.
- Панель: состояние (OK или BLOCKED и причина), следующее окно с обратным отсчётом, ваши окна, спред и предел, настройки закрытия, имена флагов и последнее сообщение. Английский или японский язык (автоматически по языку терминала). Кнопка сворачивания.
- По желанию всплывающие оповещения и push-уведомления, когда остановка начинается или заканчивается, спред становится слишком широким или позиция закрывается.
Основные параметры
- Stop windows: в каком времени заданы окна (время сервера / время компьютера), Window 1 – Window 5 (пусто = выключено).
- Spread limit: вкл./выкл. (по умолчанию выкл.), максимальный спред в пунктах (по умолчанию 30), пределы по символам.
- Symbols and positions: символы (пусто = этот график, * = все в «Обзоре рынка» или список), закрывать позиции, открытые во время запрета (по умолчанию выкл.), закрывать только эти магические номера (пусто = все, 0 = ручные сделки).
- Flags: префикс имён глобальных переменных (по умолчанию "TWG").
- Alerts (всплывающие, push), Panel (показ, язык, угол, отступы, размер шрифта), максимальное проскальзывание при закрытии, демонстрация в тестере стратегий.
- 23 параметра. MetaTrader 4 показывает их одним списком без заголовков групп, в указанном выше порядке.
Как это работает
- Утилита проверяет состояние каждые 250 мс и записывает флаги примерно раз в секунду, поэтому ваш советник видит изменение примерно через 1–2 секунды.
- Флаги (глобальные переменные терминала; значения — время UTC в секундах; "TWG" — префикс по умолчанию):
- TWG.TIME: конец текущего окна остановки, 0 вне окон.
- TWG.SPR.<символ> (например TWG.SPR.EURUSD): больше текущего времени, пока спред этого символа выше предела. Один флаг на каждый отслеживаемый символ.
- TWG.NEXT: начало следующего окна остановки. TWG.HB: время последнего обновления (показывает, что утилита работает).
- Флаг включён, пока его значение больше TimeGMT().
- Базовая проверка для вашего советника (та же логика, что в TWG_Reader.mqh с префиксом по умолчанию):
bool GuardBlocks(const string sym)
{
if(MQLInfoInteger(MQL_TESTER)) return false;
double now = (double)TimeGMT();
if(GlobalVariableGet("TWG.HB") < now - 30) return false; // guard not running
return GlobalVariableGet("TWG.TIME") > now || GlobalVariableGet("TWG.SPR." + sym) > now;
}
Перед каждым новым входом: if(GuardBlocks(_Symbol)) return;
- TWG_Reader.mqh добавляет TWG_IsBlocked, TWG_TimeBlocked, TWG_SpreadBlocked, TWG_SecondsLeft и TWG_GuardRunning. Загрузка из Маркета содержит только советник; полный текст этого файла опубликован в комментариях к этому продукту. В тестере стратегий эти функции всегда отвечают «не заблокировано», поэтому ваши бэктесты не меняются.
- День недели — это день начала окна. "Mon-Fri 23:50-01:15" создаёт пять окон, которые начинаются в понедельник 23:50 … пятницу 23:50 и заканчиваются в 01:15 следующего дня. Понедельник 00:00–01:15 не входит, потому что эта часть начиналась бы в воскресенье. Чтобы охватить выходные и утро понедельника, добавьте второе окно, например Fri 21:00-Mon 01:15. (С Fri 21:00-Mon 01:00 понедельник 01:00–01:15 остаётся открытым.)
- «Открыта во время запрета» означает: время открытия позиции попадает в окно остановки, или спред её символа в этот момент был выше предела (проверяется для позиций не старше 10 минут).
- Закрытие отправляется при следующей проверке (каждые 250 мс или на следующем тике).
- Утилиту можно запустить на нескольких графиках с одним префиксом (например, чтобы отслеживать разные символы). Тогда флаги сохраняют самое длинное значение. Используйте разные префиксы, если группам советников нужны разные правила.
Примечания и ограничения
- Это не гарантия. Утилита сама не блокирует ордера. Новые входы пропускают только советники, которые проверяют флаг.
- Удаление последнего экземпляра утилиты снимает остановку. Когда вы удаляете её или закрываете её график, она сразу снимает свои флаги. Если терминал неожиданно остановится, функции чтения считают утилиту остановленной через 30 секунд. По умолчанию они тогда разрешают торговлю. Если ваш советник должен ждать, когда утилита не работает, вызывайте TWG_IsBlocked(_Symbol, "TWG", true) (blockIfGuardStopped = true).
- Флаги запаздывают примерно на 1–2 секунды. Ордер, отправленный в первую секунду окна или первую секунду скачка спреда, может пройти. Скачки спреда короче одной проверки могут быть пропущены.
- Отложенные ордера не удаляются и не изменяются. Отложенный ордер, сработавший во время остановки, открывает новую позицию, которая закрывается, только если опция закрытия включена и позиция входит в область действия.
- Если фильтр магических номеров пуст, опция закрытия также закрывает сделки, которые вы открываете вручную в области действия (magic 0 = ручные сделки). Каждое закрытие стоит спреда и комиссии и может закончиться убытком. Утилита не может запретить другому советнику отправлять ордера; если советник продолжает открывать сделки во время остановки, каждая из них закрывается.
- Флаги спреда есть только для отслеживаемых символов. Если ваш советник торгует другими символами, добавьте их в список или используйте *.
- Время окон следует выбранным часам. Время сервера смещается вместе с летним временем вашего брокера; время компьютера следует этому ПК.
- Глобальные переменные терминала принадлежат одному терминалу. Запускайте утилиту в том же терминале MetaTrader 4, что и ваши советники.
- Утилита работает только пока MetaTrader 4 запущен и подключён. Для закрытия также нужна включённая «Автоторговля» (кнопка на панели инструментов) и разрешение живой торговли в настройках советника.
- Сразу после перезапуска терминала MetaTrader 4 иногда несколько секунд не может создать таймер. Утилита повторяет попытку каждые 3 секунды на следующем тике или событии графика, а до тех пор панель показывает красную строку "Timer not created - updates on ticks only (retrying)".
- В MetaTrader 4 нет функции часов сервера. Утилита оценивает время сервера по приходящим тикам; сразу после запуска, пока не придёт новый тик, она использует время последней котировки. Выберите время компьютера, если предпочитаете часы ПК.
- Панель перерисовывается с приходом тиков. Когда тиков нет (например, в выходные), она может выглядеть устаревшей; флаги при этом обновляются по таймеру. Строки панели обрезаются примерно на 63 байтах (японский текст обрезается раньше).
- Тестер стратегий: флаги хранятся только в памяти. Когда параметр "Tester only: demo window and small demo positions" включён (по умолчанию), утилита открывает небольшие демонстрационные позиции (минимальный лот, magic 73190): одну перед окном, которую утилита оставляет открытой, и одну внутри окна, которую утилита сразу закрывает (демонстрация убирает свои позиции через несколько минут). Если окно не задано, используется демонстрационное окно (30 минут или 2 бара, не чаще раза в день). Отчёт тестера показывает только эту демонстрацию и не является торговым результатом; он может показать небольшой убыток. При очень маленьком депозите (например 10 USD) демонстрационных сделок может не быть. Демонстрация никогда не запускается на реальном или демо-счёте.
Совместимость и поддержка
- Только MetaTrader 4. Версия для MetaTrader 5 продаётся отдельно. Прикрепите утилиту к одному графику; добавляйте графики только при необходимости.
- Без DLL, без интернета, без внешнего сервера.
- Сначала проверьте все настройки на демо-счёте.
- Поддержка через сообщения MQL5, ответ в течение 3 рабочих дней: установка, настройки, сообщения об ошибках и вызов функций чтения. Мы не можем советовать, какие часы или спреды избегать, давать оценки рынка или торговые решения, а также изменять ваш советник за вас.
- Никакой результат вашей торговли не обещается и не подразумевается.
