フォルツァ執行上の問題点 - ページ 15

 

レナートさん、こんにちは。

FORTS(リアル)の以下の状況について、コメントをお願いします。

8の容量のタンブラーに価格があります。本編は、2人の通信員(同価格の4人)が作った

この数量(8)を指値で 買う(売る)のです。

次のようなことが起こります。

1.注文が完全に満たされた場合、私はOnTradeTransactionで 取得します。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED

2.2番目の対応者の数量で注文を満たした場合、OnTradeTransactionで次のようになります。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

3.1番目の対応者の数量で注文が満たされた場合、私はOnTradeTransactionで取得します。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED

なぜ?なぜなら、2番目と3番目のケースでは、注文が部分的に実行されたからです。

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 ビルドでエラーが発生します。

 

最初のケースでは、注文は1回の取引で完全に約定し、未約定の残高は削除されません。これは、注文が全数量について約定したためです。ログを見ると、ご指摘のようなエントリーが一つあります。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED


2つ目のケースは、注文の一部が実行され、未実行の残高が削除されます。これは、注文実行ポリシー -ORDER_FILLING_IOC が設定されているために起こります。

注文で指定された範囲内で、市場で入手可能な最大の数量で取引を行うことに合意したことを示す。全約定が不可能な場合は、約定可能な数量の注文が約定し、未約定の数量の注文は取消さ れます。


あなたの場合、1222.1で8ロットの注文でした。注文が出された時点で、1222.1より悪い価格での反対注文の数量は4ロットでした。その結果、4つのロットが1つの取引として執行されました(4つのロットが1つの反対注文で表現されたため)。残りの注文を取り下げた、つまり注文をキャンセルしたのです。

ご提供いただいたログによると

注文が一部実行された。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

そして、残りを削除、つまり注文をキャンセルした。

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED
 
Renat:

最初のケースでは、注文は1回の取引で完全に約定し、未約定の残高は削除されません。これは、注文が全数量について約定したためです。ログを見ると、ご指摘のようなエントリーが一つあります。



2つ目のケースは、注文の一部が実行され、未実行の残高が削除されます。これは、注文実行ポリシー -ORDER_FILLING_IOC が設定されているために起こります。

注文で指定された範囲内で、市場で入手可能な最大の数量で取引を行うことに合意したことを示す。全約定が不可能な場合は、約定可能な数量の注文が約定し、未約定の数量の注文は取消さ れます。


あなたの場合、1222.1で8ロットの注文でしたが、注文が出された時点では、1222.1より悪い価格では4ロットありました。その結果、4つのロットが1つの取引として執行されました(4つのロットが1つの反対注文で表現されたため)。残りの注文を取り下げた、つまり注文をキャンセルしたのです。

ご提供いただいたログによると

注文が一部実行された。

そして、残高がなくなる、つまり注文がキャンセルされる。

では、DOCUMENTATIONをどう解釈すればいいのか。

ORDER_STATE_CANCELED ! のとき、onTradeTransactionには取引に関するメッセージ(TRADE_TRANSACTION_DEAL_ADD)がないことです。

しかし、トレードはWAS !

 
Mikalas:

では、DOCUMENTATIONはどのように解釈されるべきなのでしょうか?

令状は解除 されました。クライアントを帰宅させることができます。
 
Renat:
命令は 解除された。クライアントを帰宅させることができる。

ORDER_STATE_CANCELED ! のとき、onTradeTransactionにはトランザクションメッセージ(TRADE_TRANSACTION_DEAL_ADD)がないことです。

しかし、取引はWAS !

また、partial(それも一つの方法)はどこでご覧になりましたか?CANCELEDのみ

そして履歴にはCANCELEDとして保存されている(写真参照)。

 

レナートさん、こんにちは。

部分的に実行された注文は、ORDER_STATE_CANCELED 注文として履歴に保存されるのが正しいと思われますか?

また、OnTradeTransactionでは、部分的に約定した注文の取引の確認がないはずですが?

教えてください。現在のプラットフォームのロジックはこのままなのか、それとも当面の間、変更を加える用意があるのでしょうか?

 
kond777:

レナートさん、こんにちは。

部分的に実行された注文は、ORDER_STATE_CANCELED 注文として履歴に保存されるのが正しいと思われますか?

また、OnTradeTransactionでは、部分的に約定した注文の取引の確認がないはずですが?

教えてください。現在のプラットフォームのロジックはこのままなのか、それとも当面の間、変更を加える用意があるのでしょうか?

自分で確認したのか、それともミカラの不完全な記述に反応しただけなのか?注文は結局IOC だった。

改めて私たちの側で挙動を確認しました。

1.MQL5の処方箋 - TradeTransactionイベントを処理 する」の記事からExpert Advisorを インストール。

2.低流動性商品SILV-3.15にIOC 注文を出した。この価格では1ロットしか入手できないが、16.48という価格で11ロットを売る注文が出された。

を手に入れました。

端末で


注文が「キャンセル」されていることを除けば、要求された11ロットのうち1ロットが約定したことがわかり、これは正しい動作であることがわかります。

Expert Advisorのログで。

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の動作とExpert Advisorが上で提案した動作を比較してみてください。

 

レナットさん、おはようございます。

OnTradeTransactionイベントの到着を保証していないため、イベントが来 なかった(TRADE_TRANSACTION_DEAL_ADD)

そして、TRADE_TRANSACTION_HISTORY_ADDイベントが来たとき、注文の状態はORDER_STATE_CANCELEDになって いました。

そこで「足が伸びた」のです。

私見ですが、注文が(どのように約定したかはともかく)部分的に約定したのであれば、その状態

は、ORDER_STATE_PARTIALとして履歴に記録されるはずです。

理由: