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().