Я пытаюсь выяснить, существует ли правильный способ установки уровней Stop Loss (SL) и Take Profit (TP) при отправке ордера в < em>Советник на языке MQL4 (Metatrader4). Функциональный шаблон:
OrderSend( symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
Поэтому, естественно, я попытался сделать следующее:
double dSL = Point*MM_SL;
double dTP = Point*MM_TP;
if (buy) { cmd = OP_BUY; price = Ask; SL = ND(Bid - dSL); TP = ND(Ask + dTP); }
if (sell) { cmd = OP_SELL; price = Bid; SL = ND(Ask + dSL); TP = ND(Bid - dTP); }
ticket = OrderSend(SYM, cmd, LOTS, price, SLIP, SL, TP, comment, magic, 0, Blue);
Однако вариаций столько же, сколько скриптов и советников. Пока я сталкивался с такими.
В Справочнике MQL4 в MetaEditor в документации сказано использовать:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,
NormalizeDouble(Bid - StopLoss*Point,Digits),
NormalizeDouble(Ask + TakeProfit*Point,Digits),
"My order #2",3,D'2005.10.10 12:30',Red);
В то время как в "той же" документации онлайн используются:
double stoploss = NormalizeDouble(Bid - minstoplevel*Point,Digits);
double takeprofit = NormalizeDouble(Bid + minstoplevel*Point,Digits);
int ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
И так далее с разными вариантами, здесь, здесь и здесь...
Предполагая, что нас интересует OP_BUY
и у нас правильные знаки, у нас есть варианты для определения наших значений SL и TP на:
bid, bid
bid, ask
ask, ask
ask, bid
Так как же правильно установить SL и TP для ПОКУПКИ?
(Каковы преимущества или недостатки использования различных вариантов?)
РЕДАКТИРОВАНИЕ: 2018-06-12
Помимо нескольких деталей, ответ на самом деле довольно прост, хотя и не очевиден. Возможно, потому что MT4 показывает на графике только цены Bid (по умолчанию), а не одновременно Ask и Bid.
Итак, потому что: Ask > Bid
и Ask - Bid = Slippage
не имеет значения, что мы выбираем, пока мы знаем о проскальзывании. Затем, в зависимости от того, за какой ценой вы следите на графике, вы можете принять решение об использовании одного над другим, соответственно добавляя или вычитая проскальзывание.
Поэтому, когда вы используете инструмент измерения, чтобы получить разницу пипсов между текущими отображаемыми ценами и вашими «точными» настройками SL/TP, вы должны помнить об этом.
Поэтому, чтобы не добавлять проскальзывание в приведенный выше код, я использовал для OP_BUY
следующее: TP = ND(Bid + dTP);
(и наоборот для OP_SELL
).