記事"MQL5 クックブック:BookEvent の処理"についてのディスカッション

 

新しい記事 MQL5 クックブック:BookEvent の処理 はパブリッシュされました:

知られたことですが、MetaTrader 5 トレーディングターミナルはマルチマーケットプラットフォームで、Forex、株式市場、先物および差金決済契約でのトレードを容易にします。フリーランス セクションの統計によると、 Forex マーケット以外でもトレードしているトレーダー数は増加しています。

本稿では初心者の MQL5 プログラマーに BookEvent処 理をご紹介したいと思います。このイベントはマーケットデプス-株式資産とそのデリバティブをトレードするインスツルメントに関連しています。ただし Forex トレーダーはマーケットデプスも有用であると思うことでしょう。ECN アカウントでは、アグリゲータモデルに過ぎませんが、流動性をもたらす人が注文に関するデータを供給します。こういったアカウントはより一般的になってき ています。


1. BookEvent

ドキュメンテーションによると、このイベントはマーケットデプス状態が変わるときに生成されます。BookEvent はマーケットデプスイベントであると同意します。

マーケットデプスは注文の配列で、それは方向(売り、買い)、価格、ボリュームが異なります。マーケットデプスでは価格はマーケット価格に近く、そのためベストな価格であるとみなされます。

図1 MetaTrader 5 におけるマーケットデプス

図1 MetaTrader 5 におけるマーケットデプス

MetaTrader 5 では『注文控元帳』は『マーケットデプス』と呼ばれます(図1)。マーケットデプスに関する詳細上昇は「クライアントターミナル」の「ユーザーガイド」にあります。

作者: Dennis Kirichenko

 

この記事に感謝します。

エラーについて少し:

Все программы, работающие по данным стакана, по форме будут являться советниками, ведь обработчик события BookEvent есть только в советниках. Правда, можно сделать связку "советник-индикатор", где истинный индикатор сможет принимать данные от советника и обрабатывать состояние стакана.

インジケーターはOnBookEventも処理できます。

 

angevoyageur:

エラーについて少し:

インジケーターはOnBookEventも処理できます。

アラン、メッセージありがとう。はい、その通りです。インジケーターでも動作するのですが...。私はインジケータを作成する ときのハンドラのリストを頼りにしたのですが、その中にOnBookEvent()はありませんでした。

そして、一番重要なことは、Documentationにこう書いてあることです:

OnBookEvent()関数はBookEvent イベントのハンドラです。BookEvent イベントは、 Depth of Market の状態が変化したときにExpert Advisor に対してのみ 生成されます


 
denkir :

アラン、メッセージをありがとう。そうなんだ。インジケーターでも動作するのですが...。私はインジケータを作成する 際のハンドラのリストを頼りにしていたのですが、その中にOnBookEvent()がありませんでした。

そして一番重要なことは、Documentationに書いてあることです:

そうですね、ドキュメントは修正されるべきですね。それについてServiceDeskに書きますか?
 
angevoyageur:
そうですね、ドキュメントを修正する必要があります。この件についてServiceDeskに書いていますか?
いいえ、まだ書いていません。記事の内容を変更するつもりですが...。
 

参考までに、この記事にはちょっとした誤りがあります:

All programs working with Depth of Market data will have a form of an Expert Advisor, as only Expert Advisors feature the event handler of BookEvent. There is a possibility, however, to write an "Expert-Indicator" pair , where the indicator can receive data from the EA and process the Depth of Market state.

インジケータもBookEventを処理することができます。この誤りはドキュメントの誤りに 基づくもので、すぐに修正されるはずです。記事の著者とServiceDeskには連絡済みです。

 

こんにちは、記事をありがとうございます!

例えば、私がBookEventイベントを 処理し、私のハンドラが注文を削除し、発注し、それが再びこのイベントを開始するとします......そして、発注(注文の削除)と新しいBookEventイベントの期限が再び形成された瞬間に、私の非常に初期の手順は中断されるのでしょうか? なぜなら、コードの実行が最後まで到達しないことに気づいたからです....すべてが実行されるわけではありません.私はアイデアを明確にしたことを願っています ))

 
thejobber:

こんにちは、記事をありがとうございます!

例えば、私がBookEventイベントを 処理し、私のハンドラが注文を削除し、発注し、それが再びこのイベントを開始するとします......そして、発注(注文の削除)と新しいBookEventイベントの期限が再び形成された瞬間に、私の非常に初期の手順は中断されるのでしょうか? なぜなら、コードの実行が最後まで到達しないことに気づいたからです....すべてが実行されるわけではありません.すべて実行されるわけではありません.)

ご意見ありがとうございます!

いいえ、1つのイベントが処理されている間、新しいイベントが発生しても、プログラムの制御は自動的に別のハンドラに移行しません。これはPrint()関数で確認することができます(一時停止のSleep()を追加した方がよいでしょう)。

イベント・キュー」という概念があります。

ドキュメントに よると

プログラムは実行中のグラフからのみイベントを受け取ります。すべてのイベントは受信順に次々と処理される。キューにすでにNewTick イベントがある場合、またはこのイベントが処理中である場合、新しいNewTickイベントはmql5-programのキューに入れられません。同様に、mql5-programのキューにすでにChartEvent イベントがあるか、このイベントが処理中である場合、このタイプの新しいイベントはキューに入れられない。Timerイベントも同じ方式で処理されます -Timer イベントがキューにあるか、すでに処理されている場合、新しいTimerイベントはキューに入れられません。

イベント・キューには制限がありますが、十分なサイズがあるので、正しく書かれたプログラムでは、キューがオーバーフローすることはまずありません。キューがオーバーフローした場合、新しいイベントはキューに入れられることなく破棄されます。

 

イベント・キューには制限はあるが十分なサイズがあるため、正しく書かれたプログラム であれば、キューがオーバーフローすることはまずない。キューがオーバーフローすると、新しいイベントはキューに入れられることなく破棄される。

というわけで、僕の心配は杞憂に終わったようだ。)usdrub先物用のスプレッダーを書いて、常に最良の価格をスタックにキープするようにしたんだけど......。ベットは1秒間に何度も更新されるから、キューがオーバーフローするのは間違いない。そして、これはデモに過ぎない。そして、実際の市場ではクレイジーベットがあります))

私の考えを正しい方向に導いてくれてありがとう )

 

こんにちは。とても有益な記事ですね。以下の質問があります。

ある商品で執行された取引を、執行された注文のタイプ(成行/指値)に従ってフィルタリングするタスクがあります。

OnBookEventイベントとOnTickイベントをどのようにリンクさせれば、このタスクを解決できますか?私が理解する限り、このタスクはOnBookEventだけでは解決できません。

 

Rubick:

...この問題を解決するには、OnBookEventイベントとOnTickイベントをどのようにリンクさせればいいのでしょうか。私の理解では、このようなタスクはOnBookEventだけでは解決できません。

おそらく必要なのはグラスではなく、マーケット操作のハンドラーでしょう。