OnTradeTransaction関数について質問です。 - ページ 6

 
Mikalas:

いいえ、トランザクションは失われませんが、特定の順序で来ないかもしれません。

TRADE_TRANSACTION_REQUESTだけが常に最初に来るようにし、それ以外の場合は注文券を入手できないようにします。

ドキュメントをよく読んでください。

マイケル、申し訳ありませんが、最後の投稿にしか返信していないように見えましたが、このページの最初の投稿に書かれていることのすべての結果なのです。

そして、ドキュメントを読むことを推奨しているのも不思議な話です。読んで、読み直して、また読みました。

Warrant Ticket "とはどういう意味ですか? ドキュメントに記載がないのですが。

 
AlexeyVik:

マイケル、申し訳ありませんが、私にはあなたが最後の投稿にしか返信していないように見え、それはこのページの最初の投稿に書かれているすべてのことの結果であると思いました。

そして、ドキュメントを読むことを勧めているのを聞いて、不思議な感じがします。読んで、読み直して、また読みました。

オーダーチケットとはどういう意味ですか? ドキュメントに記載がないのですが。

ウーロン・チケットは、注文に割り当てられる一意の番号です。

この数値は、注文の 有効期間中だけでなく、履歴の中でも変わりません。

tikcetを使って注文に関する情報を取得します。

 
Mikalas:

ウーロン・チケットは、注文に割り当てられる一意の番号です。

この数字は、履歴と同様、注文の生涯を通じて 変わることはありません。

tikcetを使って注文の情報を取得します。

ミハイル ありがとうございます。実は、注文のチケットのことだと思い込んでいたんです。しかし、もっと正確であるべきだった。


それにしても、チケットの挙動がかなりおかしい。

例:テスターで実行したときのチケットとボリューム。

買い0.1ロット、チケット2でポジションをオープンします。SellStop 0.78 Ticket 3 を配置。

SellStopが作動すると、ポジションは0.68のままとなり、数量0.78の注文3が履歴に残り、利益がマイナスになります。

同時にチケット4との位置関係もあります。

そして、チケット2との位置関係からの損失がどこに消えたのか、まったくもって不明である。


一般に、私たちは書かれていることを必ずしも信じることはできません。なぜなら、完全に書ききれていないからです。

保留中の注文でポジションが開くとチケットは残りますが、その注文で別のポジションが閉じられると、新しいチケットが作成されます。

 

ポジションとペンディングオーダーが同じ方向であれば、チケットも同じようになります。チケットが変わる。


 
AlexeyVik:

どうやらこれはトランザクションの損失らしい・・・。と、まず(ドキュメントからの切り抜き)。

Vasilyさん、これはテスターですか、それともデモですか?テスターのサンプルがあります。テスターと口座でOnTradeTransactionのトリガーに違いがあるのでは?ときどきチェックさせていただきます。

これはデモです。テスターとリアルタイムでイベントモデルが 違うのかもしれません。

 

MT5でFortsにいくつかのボットを入れています。同じ楽器で複数を含む。ロボット」が何枚持っているかは、取引履歴を見ながら判断しています。基本的にすべてうまくいきます。OnTradeTransactionを 使用してみることにしました。実装方法は簡単で、取引が発生したら、売買された契約数と取引を行ったボット(取引への特別なコメントやマジックナンバーを使用)を調べ、この情報をファイルに保存します。問題はこれです。各EAにOnTradeTransactionがある場合、順次呼び出されるのか、並列で呼び出されるのか、どうなるのでしょうか?例えば、取引が実行されたとします。多くのイベントが発生し、OnTradeTransactionはイベントごとに各ボットで一貫して呼び出されるのでしょうか。つまり、すべてのボットを担当するOnTradeTransactionハンドラを1つ作る方が簡単なのでしょうか?どちらかというと、私はプログラマーではありません。すでにいろいろなものをプログラミングしていますが。コードは安っぽいかもしれませんが、私はいつもきちんと動作するようにしています。

 
votor:

MT5でFortsにいくつかのボットを入れています。同じ楽器で複数を含む。ロボット」が何枚持っているかは、取引履歴を見ながら判断しています。基本的にすべてうまくいきます。OnTradeTransactionを 使用してみることにしました。実装方法は簡単で、取引が発生したら、売買された契約数と取引を行ったボット(取引への特別なコメントやマジックナンバーを使用)を調べ、この情報をファイルに保存します。問題はこれです。各EAにOnTradeTransactionがある場合、順次呼び出されるのか、並列で呼び出されるのか、どうなるのでしょうか?例えば、取引が実行されたとします。多くのイベントが発生し、OnTradeTransactionはイベントごとに各ボットで一貫して呼び出されるのでしょうか。つまり、すべてのボットを担当するOnTradeTransactionハンドラを1つ作る方が簡単なのでしょうか?どちらかというと、私はプログラマーではありません。すでにいろいろなものをプログラミングしていますが。コードは安っぽいかもしれませんが、いつもきちんと動作するようにしています。

はい、OnTradeTransaction は各 EA で動作します。それらはシンボルでフィルタリングされ、1つのシンボルに複数のExpert Advisorがある場合は、Magikによってフィルタリングされるべきです。

 

ご返信ありがとうございました。すでに確認しましたが、すべてのEAで動作しているようですね。質問なんですが(アホな質問かもしれませんが)、これらのOnTradeTransactionsは、すべてのEAで、並列ではなく、まず一つのEAで、次に次のEAで、というように直列に処理されますよね? つまり、それらの処理は直列(?)なので、すべてのbotに対して一つのハンドラを作り、そこに必要なものをフィルタする方が良いのではないかと思うのです。

 
votor:

ご返信ありがとうございました。すでに確認しましたが、すべてのEAで動作しているようですね。質問なんですが(アホな質問かもしれませんが)全てのEAにあるこれらのOnTradeTransactionの ポストは、並列ではなく、まず一つのEAで、次に次のEAで、というように順次動作しますよね? つまり、それらの処理は順次(?)なので、全てのbotに対して一つのハンドラを作り、そこに必要なものをフィルターする方が良いのではと思うのです。

確認はしていませんが、規則性はないようです。誰が先に起きたのか、手をこまねいているようなものです。そして、同じ時間に起きると、それぞれのスリッパになる可能性があります。

今のところ、シンボルとマジシャンでフィルタリングするのがベストな選択肢だと思われます。誰の立場でそれについて情報を書いているのか。

 

どうも説明するのが苦手なんです。ここで実例を紹介します。以下はそのコードです。

void OnTradeTransaction(constMqlTradeTransaction& trans,

const MqlTradeRequest& request,

コンスタントMqlTradeResult& result)

{

カウント++。

Print("Ontrade_test = ",Count);

}

ハンドラは2つのExpert Advisorに実装されているため、1つのトレードが実行されると2つのExpert Advisorで複数回実行されます。コードが出力されます。

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

といった具合に。

2 つの Expert Advisor の OnTradeTransaction の 応答時間がミリ秒単位で同じ であることがわかります。そこで質問なのですが、トレードイベントはあるEAのOnTradeTransactionにまず来て、次に別のEAのOnTradeTransactionに来るのか、それとも何らかの方法ですべてのEAのハンドラに一度に来るのでしょうか?まあ、プログラミングで言うところのマルチスレッドの並列処理みたいなものですね。すべてが順次行われ、1ミリ秒以内に処理されるだけだと思いますが、念のため質問させていただきました。