Mql4 - як написати копировщик угод для mt4

Mql4 - як написати копировщик угод для mt4
Добрий день друзі!

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

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

Загальна ідея

Mql4 - як написати копировщик угод для mt4

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

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

Головна проблема всіх копіювальників - синхронізація станів. В першу чергу, нам потрібно якось пов'язати ордер на клієнті з ордером, відкритим провайдером. Для цього в якості унікального ідентифікатора ордера (magic number) ми будемо використовувати тікет ордера провайдера. При цьому тікет ордера може змінитися, якщо була закрита тільки частина позиції, і цей випадок теж потрібно обробляти.

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

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

Імена файлів створюються в функції ініціалізації. Ім'я загального файлу єдине для всіх, як ім'я локального бекапа використовується номер торгового рахунку. Тут же викликаємо метод backup, який створює локальну запис (поки ще порожню) з позиціями в папці терміналу.

По суті, метод "backup" створює бекап-файл, через який ми потім будемо перевіряти зміни у відкритих позиціях.

Також є варіант для читання з файлу, де повертається кількість збережених позицій.

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

Так що організація роботи провайдера і копіра реалізована за все одним рядком коду, з послідовним викликом потрібних функцій.

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

Також, можна вибрати спосіб копіювання обсягів. Фіксований обсяг копіюється один в один, незалежно від розміру депозиту. Динамічний обсяг копіюється кратно розміром Еквіті на клієнті. Тобто, якщо на провайдера відкрита позиція 0.1 лота з депозитом 100 доларів, то на клієнті з депозитом в 200 доларів відкриється угода обсягом 0.2 лота.

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

Для запуску копіювання кидаємо експерта на графік і вибираємо тип копіра - Master або Slave. Кількість як провайдерів, так і клієнтів не обмежена - ви можете копіювати угоди з декількох рахунків будь-якого типу, на будь-які реальні / демо рахунку.

висновок

Mql4 - як написати копировщик угод для mt4

Отже, на даному етапі реалізовано:

До недоліків можна віднести:

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

Завантажити исходник копировщики

З повагою, Дмитро аkа Silentspec
TradeLikeaPro.ru

Схожі статті