OrderModify() - зміна параметрів відкладених ордерів та відкритих позицій

У минулих випусках я розглянув дуже корисну функцію – OrderSend(). А в цій статті буде розказано про функцію OrderModify().

Ця функція дозволяє змінювати параметри відкладених ордерів та відкритих позицій. У разі успіху вона повертає true, а у разі невдачі – false. Код помилки можна отримати за допомогою функції GetLastError().

  • Ticket - тикер відкладеного ордера чи відкритої позиції;
  • Price - новий рівень відкладеного ордера (для відкритих позицій може бути змінено);
  • Stoploss – новий рівень Stop Loss;
  • Takeprofit – новий рівень Take Profit;
  • Expiration - нові дата та час закінчення відкладеного ордера (якщо до цієї дати та часу відкладений ордер не спрацює, то він буде видалений - див. випуск "OrderExpiration() - дата закінчення відкладеного ордера");
  • Arrow_color - колір стрілки, що відкриває, на графіку. Якщо параметр відсутній або його значення дорівнює CLR_NONE, то стрілка, що відкривається, не відображається на графіку.

У разі неправильних параметрів функція повертає такі коди помилок:

  • 1 (ERR_NO_RESULT) - якщо жоден із параметрів не було змінено;
  • 147 (ERR_TRADE_EXPIRATION_DENIED) - якщо в налаштуваннях торгового сервера заборонено виставляти дату експерації ордера. У цьому випадку параметр expiration завжди повинен дорівнювати нулю).

Як практичний приклад застосування цієї функції розглянемо установку та керування трейлінг стопом.

Нагадаю, що Trailing Stop (трейлінг стоп) – це алгоритм керування рівнем Stop Loss ордера. Після виставлення трейлінг-стопу (наприклад, на Х піпсів) відбувається таке:

  • MetaTrader не робить жодних дій до того моменту, поки по відкритій позиції не утворюється прибуток у Хпіпсів. Після цього MetaTrader виставляє Stop Loss ордер на відстані Х-піпсів від поточної ціни (в даному випадку - на рівні беззбитковості).
  • Після виконання першого кроку MetaTrader посилає команду на зміну рівня Stop Loss ордера на відстань Х піпсів від поточного котирування щоразу, коли відстань між нею та старим рівнем ордера перевищить Х піпсів. Внаслідок цього Stop Loss ордер "підтягується" до поточної ціни.

Реалізуємо цей принцип мовою MetaQuotes Language 4. Вважатимемо, що відкриту позицію вже обрано і ми точно знаємо, що ця позиція відкрита за інструментом, до якого прикріплений експерт. Також припустимо, що значення трейлінгу стопа в піпсах міститься в змінній TrailingStop.

У цьому коді Вам можуть бути незрозумілі кілька функцій:

  • Bid - Bid останнього котирування інструментом, до якого прикріплений експерт;
  • Ask - Ask останнього котирування інструментом, до якого прикріплений радник;
  • Point – розмір пункту поточного інструменту у валюті котирування (для EURUSD це 0.0001, для USDJPY – 0.01 тощо).

У наступній статті буде розказано, як видалити відстрочений ордер за допомогою функції OrderDelete().