贸易交易时 - 页 9

 
Aleksey Mavrin:

是的,你是对的,因为在这种情况下,它是一个位置标识符,在整个生命过程中是不变的。我把它与头寸的票据混淆了,它在展期和净值化过程中会发生变化。

但我不明白,当一个头寸被部分平仓时,票据不会变成影响该头寸的最后一笔订单的票据?

我将审查我的代码,谢谢。我参观了这个论坛,并非一无所获)

关于不在当前或历史订单列表中的 "丢失的订单":在我看来,这不是一个错误,我只是需要仔细研究一下以下功能

我认为这不是一个错误,只是需要仔细研究终端服务器MT-市场的特殊性(在即时执行的情况下,市场不起作用)。我想是的,看--终端发送一个市场订单,在同步功能的情况下--它等待并从服务器得到一个回复。

如果没有错误,回复可能只是TRADE_RETCODE_DONE(在即时执行的情况下,它仍然是重新报价,但到目前为止是市场类型),这基本上意味着服务器已经将订单发送到市场,并且它

它实际上意味着服务器已经发送了订单,并在等待其回复。如果我没有弄错的话,此刻订单的状态是ORDER_STATE_STARTED,而且它的票据是已知的。如果订单被执行,服务器向终端发送OnTradeTransaction,订单状态变为ORDER_STATE_FILLED,交易被知晓。

和位置变得已知。只有在这个时候,终端才会将该订单记录到历史记录中。它不会事先这样做,因为我们不确定它发生了什么,而且它已经给出了来自服务器的最初答复。

这是直到订单在ECN网络或其他地方执行的时间,他们不在两个列表中的任何一个。也就是说,在市场订单的情况下,它只出现在历史上(我不确定即时执行期间的重新报价情况)。

它将永远不会出现在开放的列表中。当一个挂单触发时,它被从未结订单的列表中删除,因为它已经成为一个市场订单,我们等待市场服务器的回应,然后它被发送到历史。

我说的对吗?

并非如此。
 
Aleksey Mavrin:

我说的对吗?

安德烈解释得很清楚。

关于交易、自动交易系统和策略测试的论坛

贸易交易时

Andrey Khatimlianskii, 2019.12.17 08:24

不,事情更糟糕。

订单在从待定(或市场)转变为历史(执行或取消)的时刻,有一段时间从终端上完全消失了。它既没有出现在待定(或 "开始 "的市场)中,也没有出现在历史上的市场中。

所以这不是一个执行的问题,而是这两个表的同步问题。服务器的回答是("订单已执行,产生了某某交易"),它被从一个表中删除,但没有进入另一个表中。


问题不在于OrderSend。有很长一段时间有BuyLimit的存在。而突然间,它和Buy-positions就不知所踪了。这大约是发生的相同情况。

 
fxsaber:

安德烈写得很好。


这与OrderSend无关。在很长一段时间里,它是BuyLimit。而突然间,无论是它还是买方的位置都找不到了。这大约是发生的相同情况。


阿尔乔姆-特里什金
并非如此。

我已经明白了。甚至市场订单在当前订单列表中也有一段时间(但似乎它没有在终端的交易标签上显示?

然后,当订单被执行并收到来自服务器的相应交易时,终端执行以下操作

1.从当前订单中删除该订单

2.写出历史上的顺序

3.把交易写到清单上

4.将位置写到列表中

并考虑到专家顾问和终端本身在独立的平行流中工作,如果你在这个短时期内要求开仓,终端将无法开仓。

位置,它还不会在那里。正如我之前写的,如果这是根据DBMS标准发生的,就不会有这样的事情,因为那里的所有4个操作都会被合并到一个事务中,你就不会被 "中间状态 "所困扰。

对吗?但我实际上很感兴趣--如果我们依赖OnTrade和OnTradeTransaction,那么这些处理程序不应该有滞后性,它们是通过在相应的表中创建变化而发生的,对吗?

或者终端在接收事件时简单地将它们发送给专家顾问,并同时改变表格?在后一种情况下,当然是错误的,需要纠正,特别是如果OnTradeTransaction,可以从中获得实际的信息,就不能保证。

 
Aleksey Mavrin:

明白了。甚至市场订单也在当前订单列表中出现了一段时间(只是在终端的交易标签中似乎没有显示?)

有时,当它处于开始状态时,你甚至可以用眼睛看到它在那里。而且用机器人很容易跟踪。


阿列克谢-马夫林

而考虑到专家顾问和终端本身是在独立的平行流中运行的,情况如下:如果你在这个短时期内申请一个头寸,它不会出现。

我们不是指职位,而只是指订单。

我们需要的时间比我们有时得到的要少得多,以增加一个条目。而且我不是认真的,不能保证我们会得到合适的交易环境。


阿列克谢-马夫林

而我实际上想知道--如果我们依赖OnTrade和OnTradeTransaction,那么这些处理程序就不应该有滞后性,因为它们确实发生在变化被写入适当的表格时?

或者终端只是将它们发送到Expert Advisor,同时接收事件和改变表格?在后一种情况下,这肯定是不正确的,需要纠正,特别是当OnTradeTransaction,我们可以从中获得实际的信息时,就不能保证。

纯粹的OnTrade是没有用的。

你也可以在其中结合等待订单表的同步,这是个口味问题。但你仍然需要等待。

 
Aleksey Mavrin:

关于 "丢失的订单",它不在当前或历史订单列表中:我认为这不是一个错误,我们只需要仔细研究终端服务器MT-Market的功能(在即时执行的情况下,市场被淘汰)。我认为终端发送市场订单,在同步功能的情况下,它等待并得到服务器的回复。 如果没有错误,回复可能只是TRADE_RETCODE_DONE(在即时执行的情况下有重新报价,但到目前为止是市场订单),这实际上意味着服务器已将订单发送到市场,并等待回复。如果我没有弄错的话,此刻订单的状态是ORDER_STATE_STARTED,而且它的票据是已知的。如果订单被执行,服务器向终端发送OnTradeTransaction,订单状态变为ORDER_STATE_FILLED,交易和头寸就被知道。只有在这个时候,终端才会将该订单记录到历史中。

市场与此毫无关系。

MetaTrader服务器向ECN或其他地方发送订单,得到答案,并将其发送到终端。而在终点站,时间上也有偏差。