OnTradeTransaction - ページ 9

 
Aleksey Mavrin:

そうですね。この場合、位置の識別子は生涯不変のものですから。ロールオーバーやネッティングの際に変化するポジションのチケットと混同していました。

しかし、私は理解していない - ポジションが部分的に閉じているとき、チケットはポジションに影響を与える最後の注文のチケットに変更されないのですか?

自分のコードを見直してみます、ありがとうございました。このフォーラムを訪れたのは無駄ではありません。)

現在の注文や履歴のリストにない「失われた注文」について:これはバグではないようです。

これはバグではなく、ターミナルサーバーであるMT-marketの特殊性(即時執行の場合、マーケットが機能しない)を注意深く見る必要があると思います。端末が成行注文を出すと、同期機能の場合、サーバーから返事が来るのを待ちますから、そう思います。

エラーがなければ、TRADE_RETCODE_DONE(即時約定の場合はリクオートですが、今のところマーケット型です)のみ返信されることがあり、これは基本的にサーバーがマーケットに注文を送ったことを意味し、それは

実際には、サーバーが注文を送信し、その返信を待っていることを意味します。現時点での注文の状態は、私の記憶違いでなければORDER_STATE_STARTED であり、そのチケットは既知である。注文が成立した場合、サーバは端末に OnTradeTransaction を送信し、注文の状態は ORDER_STATE_FILLED に変化し、取引は既知となる

と位置がわかるようになります。このとき初めて、端末は注文を履歴に記録する。何が起こったかわからないし、サーバーからの最初の応答もすでに出ているので、あらかじめこのようなことはしない。

これは、注文がECNネットワークまたはどこか他の場所で実行されるまでの時間であり、それらは2つのリストのいずれにも含まれていません。つまり、成行注文の場合、履歴にのみ表示されます(即時約定中の再注文の場合はよくわかりません)。

は、開いているもののリストに表示されることはありません。そして、保留中の注文がトリガーされると、それはすでに成行注文になっているので、オープンなもののリストから削除され、マーケットサーバーからの応答を待って、履歴に送られます。

そうだろうか?

そうでもないんです。
 
Aleksey Mavrin:

そうだろうか?

アンドレイはとてもよく説明してくれました。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

OnTradeTransaction

アンドレイ・ハチムリアンスキー 2019.12.17 08:24

いや、もっとひどい状況だ。

保留(または成行)から履歴(約定または取消)に変わる瞬間の注文が、しばらく端末から全く見えなくなる。保留中の市場(または「開始」された市場)にも、歴史的な市場にも表示されない。

つまり、実行ではなく、この2つのテーブルを同期させることが重要なのです。サーバーからの回答(「注文が実行され、トランザクションが生成されました」)は、一方のテーブルからは削除されるが、他方のテーブルには入力されない。


問題はOrderSendではありません。長い間、BuyLimitがありました。そして突然、それとバイポジションはどこにも存在しなくなった。これとほぼ同じ状況が起こります。

 
fxsaber:

アンドレイはそれをうまく書いている。


OrderSendのことではありません。長い間、BuyLimitでした。そして突然、それもBuyポジションもどこにもない。それくらい、同じような状況が起こります。


アルチョム・トリシキン
そうでもないんです。

理解できました。成行注文でも、しばらくは現在の注文のリストに表示されている(が、端末の取引タブには表示されていないようだ?

そして、注文が実行され、サーバーから対応するトランザクションを受信すると、端末は以下の動作を行う。

1. カレントから注文を削除する

2.歴史的なものに順番を書き込む

3.リストにトレードを書き込む

4. リストに位置を書き込む

また、Expert Advisor と端末自体が独立した並列ストリームで動作することを考慮すると、この短い時間内に要求した場合、端末はまだポジションを開くことができないでしょう。

の位置には、まだないでしょう。前にも書きましたが、もしこれがDBMSの規格で起こっているのなら、そこにある4つの操作はすべて1つのトランザクションに統合され、「中間状態」にとらわれることはできないので、そんなことはありえないはずです。

そうだろ?OnTradeとOnTradeTransactionに 依存している場合、これらのハンドラに遅延は発生しないはずで、対応するテーブルに変更を加えることで発生しますよね?

それともTerminalはイベント受信時にExpert Advisorに送信し、同時にテーブルを変更するだけなのでしょうか?後者の場合、もちろん間違いであり、特に実際の情報を取得できるOnTradeTransactionが保証されていない場合は、修正が必要である。

 
Aleksey Mavrin:

了解です。成行注文でもしばらくは現在の注文リストに存在する(ただ、ターミナルの取引タブには表示されないようだ?)

Startedの状態で目で見て、そこにあるのがわかることもあります。しかも、ロボットで簡単に追跡できる。


アレクセイ・マヴリン

そして、Expert Advisorとターミナル自体が独立した並列ストリームで動作することを考えると、この短い期間内にポジションをリクエストしても、表示されないという状況です。

ポジションではなく、あくまでオーダーを指しています。

テーブルに項目を追加するのに必要な時間は、時折得られるものよりずっと短いのです。それに真面目な話、正しい取引環境が整う保証はない。


アレクセイ・マヴリン

もし OnTrade とOnTradeTransaction に依存しているなら、これらのハンドラは適切なテーブルに変更が書き込まれたときに発生するので、ラグがあってはならないのではないでしょうか?

それともTerminalはイベント受信時にExpert Advisorに送信し、同時にテーブルを変更するだけなのでしょうか?後者の場合、もちろん間違いであり、特に実際の情報を得ることができるOnTradeTransactionが保証されていない場合は、訂正する必要があります。

純粋な形のOnTradeでは役に立ちません。

注文テーブルの同期待ちもそれに組み合わせることができます、それは好みの問題です。でも、まだ待たないといけないんですね。

 
Aleksey Mavrin:

現在または過去の注文リストにない「失われた注文」について:バグではなく、ターミナル・サーバーであるMT-Marketの機能をよく見る必要があると思います(即時執行の場合は相場がアウトになります)。端末が成行注文を出し、同期機能の場合はサーバーからの応答を待っていると思います。 エラーがなければ応答はTRADE_RETCODE_DONE(即時執行の場合はリクオートもありますが、今のところ成行注文です)だけかもしれませんが、実際にはサーバーからマーケットに注文が送られ応答を待っていることを意味していると思われます。現時点での注文の状態は、私の記憶違いでなければORDER_STATE_STARTED であり、そのチケットは既知である。注文が成立すると、サーバーは端末に OnTradeTransaction を送信し、注文の状態は ORDER_STATE_FILLED に変わり、取引とポジションが判明します。このとき初めて、端末は注文を履歴に記録する。

市場は関係ない。

MetaTraderサーバーは、ECNまたはどこかに注文を送信し、答えを取得し、端末に送信します。そして、端末ではタイミングがずれている。