我在发送时试图确定是否有正确的方式设置止损(SL)和获利(TP)级别MQL4(Metatrader4)中 EA交易中的订单。功能模板是:
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);
所以它继续有各种风格,here,here和here ......
假设我们对OP_BUY
感兴趣并且标志正确,我们可以选择基于SL和TP值:
bid, bid
bid, ask
ask, ask
ask, bid
那么为买入设置SL和TP的正确方法是什么?
(使用各种变化有哪些优点或缺点?)
编辑:2018-06-12
除了一些细节,答案其实很简单,虽然不是很明显。也许因为MT4仅在图表上显示出价价格(默认情况下),而不是询问和出价。< / p>
因为:Ask > Bid
和Ask - Bid = Slippage
,只要我们了解滑点,我们选择的并不重要。然后,根据您在图表上跟随的价格,您可能希望决定使用其中一个,相应地增加或减少滑点。
因此,当您使用度量工具获取当前显示价格的 Pip 差异时,与您的&#34;确切的&#34; SL / TP设置,你需要记住这一点。
为了避免将Slippage放在上面的代码中,我使用了以下内容 OP_BUY
:TP = ND(Bid + dTP);
(与 {{1相反}} 。)
答案 0 :(得分:1)
如果您购买,则在OP_BUY
Ask
并在Bid
关闭(SL,TP)。
如果您销售, OP_SELL
操作以Bid
价格进行,并在Ask
结束。
SL和TP应至少保持在距离当前价格STOP_LEVEL * Point()
的距离内(买入Bid
,卖出Ask
)。
STOP_LEVEL
可能为零 - 在这种情况下(当MT4接受订单时)经纪人可以根据自己的算法拒绝它(条款和条件可以称之为&#34;浮动Stoplevel& #34;规则或类似的营销方式&#34;重新打扮的术语)。
建议发送一个OrderSend()
请求,其中包含SL和TP的零值,并在看到订单成功发送后进行修改。有时它不是必需的,有时甚至是强制性的。
您给我们的两个链接没有区别:您可以计算SL和TP,然后将它们传递给函数或根据OrderOpenPrice()
+/- distance * Point()
计算它们。
答案 1 :(得分:0)
那么为买入设置SL和TP的正确方法是什么?
等级0 :语法是满足呼号(最简单的一种)
等级1 :所有在市场XTO-s必须达到当前价格+/-滑点的正确水平,确保重复RefreshRates()
- 测试接近PriceDOMAIN水平设置,否则他们会被经纪人拒绝(以非确定性的附加RTT延迟阻止一个人的交易引擎)+ GetLastError() == 129
|的 ERR_INVALID_PRICE
强>
等级2 :在[交易条款和条件]的相应服务/产品定义中,另一个规则从经纪人方面设置。如果一个人的 OrderSend()
- 请求未能满足其中任何一个,则XTO将被拒绝,具有相同的不利阻止效果,如第1级所述。
ERR_LONG_POSITIONS_ONLY_ALLOWED Buy orders only allowed
ERR_TRADE_TOO_MANY_ORDERS The amount of open and pending orders has reached the limit set by the broker
ERR_TRADE_HEDGE_PROHIBITED An attempt to open an order opposite to the existing one when hedging is disabled
ERR_TRADE_PROHIBITED_BY_FIFO An attempt to close an order contravening the FIFO rule
ERR_INVALID_STOPS Invalid stops
ERR_INVALID_TRADE_VOLUME Invalid trade volume
...
..
.
#ASSUME NOTHING ; Is the best & safest design-side (self)-directive