English
中文
日本語
ID
Vietnam
한국어
Filipino
 
   学院导航

外汇MQL4中挂单参数如何设定

MQL4 Pending Order Parameters

在这篇完整的 MQL4 挂单参数文章中了解如何对 EA 进行编程以放置挂起的止损单和挂起的限价单。

挂单止损

买入止损单放置在当前价格上方,而卖出止损单放置在当前价格下方。 交易者预计价格将上涨至买入止损水平或下跌至卖出止损水平并继续朝该方向获利。 在 MQL4 中,必须在 OrderSend() 函数中更改两个参数以针对止损单调整它,正如我们在以下买入止损示例中看到的那样: OrderSend(), OP_BUYSTOP, Lots, Ask + PriceLevel * Point, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, 0, Blue) 可以看到,第一个和第三个参数发生了变化:第一个参数,代表订单类型,改为OP_BUYSTOP,第三个参数,代表价格,由Ask改为Ask+PriceLevel。 我们在这里需要一个加号 (+),因为我们将在要价上增加点数以表示高于我们希望通过买入止损进入的市场水平。 创建一个名为 外部价格水平 = 20 这个外部变量可以稍后修改,但默认值 20 意味着我预计市场在我进入交易之前达到 20 点:Ask + PriceLevel(我的外部变量默认为 20)* Point。 让我们检查一个卖出止损的例子: OrderSend(), OP_SELLSTOP, Lots, Bid – PriceLevel * Point, Slippage, Ask+StopLoss *Point, Ask-TakeProfit*Point, “EAName”, MagicNumber, 0, 红色) 正如您再次看到的,只有第一个和第三个参数与标准卖出市价订单不同: 第一个参数,表示订单类型,已更改为 OP_SELLSTOP,第三个参数,表示价格,现在表示 Bid-PriceLevel 而不是 Bid。 我们希望在出价后有一个负号 (-),因为我们将从出价中减去点数以表示低于我们希望通过卖出止损进入的市场水平。

待定限价单

限价单与止损单相反。 买入限价订单低于当前价格,而卖出限价订单高于当前价格。 交易者预期价格会跌至买入限价水平,或上升至卖出限价水平,触发订单,然后反转方向获利。


以下是买入限价订单的示例:


OrderSend(), OP_BUYLIMIT, Lots, Ask – PriceLevel * Point, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, 0, Blue)


同样,只有第一个和第三个参数被修改。 我们使用 OP_BUYLIMIT 来指示买入限价单。 然后,我们通过修改价格参数来指示挂单价格必须低于当前价格:我们使用 Ask – PriceLevel * Point,以表示我们希望在市场下跌时进行交易,减去 (-) 到 PriceLevel,默认为比当前卖价低 20 个点。

这是一个卖出限价订单的例子:


OrderSend(), OP_SELLSTOP, Lots, Bid + PriceLevel * Point, Slippage, Ask+StopLoss *Point, Ask-TakeProfit*Point, “EAName”, MagicNumber, 0, 红色)


正如您再次看到的,订单类型的第一个参数已被修改为 OP_SELL,价格的第三个参数已被修改以指示入场价格保持在 PriceLevel,默认为比当前买价高 20 点。

到期参数(倒数第二个)

假设您想为挂起的止损买单设置到期日。 这个过期时间位于倒数第二个参数,需要以秒为单位。


例如,假设我有一个在小时图上运行的 EA,我希望它在 6 小时后到期。 那么,我将不得不计算 6 小时内有多少秒,如下所示:60*60*6 = 21600


OrderSend(), OP_BUYSTOP, Lots, Ask + PriceLevel * Point, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, TimeCurrent()+21600, 蓝色)


该订单将在 6 小时后到期。


有时我喜欢优化这个过期时间,因此我喜欢把它放在一个外部变量中。 假设我想优化以小时为单位的到期时间。


然后我创建一个名为 PendingExpirationHours 的外部变量和一个计算小时数的双精度变量:


extern double PendingExpirationHours = 6;// 将其与其他外部变量放在源代码的顶部 double expiration = 60*60*PendingExpirationHours;


OrderSend(), OP_BUYSTOP, Lots, Ask + PriceLevel * Point, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, TimeCurrent()+expiration, 蓝色)


现在,如果我愿意,我可以继续优化 PendingExpirationHours,范围为 0-50,步长为 1,以查看哪个小时最适合挂单的到期时间。