堡垒。执法问题 - 页 15

 

下午好,Renat!

你能否对FORTS(真实)的以下情况作出评论。

滚筒里有一个价格,体积为8。本卷由两名通讯员制作(4人同价)。

使用限价 单买入(卖出)这个量(8)。

会发生以下情况。

1.如果订单完全被填满,我在OnTradeTransaction 中得到。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED

2.如果该订单被第二个对应方的成交量填满,我在OnTradeTransaction中得到如下信息。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

3.如果订单被填满,在OnTradeTransaction中我得到:3:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED

为什么?因为在第二和第三种情况下,订单被部分执行。

2015.03.02 17:10:26.204 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1
2015.03.02 17:10:26.234 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1 placed for execution in 23 ms
2015.03.02 17:10:26.254 Trades  'xxxxx': deal #9801184 sell 4.00 GOLD-6.15 at 1222.1 done (based on order #11413991)

2015.03.02 17:10:26.254 Forts_trader (GOLD-6.15,H1)     OnTradeTransaction: ордер удалён. Билет = 11413991


 

为这个订单写了一张支票,结果是这样的。

这发生在终端的1060版本和服务器的1035版本上。

晚上(主)清场后,终端更新为1085,但我

停止交易以找出原因。

在演示中(1085-1085),我无法重现这个错误(堆栈中没有快速变化)。

 

"调出 "了我所有订单的历史。

该错误存在于1035、1060和1085的构建中。

 

在第一种情况下,订单在一次交易中被完全执行,未执行的余额不会被删除,因为订单已经被执行了全部数量。在日志中,我们可以看到你提到的一个条目。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED


在第二种情况下,订单被部分执行,未执行的余额被删除。发生这种情况是因为你设置了订单执行策略 -ORDER_FILLING_IOC

表示同意在订单规定的限度内以市场上的最大成交量执行交易。如果不可能完全执行,订单将被执行为可用的量,而未执行的订单量将被取消


在你的案例中,订单是在1222.1的价格下的8手。在下订单时,在不低于1222.1的价格下的反订单量是4手。结果,4个手被作为一个交易执行(因为4个手由一个相反的订单代表)。订单的剩余部分被撤回,即订单被取消。

根据你提供的日志。

该订单被部分执行。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

然后剩余部分被删除,即订单被取消了。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED
 
Renat:

在第一种情况下,订单在一次交易中被完全执行,未执行的余额不会被删除,因为订单已经被执行了全部数量。在日志中,我们可以看到你提到的一个条目。



在第二种情况下,订单被部分执行,未执行的余额被删除。发生这种情况是因为你设置了订单执行策略 -ORDER_FILLING_IOC

表示同意在订单规定的限度内以市场上的最大成交量执行交易。如果不可能完全执行,订单将被执行为可用的量,而未执行的订单量将被取消


在你的案例中,订单是在1222.1的8手。在下订单的时候,有4手的价格不低于1222.1。结果,4个手被作为一个交易执行(因为4个手由一个相反的订单代表)。订单的剩余部分被撤回,即订单被取消。

根据你提供的日志。

该订单被部分执行。

然后,余额被删除,即订单被取消。

那么如何解释这份文件呢?

问题是在TradeTransaction上,当ORDER_STATE_CANCELED ! 时,没有关于交易的信息(TRADE_TRANSACTION_DEAL_AD)。

但这个交易是!

 
Mikalas:

那么该文件应该如何解释呢?

逮捕令已被解除。客户可以被释放回家。
 
Renat:
该命令已被 取消。可以让当事人回家。

问题是在TradeTransaction上,当ORDER_STATE_CANCELED ! 时,没有交易信息(TRADE_TRANSACTION_DEAL_AD)。

但这笔交易是!

那你在哪里看到PARTIAL(这是一种方式)?只有取消了!

而在历史记录中,它被存储为(见图)CANCELED。

 

下午好,Renat!

您认为部分执行的订单应作为ORDER_STATE_CANCELED 订单存储在历史中是否正确。

在OnTradeTransaction中,我们不应该对部分执行的订单的交易进行确认?

告诉我,目前的平台逻辑是保持现状,还是准备在可预见的未来做出改变?

 
kond777:

下午好,Renat!

您认为部分执行的订单应作为ORDER_STATE_CANCELED 订单存储在历史中是否正确。

在OnTradeTransaction中,我们不应该对部分执行的订单的交易进行确认?

告诉我,目前的平台逻辑是保持现状,还是准备在可预见的未来做出改变?

你自己检查过吗,还是只是对米卡拉斯的不完整描述作出反应?该命令毕竟是IOC

我们再次检查了我们这边的行为。

1.安装了MQL5的处方-处理TradeTransaction事件 一文中的专家顾问

2.我们对低流动性工具SILV-3.15下了一个IOC 订单。该订单是为了以16.48的价格卖出11手,而这个价格只有1手。

我们得到了以下信息。

在终端。


除了订单被 "取消 "的事实外,我们可以看到11个请求中的1手被执行,这是正确的行为。

在专家顾问日志中。

2015.03.03 16:32:56.022 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2015.03.03 16:32:56.173 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.325 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2015.03.03 16:32:56.477 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.628 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD   <====== транзакция о сделке пришла
2015.03.03 16:32:56.779 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.930 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_DELETE
2015.03.03 16:32:57.082 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_HISTORY_ADD

也就是说,关于交易的交易来到了OnTradeTransaction()。如果交易没有来,你根本就不会在终端看到它。请确认TRADE_TRANSACTION_DEAL_ADD交易没有到来。将你的EA的行为与专家顾问建议的上述行为进行比较。

 

早上好,Renat!

你不保证OnTradeTransaction事件的到来,所以它没有到来(TRADE_TRANSACTION_DEAL_AD)。

而当TRADE_TRANSACTION_HISTORY_ADD事件发生时,订单状态为ORDER_STATE_CANCELED

这就是 "腿长 "的地方。

在我看来,如果该订单(无论它是如何被执行的)被部分执行,那么它的状态是

应在历史中记录为ORDER_STATE_PARTIAL