Архитектура с одним экземпляром бота для нескольких графиков — без блокировок брокера
ib_email_20240501.txt и ib_pass_20240501.txt в папке MQL5\Files\ (см. шаг 2).Проблема: если поставить бота на 10 графиков, каждый из них постоянно шлёт запросы брокеру — баланс, авторизация, сделки. Брокер видит 10 источников и банит аккаунт как подозрительный.
Решение: бот (Master) стоит только на одном графике и один общается с брокером. На остальных графиках стоит лёгкий индикатор SignalRelay, который ловит стрелки индикатора и мгновенно шлёт сигнал Master'у через внутренние события MetaTrader.
Закиньте IntradeBarBot.ex5 на любой график (например EURUSD M1).
После запуска в логе (вкладка «Эксперты») появится строка:
ChartID: 123456789
Запомните это число — его нужно будет указать во всех SignalRelay.
Обязательные параметры (вкладка «Входные параметры» в свойствах советника):
| Параметр (русское название) | Что указать |
|---|---|
| Тип опциона | Sprint (бинарные) или Classic (цифровые) |
| Фиксированная ставка | true (или false для мартингейла) |
| Домен брокера | https://intrade33.bar |
| Авто-переключение счета | true (бот сам переключит DEMO/RUB) |
MQL5\Files\ib_email_20240501.txt — впишите одной строкой ваш emailib_pass_20240501.txt — впишите одной строкой ваш парольОстальные параметры (мартингейл, кнопки, цвета) настраивайте по желанию.
На каждый график, где стоит ваш индикатор с сигнальными стрелками, закиньте SignalRelay.ex5.
В окне настроек индикатора укажите:
| Параметр (русское название) | Что указать |
|---|---|
| Chart ID мастера (0=откл) | Номер из лога Master Bot (п.1) |
| Способ получения сигнала |
SIGNAL_OBJECT — по графическим стрелкамSIGNAL_BUFFER — по буферам индикатора
|
Для режима SIGNAL_OBJECT (графические стрелки):
Укажите коды стрелок вашего индикатора. Стандартные: для BUY — 241, для SELL — 242.
| Параметр (русское название) | Что указать |
|---|---|
| Имя индикатора | Префикс имени объектов-стрелок (например NWE_G для стрелок NWE_GBuy_...). Можно оставить пустым — тогда Relay будет брать все стрелки на графике |
| Код стрелки BUY (для объектов) | Код для CALL / покупки |
| Код стрелки SELL (для объектов) | Код для PUT / продажи |
*.mq5OBJPROP_ARROWCODE — рядом будет число (например ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 241))OBJPROP_ARROWCODE — индикатор рисует стрелки через буферы, используйте режим SIGNAL_BUFFERДля режима SIGNAL_BUFFER (буферы индикатора):
| Параметр (русское название) | Что указать |
|---|---|
| Имя индикатора | Полное имя файла индикатора (без пути, без .ex5), например MyArrowIndicator |
| Номер буфера для CALL | Номер буфера индикатора, где появляется сигнал на покупку |
| Номер буфера для PUT | Номер буфера индикатора, где появляется сигнал на продажу |
Общие параметры (для обоих режимов):
| Параметр (русское название) | Что указать |
|---|---|
| Бар для сигнала | 0 — текущий бар, 1 — закрытый бар (рекомендуется) |
| Инвертировать сигнал | true — если ваш индикатор даёт противоположные сигналы |
| Экспирация (мин) для Master'а | Время экспирации в минутах для этого инструмента |
| Задержка перед отправкой | Задержка в минутах перед отправкой сигнала Master'у |
Второй сигнал (Signal 2):
SignalRelay может работать с двумя разными индикаторами на одном графике. Второй сигнал включается отдельной настройкой и имеет собственный набор параметров — свой режим, свой индикатор, свои коды стрелок или буферы.
| Параметр (русское название) | Что указать |
|---|---|
| Включить сигнал 2 | true — второй сигнал активен, false — выключен |
| Способ получения сигнала 2 | SIGNAL_OBJECT или SIGNAL_BUFFER |
Для режима SIGNAL_OBJECT (сигнал 2):
| Параметр (русское название) | Что указать |
|---|---|
| Имя индикатора (сигнал 2) | Префикс имени объектов-стрелок второго индикатора |
| Код стрелки BUY (сигнал 2) | Код для CALL / покупки |
| Код стрелки SELL (сигнал 2) | Код для PUT / продажи |
Для режима SIGNAL_BUFFER (сигнал 2):
| Параметр (русское название) | Что указать |
|---|---|
| Имя индикатора (сигнал 2) | Полное имя файла индикатора (без .ex5) |
| Номер буфера для CALL (сигнал 2) | Номер буфера покупки |
| Номер буфера для PUT (сигнал 2) | Номер буфера продажи |
Общие параметры (сигнал 2):
| Параметр (русское название) | Что указать |
|---|---|
| Бар для сигнала 2 | 0 — текущий бар, 1 — закрытый бар |
| Инвертировать сигнал 2 | true — если нужно инвертировать |
| Экспирация (мин) сигнал 2 | Время экспирации для второго сигнала |
| Задержка перед отправкой (сигнал 2) | Задержка в минутах перед отправкой |
После запуска SignalRelay в логе (вкладка «Эксперты») должно появиться:
SignalRelay: master chart ID=123456 local chart ID=654321 symbol=EURCAD period=PERIOD_M1
Когда индикатор рисует стрелку — Relay шлёт событие, Master получает его:
Relay signal: CALL EURCAD Queue: 1 signal(s) pending HandleSignal: CALL EURCAD immediate SendDeal: CALL EURCAD amt=100.00 exp=5min ...
На графике Master Bot'а нажмите красную кнопку BOT OFF — она станет зелёной BOT ON. Бот начнёт принимать сигналы от Relay и отправлять сделки.
OBJ_ARROW) или BUFFER (читает буферы индикатора через iCustom)EventChartCustomOnChartEventИндикатор рисует стрелку → Relay видит новую стрелку, запоминает её и отправляет событие Master'у. Relay не обращается к брокеру — он только ловит сигналы.
Бот смотрит все свои активные сделки (которые ещё у брокера).
Сигналы по другим символам (например EURUSD → EURCAD) не блокируются — бот торгует каждый символ независимо. Сигналы от разных источников (relay1 и relay2) по одному символу не блокируют друг друга.
Бот отправляет HTTP-запрос брокеру и запоминает ID сделки. Статус сделки — 0 (открыта).
С этого момента любое количество новых сигналов по этому же символу будет отклоняться (шаг 2), пока сделка не завершится.
Бот ждёт, пока пройдёт время экспирации (например 5 минут). В это время он:
После экспирации бот запрашивает у брокера результат сделки по её ID. Брокер отвечает: выигрыш, проигрыш или возврат.
После обработки результата сделка помечается как закрытая и больше не блокирует новые сигналы по этому символу.
Когда закрытая сделка освободила символ, новый сигнал может пройти (шаг 2 вернёт «нет активной сделки»).
базовая сумма × множитель^шагКогда бот теряет несколько раз подряд и шаг достигает максимального — мартингейл сбрасывается в 0. Следующая сделка открывается базовой суммой. Это страховка от бесконечного увеличения ставки.
SignalRelay сканирует на графике стрелки (OBJ_ARROW), которые рисует ваш индикатор. Определяет направление по коду символа или по имени объекта.
| Параметр в Relay | Описание |
|---|---|
| Способ получения сигнала | SIGNAL_OBJECT |
| Имя индикатора | Префикс имени объекта на графике (можно пусто — все стрелки) |
| Код стрелки BUY (для объектов) | Код символа для CALL |
| Код стрелки SELL (для объектов) | Код символа для PUT |
| Бар для сигнала | 1 — закрытый бар |
ObjectCreate с типом OBJ_ARROW
SignalRelay загружает индикатор через iCustom и читает значения из его буферов. Если значение не 0 и не EMPTY_VALUE — сигнал есть.
| Параметр в Relay | Описание |
|---|---|
| Способ получения сигнала | SIGNAL_BUFFER |
| Имя индикатора | Полное имя файла индикатора (без .ex5) |
| Номер буфера для CALL | Номер буфера покупки |
| Номер буфера для PUT | Номер буфера продажи |
| Бар для сигнала | 1 — закрытый бар |
DRAW_ARROW или буферов с числовыми сигналами
SignalRelay v1.6 умеет работать с двумя разными индикаторами одновременно. Это позволяет получать сигналы от двух стратегий на одном графике и торговать их независимо.
| Параметр (русское название) | Описание |
|---|---|
| Фиксированная ставка | true — всегда ставит одну сумму. false — мартингейл |
| Фикс. ставка для сигнала 2 | true — второй сигнал всегда использует фиксированную сумму, даже если для первого сигнала включён мартингейл. false — следует общим правилам мартингейла |
| Начальная ставка (мартингейл) | Базовая сумма, от которой множитель |
| Множитель мартингейла | Коэффициент: ставка = начальная × множитель^шаг |
| Шагов мартингейла | Максимум увеличений, после сброс |
| Режим мартингейла |
На следующем сигнале — ждать стрелку индикатора(форсированная сделка на баре невозможна — результат предыдущей сделки ещё неизвестен) |
| Мин. ставка (RUB/USD) | Нижняя граница для суммы |
| Макс. ставка (RUB/USD) | Верхняя граница для суммы |
Chart ID мастера (0=откл) должен быть верным (посмотрите в логе Master Bot'а строку ChartID: ...).
В OBJECT-режиме: Имя индикатора — это префикс имени объектов-стрелок.
В BUFFER-режиме: Имя индикатора — это имя файла индикатора (без .ex5), а номера буферов должны быть правильными.
Relay signal: ... — она появляется при получении события.
Если нет — ChartID указан неверно.
Файл IntradeBar_log.csv находится в папке терминала: Меню MT5 → File → Open Data Folder → MQL5\Files\
| Колонка | Описание |
|---|---|
TradeID | Номер сделки на сервере |
Direction | CALL (вверх) или PUT (вниз) |
Asset | Торгуемый актив |
Amount | Сумма ставки |
OpenTime | Время открытия |
ExpiryTime | Время экспирации |
OpenPrice | Цена открытия |
ClosePrice | Цена закрытия |
Result | WIN / LOSS / REFUND |
P&L | Финансовый результат |
Source | relay1 (от SignalRelay, сигнал 1) / relay2 (от SignalRelay, сигнал 2) / manual (кнопка) / auto (локальный сигнал) |
BarTime | Время бара сигнала |
MQL5\Files\
создаётся файл IntradeBar_report.html — цветная таблица всех сделок (WIN — зелёный, LOSS — красный, REFUND — оранжевый)
со сводкой статистики (всего/побед/поражений/возвратов/процент побед).
| Код | Символ | Назначение |
|---|---|---|
241 | ↑ зелёная | Покупка |
242 | ↓ красная | Продажа |
110 | ■ квадрат | Пре-сигнал |
233 | ▲ | Вверх (альтернатива) |
234 | ▼ | Вниз (альтернатива) |
236 | ◆ | Нейтральная (сделка) |
Если обе стрелки имеют одинаковый код — бот определит направление по имени объекта (Buy/Sell, Up/Down).
IntradeBarBot v1.9 + SignalRelay v1.6 — Master + Relay архитектура