Я пытаюсь выяснить, существует ли правильный способ для установки уровней Stop Loss (SL) и Take Profit (TP) при отправке ордера в Советник , на 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 Reference в 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 показывает только 1053 * Bid цены на графике (по умолчанию) , а не оба Ask и Bid .
Так потому что: Ask > Bid
и Ask - Bid = Slippage
, не имеет значения, какой мы выберем, пока мы знаем о проскальзывании.Затем, в зависимости от того, за какой ценой вы следите на графике, вы можете решить использовать один поверх другого, соответственно добавляя или вычитая Slippage.
Поэтому, когда вы используете инструмент измерения, чтобы получить разницу в Pip отображаемых в настоящее время цен по сравнению с вашими "точными" настройками SL / TP, вы должны помнить об этом.
Таким образом, чтобы избежать использования Slippage в моем коде выше, я использовал следующее для OP_BUY
: TP = ND(Bid + dTP);
(и наоборот для OP_SELL
.)