voix_kas: Если не возражаете, хотелось бы углубиться в вопрос интерпритации кодов возврата. Из 30 задекларированных вариантов ответа (будем надеятся, что с недекларированными мы не столкнёмся) 24 - указывают на явный отказ в размещении ордера. Остальные 6:
当我们在等待关于这个问题的文章时,我是否正确理解了贸易操作分析的一般概念。
也就是说,大致上,在没有分析retcode的情况下发送订单后,我们在工作循环(OnTick())中使用 "AllowTrade "标志禁止交易操作。
只有在找到订单号并对其命运做了一些分析之后,交易禁令才会在OnTrade()中解禁。
我们有两个问题。
1.在OnTrade中要检查的订单票是什么? 在其有效期内,哪些状态是最终状态?
2.我知道Tick事件的队列(OnTick)可以 "下降"。也就是说,如果另一个Tick事件到来,而OnTick函数(来自前一个Tick)还没有完成它的工作,当前的事件将被 "放弃",也就是说,它不会被处理。贸易事件(OnTrade)是否有类似的方法?例如,是否有可能,在主循环中,我放了一个交易禁令,而刚刚发送的订单上的OnTrade事件 "下降 "了,因为在它到达的那一刻,我仍然在处理一些与发送相应交易订单 相同的tick?
没有处理过这个话题,但《手册》是这样说的。
没有处理过这个话题,但《手册》是这样说的。
一般理解。正如papaklass 已经指出并在文章中说的https://www.mql5.com/ru/articles/232。
只有一种有保障的 方法可以找出交易账户的确切变化。这种方式是为了记住交易和交易历史的状态,并将新的状态与保存的状态进行比较。
专家顾问中还有一个服务块。:(
实际上,问题是这样的。我们能否在不分析所有变量(订单/交易/仓位)的情况下减少代码大小,而只关注从OrderSend结果中获得的订单号?或者这个数字可能是非唯一的/没有反映在历史上?
当然了。如果一个交易请求 导致收到一张订单票,那么这张票是唯一的,订单的整个命运可以通过它来追踪。
在这里,你可以看到订单票是如何在历史中使用的:MQL5 参考 / 交易函数 / HistoryOrderGetInteger
当然了。如果一个交易请求 产生了一个订单票据,该票据是唯一的,可以用来跟踪订单的整个命运。
MqlTradeResult类型的变量在被使用之前通常会被清零。所以Result.order字段包含零值。我从来没有见过这个字段在交易请求发送 失败后有不同的值。
voix_kas: Если не возражаете, хотелось бы углубиться в вопрос интерпритации кодов возврата. Из 30 задекларированных вариантов ответа (будем надеятся, что с недекларированными мы не столкнёмся) 24 - указывают на явный отказ в размещении ордера. Остальные 6:
1.TRADE_RETCODE_PLACED 假设没有挂单。在市场交易期间(SYMBOL_TRADE_EXECUTION_MARKET),该答案是否可行?
TRADE_RETCODE_DONE 没有什么可以进一步检查。一切都完全按照专家顾问的要求进行。
3.TRADE_RETCODE_DONE_PARTIAL 我假设这个答案与TRADE_RETCODE_DONE相同,因为ORDER_FILLING_IOC模式。
4.TRADE_RETCODE_ORDER_CHANGED 这是否意味着毫不含糊地拒绝了我们的贸易订单?
5.TRADE_RETCODE_LOCKED 我想这是最糟糕的情况。在这种情况下,我们应该怎么做?我建议,订单号还没有出来。贸易流动很繁忙。我们不能交易,也不清楚我们应该如何知道贸易流是否被解锁。
6.TRADE_RETCODE_FROZEN 这是否意味着毫不含糊地拒绝了我们的贸易订单?
请对每个项目进行评论。
不幸的是,我的知识不足以对每一点进行全面评论。好吧,如果发生了什么,我的同事们会纠正它。
1.论坛上曾经提到过一种情况,就是可以在一个次级经纪商那里开立交易账户。在这种情况下,子经纪人可以将交易请求进一步处理(给经纪人),并向客户终端发送TRADE_RETCODE_PLACED。经纪人最终是否会处理这样的交易请求还不得而知。
2.是的,我也这么认为。我们唯一应该记住的是,这个订单的信息将在终端数据库中以异步方式接收。
我认为我们正在讨论在ORDER_FILLING_IOC和ORDER_FILLING_RETURN 模式下部分执行交易请求的问题。
4.https://www.mql5.com/ru/forum/1111/page124#comment_18407
5.我对这个代码完全不了解。从技术上讲,事实证明,由于经纪人的一些内部原因,该请求没有被处理。以后是否会被处理还不清楚。我自己把这个代码等同于拒绝交易请求。
6.https://www.mql5.com/ru/forum/1111/page123#comment_18372
...一般来说--尝试在论坛上进行关键词搜索。你可以找到更多的信息 :)
不幸的是,我没有足够的知识来全面评论每一个观点。嗯,如果有的话,同事们会纠正它。
1.论坛上曾经提到过一种情况,就是可以在一个次级经纪商那里开立交易账户。在这种情况下,子经纪人可以将交易请求进一步处理(给经纪人),并向客户终端发送TRADE_RETCODE_PLACED。经纪人最终是否会处理这样的交易请求还不得而知。
2.是的,我也这么认为。我们唯一应该记住的是,这个订单的信息将在终端数据库中以异步方式接收。
我认为我们正在讨论在ORDER_FILLING_IOC和ORDER_FILLING_RETURN 模式下部分执行交易请求的问题。
4.https://www.mql5.com/ru/forum/1111/page124#comment_18407
5.我对这个代码完全不了解。从技术上讲,事实证明,由于经纪人的一些内部原因,该请求没有被处理。以后是否会被处理还不清楚。我自己把这个代码等同于拒绝交易请求。
6.https://www.mql5.com/ru/forum/1111/page123#comment_18372
...一般来说--尝试在论坛上进行关键词搜索。你可以找到更多的信息:)。
这里我们有以下情况:30个代码中的26个(包括TRADE_RETCODE_ORDER_CHANGED和TRADE_RETCODE_FROZEN)代表明确拒绝请求(不产生订单)。
TRADE_RETCODE_DONE和TRADE_RETCODE_DONE_PARTIAL - 保证创建的订单。
如何正确执行TRADE_RETCODE_PLACED(非待定)和TRADE_RETCODE_LOCKED是一个问题。希望MQ能对这两个代码提出意见。