OrderSendAsync()函数

 

说明中说,OrderSendAsync()函数被设计用来执行异步操作,而不需要等待服务器 对发送的请求作出回应 。在成功执行后 结果 变量中的 响应代码包含值TRADE_RETCODE_PLACED( 代码10008)--"已下订单"。 成功执行.并不能保证该请求已经到达交易服务器并 被接受处理。

一方面,我们知道retcode 字段包含了交易 服务器的返回代码--即假定这个代码是由服务器而不是用户终端产生的。另一方面,《参考手册》指出,对于OrderSendAsync()函数,即使交易请求 本身没有到达交易服务器,也可以返回由服务器生成的一个代码(代码10008)。

问题1:OrderSendAsync函数 的代码10008到底是在哪里(在哪个阶段)产生的?[假设这个代码可以在不涉及贸易服务器的情况下被返回]。

问题2:代码10008是交易服务器的代码,还是在服务器收到交易请求之前在客户终端侧产生的代码?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1.终端,在成功的调度操作中(订单成功从飞机上放下,但我们不知道下一步是什么)。

2.对同义词表示歉意,但我将以同样的方式回答:是的,代码10008是贸易服务器的响应代码。是的,这个代码是由终端设置的,当时是在...下一点 1.

你为什么要在字里行间寻找已经写得很清楚的东西?

 

异步交易订单模型涉及多个事件和订单状态。

市场订单状态图

条件性订单状态图

目前在MT5。

  1. CREATED - OrderSendAsync和OrderSend函数被调用的事实(MT5中的这种订单状态是无法从外部识别的)。
  2. 如果订单被取消(终端本身通过其过滤器将其切断。例如,限价比当前价格差),OrderSend和OrderSendAsync的响应是负面的。
  3. OPENED是OrderSendAsync的TRADE_RETCODE_PLACED的结果(你的订单成功通过终端的内部过滤器并被发送到服务器)。
  4. SUBMIT_OK - 服务器已接受你的交易指令。如果它是一个挂单,OrderSend将完成其执行。如果市场 - 继续等待。
  5. FILLED - 您的订单处于执行状态(例如,您已经通过STP发送了订单,正在等待回复)。继续等待。
  6. FILL_OK - 您的订单已经执行。如果市场 - OrderSend将完成其执行。

更多细节请见上面的图表。

 
Rosh:

1.终端,在成功的调度操作中(订单成功从飞机上放下,但我们不知道下一步是什么)。

2.对同义词表示歉意,但我将以同样的方式回答:是的,代码10008是贸易服务器的响应代码。是的,这个代码是由终端设置的,当时是在...下一点 1.

你为什么要在已经明确写好的字里行间寻找呢?

我不是在寻找 "字里行间",但我还是想了解两个(现在)交易功能的阶段。

在你对OrderSendAsync函数的评论中,你说"该函数在目的和参数上与OrderSend() 相似"。但是,从你的回答来看,OrderSendAsync函数与OrderSend函数不太一样。后者是为了检查服务器上的交易请求,所以OrderSend()返回的代码是由服务器本身产生的代码,而不是其他物质。在OrderSendAsync()的情况下,返回代码是由终端产生的,所以这个代码(代码10008)不能被认为是服务器返回代码。这是 "由终端生成的代码",即使你正式将其纳入服务器的代码列表。

换句话说,这两个功能是两种方法:"服务器生成的代码 "与 "终端生成的代码"。在这方面,这些函数是不一样的。 要正确理解 "返回代码 "到底来自谁--来自服务器还是来自终端,就必须知道这个微妙的问题。

 
hrenfx:

OPENED是OrderSendAsync的TRADE_RETCODE_PLACED的结果。

    我们是否可以得出结论,TRADE_RETCODE_PLACED(10008)在使用原始OrderSend函数 时,其期望值完全没有用?

    谢谢你的图示!

    如何正确翻译 "订单条件得到满足"?

     
    Yedelkin:

    我们是否可以得出结论,TRADE_RETCODE_PLACED(10008)在使用原始OrderSend函数 时,其期望值完全没有用?

    TRADE_RETCODE_PLACED与连续的OrderSend没有关系。

    如何正确翻译 "订单条件得到满足"?

    当前的价格满足了订单条件。而不是FILLED,它可以是CANCELLED,例如,如果没有足够的保证金来执行订单。

    同样,为了异步工作,我们需要一个强大的事件系统,在到达时有一个选项可以接收。

    • 该事件的文本信息。
    • 其创作时间。
    • 它与哪个顺序有关。
    • 信息的类型(新闻、订单、通信状态等)。

    平台本身的架构应该是非常周密的。如果在架构设计阶段存在差距,那么要绕过这些差距来实现普遍性是非常困难的。

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx:

    耶德尔金

    我们是否可以得出结论,TRADE_RETCODE_PLACED(10008)在使用原始OrderSend函数 时,其期望值完全没有用?

    TRADE_RETCODE_PLACED与连续的OrderSend没有关系。

    在那里!我大约在半年前凭直觉得出这个结论,而你也证实了这一点:)已经很好了 :)
     
    hrenfx:

    同样,为了异步工作,你需要一个强大的事件系统,其中有一个选项是到达时接收。

    • 该事件的文本信息。
    • 其创作时间。
    • 它指的是什么顺序。
    • 信息类型(新闻、订单、通信状态等)。
    这是关于,除其他事项外,需要详细说明OnTrade事件吗?
     
    Yedelkin:
    在那里!我大约在半年前凭直觉得出这个结论,而你也证实了这一点:)已经很好了 :)
    当有人证实他的推理的正确性时,一个人总是很高兴。不管它在多大程度上与现实相吻合。
     
    Rosh:
    当有人证实他们的推理的正确性时,一个人总是很高兴。无论它是多么真实。
    那么,在过去的八个月里,没有人反驳过这个人的公开结论。理论上和试验结果上都没有。但还是要感谢你播下的疑惑 :)
     

    应该澄清一下。

    OrderSend的TRADE_RETCODE_PLACED 是服务器响应。

    OrderSendAsync的TRADE_RETCODE_PLACED是终端响应。

    虽然这些代码是相同的,但它们有相当不同的含义。开发人员很可能会修复这个模糊不清的问题。

    这就是为什么你应该理解它。

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    必须在适当的背景下理解。