AI-торговий бот із MetaTrader 4/5: MQL-скрипти, Python API та ZeroMQ-міст

Ручне виставляння заявок не встигає за ринком: поки людина ухвалює рішення, ціна вже пішла. Ми розробляємо та налаштовуємо торгових ботів під ключ — від розбору вашої стратегії до передавання робочого контуру. Наші інженери скорочують затримку реакції на подію та тримають ризик під контролем.
Часті запитання

Інтеграція AI бота MetaTrader: де ламається ручна логіка

Інтеграція AI бота MetaTrader ламається не на моделі, а на стику. Сигнал пораховано, але між його появою та виставленням заявки минає час: цикл радника, звернення до зовнішнього модуля, відповідь брокера.

На волатильній ділянці затримка виконання заявок у частки секунди зсуває ціну входу, і розрахункова дохідність стратегії перестає збігатися з фактичною.

Другий збій менш помітний — розсинхрон торгової логіки. Обсяг позиції рахується за одним станом рахунку, а виконується вже за іншим; стоп, тейк і множник задані у двох місцях і після розриву зв’язку дрейфують. Помилка накопичується тихо: окремі угоди виглядають коректно, а підсумок розходиться з очікуваним.

Прослизання добиває результат уже на серії: кожна угода втрачає трохи, але на довгій вибірці це з’їдає всю перевагу стратегії. І майже завжди відсутній журнал торгових рішень — відновити, який був сигнал і чому бот увійшов саме тут, через добу неможливо.

Окремо — ризик ручного вводу. Оператор бачить просадку, втручається і змінює статистику стратегії, а слідів втручання не залишається: модель і реальний рахунок починають жити різними життями. Розбираємо, як це закривається.

Ефект автоматизації: реакція на подію і контроль ризику

Реакція на подію перестає залежати від того, чи людина біля екрана. Радник у MetaTrader приймає сигнал від моделі та виставляє заявку в перші секунди після закриття свічки, тоді як ручне підтвердження займало десятки секунд і йшло за ціною помітно гірше. На волатильному ринку це пряма різниця в результаті стратегії.

Ручні операції — головне джерело розбіжностей між задумом і фактом. Пропущений вхід, неправильно порахований обсяг, забутий захисний ордер — кожен такий випадок спотворює статистику, і за нею потім ухвалюються хибні рішення.

Ми переносимо весь цикл у код: сигнал, розрахунок обсягу, постановка захисту йдуть однією гілкою виконання, тому частка ручних помилок прямує до нуля, а не «до прийнятного рівня».

Контроль ризику задається не за підсумками дня, а на вході в угоду. Обсяг рахується від поточного балансу та допустимої просадки на позицію, стоп і ціль виставляються разом із заявкою, а ліміт на кількість одночасних позицій не дає стратегії піти в перегрів. Змінюється ризик-профіль — змінюються параметри, логіка входу залишається тією самою.

Передбачуваність виконання важливіша за пікові прибутки: той самий сигнал обробляється однаково незалежно від того, хто дивиться на графік. Стан позицій відновлюється з журналу після перезапуску термінала, дублікати заявок не створюються.

Так знімається цілий клас відмов — обрив зв’язку або падіння термінала більше не залишає позицію без нагляду.

У сумі це керована просадка замість надії на дисципліну.

Розбіжності між прогоном на історії та реальною торгівлею пояснюються станом ринку, а не людським фактором, тому налаштування стратегії спирається на вимірювані величини: час реакції, частку автоматичних угод, відхилення фактичного ризику від заданого.

Варіанти підключення бота: порівняння режимів роботи

Режим підключення визначає, де виконується логіка бота, хто відповідає за зв’язок із брокером і що станеться при обриві каналу. На практиці обирають між трьома схемами — від повністю вашого контуру до виділеного сервісу на нашій стороні.

Режим Коли підходить Обмеження
Торговий термінал замовника Термінал уже розгорнуто на вашому сервері, потрібен повний контроль над рахунком, історією та налаштуваннями Усе залежить від одного каналу й одного вузла: перезапуск термінала або втрата зв’язку зупиняє потік сигналів, а оновлення та розбір записів лягають на вашу сторону
Виділений сервіс на нашій стороні Кілька стратегій і рахунків, потрібен цілодобовий контроль і зрозуміла точка відповідальності Торговий термінал замовника напряму не задіяний — доступ до рахунку видається за ключами з узгодженими правами та лімітами
Гібрид із резервуванням каналу Простій неприпустимий: два незалежні канали, автоматичне перемикання, безперервність угод Складніше налаштування та синхронізація стану позицій; обов’язкові журналювання кожного перемикання і звірка з брокером

Вибір диктує допустимий час простою та вимоги до того, де зберігаються ключі. Ми відштовхуємося від того, скільки хвилин без сигналів для вас прийнятно, і під це підбираємо режим і глибину резервування.

Етапи впровадження: від розбору стратегії до передачі

Порядок етапів тут важливіший за швидкість: помилку в правилах входу дешевше знайти на схемі, ніж на живому рахунку. Тому ми не починаємо писати код, поки не зафіксовано логіку стратегії, точки відмови та критерії, за якими результат визнається коректним. Кожен крок закривається артефактом — без нього наступний не починається.

  1. Аудит торгової стратегії. Розбираємо правила входу й виходу, розрахунок обсягу позиції, умови зупинки торгівлі. Неоднозначні формулювання виносимо в протокол рішень: розбіжності з очікуванням зазвичай ідуть звідти.
  2. Схема взаємодії систем. Визначаємо, хто є джерелом істини щодо позиції, як ходять команди між терміналом MetaTrader і зовнішнім сервісом, що відбувається при обриві каналу та повторному надсиланні команди.
  3. Реалізація логіки. Переносимо узгоджені правила в код із журналом кожного рішення та його причини. Заявки робимо ідемпотентними: повтор команди не відкриває другу позицію.
  4. Тестовий контур. Збираємо окремий контур на демо-рахунку — той самий код, але з емуляцією затримок, обривів зв’язку та перепідключень.
  5. Перевірка на історії. Прогін з урахуванням спреду, комісії та прослизання: дивимося просадку й розподіл угод. На історії видно, де правила ламаються на рідкісних сценаріях.
  6. Запуск на малому обсязі. Мінімальний обсяг, звірка фактичної поведінки з моделлю, розбіжності розбираємо за журналами, поки причину не знайдено.
  7. Передача. Віддаємо конфігурації, схему взаємодії, регламент зупинки та документацію, навчаємо вашу команду експлуатації.

Що передаємо на руки: конфігурації, схеми, регламенти

Працюючий робот без документації — це чорна скринька, яку страшно чіпати. Тому на прийманні передаємо не лише код, а й комплект артефактів, за яким ваша команда сама проводить налаштування, зупинку та відновлення торгівлі.

  • Документація з логіки: як формується сигнал, які фільтри його відсікають, від чого залежить розмір позиції та що відбувається при пропуску ринкових даних.
  • Схема взаємодії: торговий термінал — радник — серверний сервіс — брокерський рахунок; точки відмови, поведінка при розриві зв’язку, порядок повторної синхронізації.
  • Політики доступів: ролі й права на торговий рахунок, зберігання та ротація ключів, правила ручного втручання у відкриті позиції.
  • Регламент зупинки та відновлення: коректне виведення робота з торгівлі, доля незакритих позицій, підняття сервісу та перевірка стану після збою.
  • Інструкція з експлуатації: типові операції, де дивитися журнали, які показники перевіряти на початку дня і на що реагувати негайно.
  • Конфігурації: параметри ризику, список інструментів і режими «демо / бойовий» — в окремих файлах, змінюються без правки коду.
  • Контроль стану та оповіщення: перелік відстежуваних показників, пороги спрацювання та адресати повідомлень.
  • Протокол змін: як правка логіки проганяється на історії та за якими показниками ухвалюється рішення відкотити версію.

Кожен пункт розбираємо на передачі й фіксуємо в акті — після приймання щоденна експлуатація не потребує звернення до нас.

Кейс: як скоротили затримку виконання заявок

Замовник вів портфель із кількох стратегій у MetaTrader 5 і ухвалював рішення вручну: сигнал надходив, трейдер звіряв його з ринком і лише потім виставляв заявку.

На спокійному ринку це працювало, але на новинних сплесках між сигналом і заявкою минали секунди, а частина входів губилася між терміналом і журналом угод.

Де саме губився результат

Розбір записів за місяць показав: до чверті сигналів не доїжджало до брокера, ще частина йшла за ціною, що помітно відрізнялася від розрахункової.

Розбіжність між тим, що стратегія «вирішила», і тим, що реально потрапило в позицію, ніхто не вимірював — відтворити вдалий день на історії було неможливо. Результат залежав від реакції людини, а не від правил.

Що змінили і що вийшло

Логіку оцінки сигналів винесли з термінала в окремий сервіс на Python, а зв’язок із торговим терміналом зробили через міст обміну повідомленнями: термінал віддає котирування та статуси позицій, сервіс повертає готові розпорядження.

Перед заявкою додали перевірки на відхилення ціни, розмір позиції та дублі, а кожне рішення пишеться в журнал із причиною — за ним угода відновлюється крок за кроком.

Після перенесення час реакції скоротився із секунд до часток секунди, частка пропущених сигналів упала до поодиноких випадків за місяць.

Контрольний прогін на тих самих даних дає збіг угод із фактом понад 95% — зміни в правилах тепер перевіряються на історії до виведення в торгівлю.

Що робити, якщо бот уже працює вручну?

Працюючу логіку не переписують з нуля — її обгортають. Радник у MetaTrader продовжує рахувати сигнали й виставляти ордери за попередніми правилами, а поруч піднімається сервіс, який читає ці події через міст і поступово забирає ухвалення рішень на себе.

Термінал залишається точкою виконання та сховищем позицій, тому торгівля не переривається ні на одній ітерації.

Окремо вирішується доля відкритих позицій: їх не закривають і не перевідкривають. Нова логіка при старті зчитує таблицю позицій та історію ордерів прямо з термінала, звіряє з власним журналом стану та позначає кожну як успадковану або свою.

Мітки ордерів і роздільні діапазони ідентифікаторів не дають двом версіям продублювати вхід або посперечатися за один інструмент.

Перехід роблять поступовим. Спочатку новий контур працює спостерігачем: рахує сигнали й пише в журнал, де його рішення збіглося з ручним, а де розійшлося, — розбіжності розбирають до перемикання, а не після.

Потім передача йде за символами й періодами графіка: один інструмент веде нова логіка, решту — стара; закривати позиції може будь-який контур, відкривати — лише призначений власник.

Відкат займає одну операцію: прапорець повертає керування старому раднику, а термінал торгує автономно навіть при недоступному мості. Це знімає головний ризик переходу — не втрату даних, а одночасне відкриття двох протилежних позицій за одним інструментом.

Опишіть поточну логіку та її слабкі місця — повернемося з планом перенесення та оцінкою.

Технічні сумніви: доступи, тести, відповідальність

До старту фіксуємо межі: MQL-радник працює на стороні термінала MetaTrader, аналітичний контур — окремим сервісом на Python, обмін іде через локальний міст.

Доступи видаємо в мінімальному обсязі, потрібному для торгівлі, а будь-яку розбіжність розбираємо за журналами, де видно кожне рішення моделі разом із відповіддю брокера.

Який обсяг доступів потрібен на термінал?

Лише запуск радника, читання історії ордерів і торговий доступ у межах рахунку. Виведення коштів, зміна пароля та налаштування самого рахунку залишаються у вас: цих прав сервісу не потрібно ні на етапі налагодження, ні в роботі.

Що відбувається при обриві зв’язку з брокером або мостом?

Радник веде локальний журнал стану й не відкриває нових позицій, поки з’єднання не відновлено. Захисні стопи вже стоять на стороні брокера, тому відкриті угоди залишаються прикритими.

Після підняття зв’язку звіряємо позиції за номером ордера та гасимо розсинхрон — угоди, закриті на одній стороні, не дублюються.

Як передаються ключі і що з ними далі?

Секрети зберігаються в захищеному сховищі й не потрапляють ні в код, ні в репозиторій. Передача йде захищеним каналом, доступ видається на конкретний контур і відкликається одразу після здачі робіт; ротація ключів — штатна процедура, а не разова акція.

Де межа відповідальності і як розбирають інциденти?

Ми відповідаємо за коректність логіки, доступність контуру та відновлення після збоїв. Ринковий ризик і рішення щодо стратегії залишаються за вами.

Розбір іде за журналами: час, номер ордера, відповідь брокера та версія конфігурації — за ними видно, чи це був збій виконання чи ринковий рух, і що саме правимо.

Обговоримо задачу: контур для перевірки і план робіт

Щоб оцінка та план робіт спиралися на факти, а не на здогади, старт починається з короткого розбору поточного контуру: як ухвалюються рішення щодо входу та виходу, де запущено термінал, чим обмежує брокер. За цими даними ми збираємо схему зв’язку радника з моделлю та фіксуємо порядок робіт.

Вхідні дані для старту — те, що у вас уже є і не потребує окремої підготовки:

  • список інструментів і таймфреймів, на яких працює стратегія;
  • поточна логіка входу та виходу: правила, індикатори, місця ручного втручання;
  • де розміщено термінал — робоча машина, орендований сервер або окремий вузол, і чи є віддалений доступ;
  • тип рахунку та обмеження брокера: мінімальний крок, утримання, ліміт на кількість ордерів за одиницю часу;
  • які потоки даних потрібні, крім котирувань — новини, макростатистика, профіль обсягів;
  • журнал угод за минулий період: за ним видно, де заявлені правила розходяться з фактичним виконанням.

У відповідь надходить план робіт: етапи, артефакти на кожному з них, терміни та точки, де потрібне ваше рішення.

Порядок такий: розбір даних і правил, прототип логіки на історії, тестовий запуск на демо-рахунку в живому потоці котирувань, і лише після збігу результатів — виведення на робочий рахунок із прописаними лімітами ризику.

Тестовий запуск іде окремим етапом: на ньому перевіряємо не дохідність, а поведінку контуру — виконання ордерів, обриви зв’язку, коректний перезапуск після збою.

Опишіть задачу у вільній формі — повернемося з оцінкою, планом робіт і зрозумілим порядком етапів.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1395
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142