如何检查一个订单是否已被平仓止损

Francesco Fava  

我正在编写一个EA,修改我为MT4编写的EA。我使用OrderSend打开一个订单。

简单地说,如果我需要了解(可能来自历史),如果发送的订单(顺便....,我必须检查订单,交易或头寸?),已经被关闭,因为它已经达到StopLoss。
我在论坛上检查过,但我没有找到我需要的东西....。

使用HistoryOrderGetDouble,参数为ENUM_ORDER_PROPERTY_DOUBLE

订单_价格_当前

只给出了订单符号的当前价格

不能与ORDER_SL 比较。我想ORDER_PRICE_CURRENT只是符号的当前价格,而不是订单的收盘价

谢谢大家的支持。

EDIT :

由于MT5在Build 1640之后提供了新的可能性,这个话题现在大部分已经过时了。

请参阅该主题的最后一篇文章,了解一些例子

Alain Verleyen  

请看这个主题,可能有点混乱,但你可以找到思路。

MT5交易系统与MT4非常不同,所以你必须改变你的想法。

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
Jose Miguel Soriano  
frankge973:

我正在编写一个EA,修改我为MT4编写的EA。我使用OrderSend打开一个订单。

简单地说,如果我需要了解(从历史上看),如果发送的订单(顺便说一下....,我必须检查订单、交易或头寸?),已经被关闭,因为它已经达到StopLoss。
我在论坛上检查过,但我没有找到我需要的东西....。

使用HistoryOrderGetDouble,参数为ENUM_ORDER_PROPERTY_DOUBLE

订单_价格_当前

只给出了订单符号的当前价格

不能与ORDER_SL 比较。我想ORDER_PRICE_CURRENT只是符号的当前价格,而不是订单的收盘价

谢谢大家的支持。

是这样吗?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
Alain Verleyen  
Jose Miguel Soriano:

是这样吗?

这个问题是关于mql5的,你的代码是mql4.

订单评论 并不是一种可靠的编码方式。

MARCO RICCARDI  
Alain Verleyen:

这个问题是关于mql5的,你的代码是mql4。

订单评论 并不是一种可靠的编码方式。

对不起,我想说的是,这个问题在我看来是很有趣的。

我正在做从mql4到mql5的过渡,我发现交易和历史系统的变化相当具有挑战性。

为了知道历史记录中的交易是否因止损、止盈或其他原因被关闭。

  • 在MT4中,你可以比较OrderStopLoss(), OrderTakeProfit()和OrderClosePrice(),或者简单检查OrderComment()。
  • 在MT5中,唯一可能的方法是检查交易的评论:HistoryDealGetString(tk, DEAL_COMMENT)
MT4和MT5在订单关闭时,止损或止盈都会在注释中写上[SL价格] [TP价格](方式不同......但仍然)。

我读了这篇文章:https://www.mql5.com/en/forum/11996

这很有趣,但如果我理解正确的话,它的目的是根据事件处理来识别交易的变化,在飞行中。

所以必须有一个程序在听(比如在图表上运行的专家顾问),否则什么都检测不到。

在我看来,交易平仓的原因检测必须在历史交易簿上进行,因为它是(或应该是)知道发生了什么的最安全方式,因为它被写在某个地方,而不是从空中抓取。

我的分析有误吗?你怎么看?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
William Roeder  
Marco: MT4和MT5在订单关闭止损或止盈时,都会在注释中写上[SL价格] [TP价格](方式不同......但仍然是)。
,他们不这样做。那是你的 经纪人。
这不是一个好主意,经纪商可以改变评论,包括完全替换
MARCO RICCARDI  
whroeder1:
,他们不这样做。那是你的 经纪人。

好吧,MT4和MT5经纪商都把这个字符串放在评论上......至少我测试过的几个。

我同意,这不是一个好主意,因为评论可能会被经纪人的手改变。

但我看不出这有什么不同,因为我在交易历史书中找不到其他的痕迹。

是否有更好的方法来实现这一目标?

Keith Watford  

我在2年前联系了服务台(关于MT4)。

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

他们回答说

每个经纪人都会自动完成。而且经纪人可以自己改变这个值。

所以它是由系统完成的,而不是经纪人。但如果经纪人可以改变它,还是没有帮助。

提醒你一下,我没有注意到经纪人改变订单注释的任何情况。

通常,在我的代码中,更重要的是知道一个交易是以盈利还是亏损结束。当使用追踪止损时,交易可能会触及止损,但仍然是盈利的。

MARCO RICCARDI  
Keith Watford:

我在2年前联系了服务台(关于MT4)。

他们回答说

所以它是由系统完成的,不是经纪人。但如果经纪人可以改变它,还是没有帮助。

请注意,我还没有注意到经纪人改变订单注释的任何情况。

通常,在我的代码中,更重要的是知道一个交易是盈利还是亏损结束。当使用追踪止损时,交易可能会触及止损,但仍然是盈利的。

谢谢你,这正是我所希望的,因为我找不到更好的解决方法。

Xiangdong Guo  
honest_knave:
我相信两位发帖者都是将MQL4转换为MQL5的。

总之,只要比较收盘价 和止损价即可。

注意:在真实的(尤其是ECN)账户中,可能触发价格与预先设定的止损价格之间有差距,所以使用"<="或">="。

Keith Watford  
Xiangdong Guo:

总之,只要比较收盘价 和止损价即可。

注意:在真实的(尤其是ECN)账户中,可能触发价格与预先设定的止损价格有差距,所以使用"<="或">="。

你不能将收盘价与止损价进行比较。滑点意味着它的收盘价可能比止损价高或低。

所以"<="或">="是没有用的。

原因: