【发布时间】:2018-06-07 16:26:04
【问题描述】:
我正在尝试确定在发送订单时是否有正确的方法来设置止损 (SL) 和止盈 (TP) 水平在Expert Advisor 中,在 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);
但是,有多少脚本和 EA 就有多少变体。到目前为止,我遇到了这些。
在MetaEditor的MQL4参考中,文档说要使用:
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);
在“相同”文档online 中,他们使用:
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
那么为买入设置止损和止盈的正确方法是什么?
(使用各种变体的优点或缺点是什么?)
编辑:2018-06-12
除了一些细节,答案其实很简单,虽然不是很明显。或许因为 MT4 仅在图表上显示 Bid 价格(默认),而不是同时显示 Ask 和 Bid。
所以因为:Ask > Bid 和 Ask - Bid = Slippage,只要我们知道滑点,我们选择哪个并不重要。然后根据您在图表上遵循的价格,您可能希望决定使用一个而不是另一个,相应地增加或减少滑点。
因此,当您使用测量工具获取当前显示价格与“准确”止损/止盈设置之间的点差异时,您需要牢记这一点。
因此,为了避免在上面的代码中添加 Slippage,我对 OP_BUY 使用了以下内容:TP = ND(Bid + dTP);(而 OP_SELL 则相反.)
【问题讨论】:
标签: mql4 algorithmic-trading metatrader4