请看这个主题,可能有点混乱,但你可以找到思路。
MT5交易系统与MT4非常不同,所以你必须改变你的想法。

- www.mql5.com
我正在编写一个EA,修改我为MT4编写的EA。我使用OrderSend打开一个订单。
简单地说,如果我需要了解(从历史上看),如果发送的订单(顺便说一下....,我必须检查订单、交易或头寸?),已经被关闭,因为它已经达到StopLoss。
我在论坛上检查过,但我没有找到我需要的东西....。
订单_价格_当前 | 只给出了订单符号的当前价格 |
不能与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); }
对不起,我想说的是,这个问题在我看来是很有趣的。
我正在做从mql4到mql5的过渡,我发现交易和历史系统的变化相当具有挑战性。
为了知道历史记录中的交易是否因止损、止盈或其他原因被关闭。
- 在MT4中,你可以比较OrderStopLoss(), OrderTakeProfit()和OrderClosePrice(),或者简单检查OrderComment()。
- 在MT5中,唯一可能的方法是检查交易的评论:HistoryDealGetString(tk, DEAL_COMMENT)
这很有趣,但如果我理解正确的话,它的目的是根据事件处理来识别交易的变化,在飞行中。
所以必须有一个程序在听(比如在图表上运行的专家顾问),否则什么都检测不到。
在我看来,交易平仓的原因检测必须在历史交易簿上进行,因为它是(或应该是)知道发生了什么的最安全方式,因为它被写在某个地方,而不是从空中抓取。
我的分析有误吗?你怎么看?

- www.mql5.com
不,他们不这样做。那是你的 经纪人。 |
好吧,MT4和MT5经纪商都把这个字符串放在评论上......至少我测试过的几个。
我同意,这不是一个好主意,因为评论可能会被经纪人的手改变。
但我看不出这有什么不同,因为我在交易历史书中找不到其他的痕迹。
是否有更好的方法来实现这一目标?
我在2年前联系了服务台(关于MT4)。
他们回答说
所以它是由系统完成的,而不是经纪人。但如果经纪人可以改变它,还是没有帮助。
提醒你一下,我没有注意到经纪人改变订单注释的任何情况。
通常,在我的代码中,更重要的是知道一个交易是以盈利还是亏损结束。当使用追踪止损时,交易可能会触及止损,但仍然是盈利的。
我在2年前联系了服务台(关于MT4)。
他们回答说
所以它是由系统完成的,不是经纪人。但如果经纪人可以改变它,还是没有帮助。
请注意,我还没有注意到经纪人改变订单注释的任何情况。
通常,在我的代码中,更重要的是知道一个交易是盈利还是亏损结束。当使用追踪止损时,交易可能会触及止损,但仍然是盈利的。
谢谢你,这正是我所希望的,因为我找不到更好的解决方法。
我正在编写一个EA,修改我为MT4编写的EA。我使用OrderSend打开一个订单。
简单地说,如果我需要了解(可能来自历史),如果发送的订单(顺便....,我必须检查订单,交易或头寸?),已经被关闭,因为它已经达到StopLoss。
我在论坛上检查过,但我没有找到我需要的东西....。
订单_价格_当前
只给出了订单符号的当前价格
不能与ORDER_SL 比较。我想ORDER_PRICE_CURRENT只是符号的当前价格,而不是订单的收盘价。
谢谢大家的支持。
EDIT :
由于MT5在Build 1640之后提供了新的可能性,这个话题现在大部分已经过时了。
请参阅该主题的最后一篇文章,了解一些例子。