記事「MQL5クックブック - 経済指標カレンダー」についてのディスカッション

 

新しい記事「MQL5クックブック - 経済指標カレンダー」はパブリッシュされました:

この記事では、経済指標カレンダーのプログラミング機能に焦点を当て、カレンダーのプロパティに簡単にアクセスしてイベント値を受け取るためのクラスの作成について考察し検討します。実用的な例として役立つように、CFTCの投機筋ネットポジションを使用して指標を開発します。

次の例で時系列構造体を処理してみましょう。Test_TS.mq5スクリプトは、2016年1月1日から2021年11月1日までの米国非農業部門雇用者数に関するデータを受け取り、それらを科学的なチャートに表示します。チャートが2つの曲線(実際の値と予測値)を持つようにしましょう。イベント報告期間をタイムラインとして使用します。

スクリプトを起動した後、最初に時系列値を操作ログに表示し、次にチャートに図を描画します(図2)。


非農業部門データ(2016-2021)

図2 米国非農業部門就業者数(2016-2021)

作者: Denis Kirichenko

 

確かに、カレンダーの標準機能は理解しにくい。著者がそれを理解し、記事で例を示したのは素晴らしいことだ。

しかし、提案されている高レベルのカレンダーAPIのシンプルさは明らかではないように思える。難しいのだ。


おそらく、カレンダー・アプリケーションで最も要求されるシナリオのリストを指定すべきだろう。そして、それを実装してみよう。

 
fxsaber #:

確かに、カレンダーの標準関数は理解しにくい。著者がそれを理解し、例を示したのは素晴らしいことだ。

しかし、提案されている高レベルのカレンダーAPIのシンプルさは、自明とは思えない。難しいのだ。


おそらく、カレンダー・アプリケーションで最も要求されるシナリオをいくつかリストアップしてそれを 実装してみるべきだろう。そして、それを実装してみよう。

私は、どのような時でもニュースと相場が同期していることを100%保証する方法が欲しい。

 
fxsaber #:

確かに、カレンダーの標準関数は理解しにくい。著者がそれを理解し、例を示したのは素晴らしいことだ。

しかし、提案されている高レベルのカレンダーAPIのシンプルさは、自明とは思えない。難しいのだ。

おそらく、カレンダー・アプリケーションで最も要求されるシナリオのリストを指定すべきだろう。そして、それを実装してみよう。

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

私の意見では、CiCalendarInfo クラスが 国、イベント、値の3つのエンティティを扱うという 事実が、認識の難しさの原因だと思います。 例えば、SBのトレードクラス CAccountInfo、 CSymbolInfoなどと比較すると 、各クラスには口座、シンボルなど1つのオブジェクトがあります。例えば、基本クラスCiCalendarBaseInfo、子孫クラスCiCalendarCountryInfoCiCalendarEventInfoCiCalendarValueInfo。しかし、最後の3つは構造体の形で類似している。だから、このアイデアはあきらめた。

おそらく、カレンダーを使用する最も一般的なシナリオのリストを定義する必要があるだろう。そして、それを実装してみる。

カレンダーのデータを使うという点では、アイデアの数だけあるはずだ。イベントのリリースに関するシンプルなインフォメーターを作ったり、カレンダー・パネルを作ったり、ニュース・リリースの時間を考慮して売買するExpert Advisorを作ったり。マクロ経済指標のデータを取り込み、ニューラルネットワークを使ってレートへの影響を調べることもできる。一言でビッグデータといっても

便利なのは、他の情報源に行く必要がないことだ。すべてがMQL5の環境でできる。

 
Denis Kirichenko #:

便利なのは、どこか別のソースに行く必要がないことだ。すべてがMQL5の環境でできる。

直感的なラッパーを書くのは大変な技術だろう。カレンダーはそのようなことに適しているのは難しい。以前、自分で作ったものを投稿したことがある。

 
fxsaber #:

直感的なラッパーを書くのは、素晴らしい技術に違いない......。

100%.

 
カレンダーのchange_idによるクエリで不明な点があります。どこで入手できますか?
 
Dmitry Fedoseev #:
カレンダーのchange_idによるクエリで不明な点があります。どこで入手できますか?

ドミトリー、ここに標準的な関数が あります。

int  CalendarValueLast(
   ulong&               change_id,             // 識別子を変更する 
   MqlCalendarValue&    values[],              // 値の説明を得るための配列 
   const string         country_code=NULL,     // ISO 3166-1アルファ2による国コード名
   const string         currency=NULL          // 通貨コード名 
   );

これは、change_idが参照パラメータ であることを示しています。つまり、サーバーはそれを私たちに返します。これはサーバーの定数です。この値が変更された場合、カレンダー・データベースの状態が変更されたことを意味します。ドキュメントにEAの例があります。

そうです、change_id の最後の既知の値を送ることもできます。データベースの状態が変更されると、CalendarValueLast() 関数は新しいイベントの数を返し、 送信したchange_id を新しい値で上書きします。

Документация по MQL5: Экономический календарь / CalendarValueLast
Документация по MQL5: Экономический календарь / CalendarValueLast
  • www.mql5.com
CalendarValueLast - Экономический календарь - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Denis Kirichenko #:

ディミトリ、これが標準的な関数の 例だ。

この中で、change_idが参照パラメータ であることがわかります。つまり、サーバーから私たちに返されます。これはサーバーの定数です。この値が変更されると、カレンダー・データベースの状態が変更されたことになります。ドキュメントに EA の例があります。

それで理解できます。ありがとうございます。

ヘルプにありました:

CalendarValueLast.

change_id = 0 が関数に 渡さ れた場合、関数は常にゼロを返しますが、 change_id には現在のカレンダー・ベースの状態が 返されます

 
Dmitry Fedoseev #:

ヘルプで見つけた:

カレンダー値

change_id = 0 が関数に渡された場合、関数は常にゼロを返しますが、 カレンダー・ベースの現在の状態が change_id に返されます

はい、そのようなことがあります。

インジケータの例では、prev_calculated==0のときにそのような行があります:

//--- チェンジIDを取得する
MqlCalendarValue values[];
gPtrValuesInfo.ValueLastSelectByEvent(gChangeId, values);

そして、ここでは gChangeId=0 です。初期化ブロックの中でゼロになっています。しかし、prev_calculated==0になるたびにgChangeIdを リセットする方が正しいでしょう。そして、この変数をローカルにする。

 
私が理解する限り、カレンダー機能はテスターでは機能しないのですか?どのようにテストするのでしょうか?初期化する際に、イベントのリストをダウンロードし、そのリストで作業するのですか?あるいは、ファイルに保存し、そのファイルから読み込む。