記事"トレードの一時停止について"についてのディスカッション

 

新しい記事 トレードの一時停止について はパブリッシュされました:

本稿は、1つのMT4クライアントターミナル上で複数のEAを稼働中に、トレードオペレーションの一時停止に関する問題に取り組んでいます。MQL4のターミナル操作とプログラミングに関する基本スキルをお持ちのユーザー様向けに書かれています。

_PauseBeforeTrade()関数

一時停止を実現するコードは全てのエキスパートアドバイザーに共通なものなので、より合理的に関数として組み込むことができるでしょう。最大限の汎用性と最小限のエキスパートアドバイザーコードを提供します。

コードを書く前に、私たちのタスクを正確に定義させてください。タスクとは、私たちの時間と労力を減らすことだと思います。そうであるならば、関数がすべきことは次のとおりです。

  • グローバル変数が生成されているかどうかチェックし、なければ作成します。エキスパートアドバイザーのinit()関数でおこなう ことがより論理的で作業効率が良いかもしれません。しかしその場合、ユーザーがその部分を削除し、その時稼働している全エキスパートアドバイザーが、ト レード中の一時停止をおこなう機能を中止してしまう可能性があります。したがって、あらたに作成した関数内に入れることにします。
  • グローバル変数に現在時刻を記憶させます。ほかのエキスパートアドバイザーが一時停止機能を維持するためにおこないます。
  • 最後のトレードから経過した時間が十分かチェック。汎用性を考慮すれば、一時停止の必要期間を設定する外部変数を追加することも必要です。その値は各エキスパートアドバイザーごと個別に変更できます。
  • ディスプレイ・インフォメーション。プロセスと稼働中に発生した全エラーについて表示します。
  • パフォーマンス結果に応じてそれぞれ値を返します。

関数が最後のトレードから経過した時間が十分でないことを検出すると、必ず待機します。Sleep()関数は、IsStopped()の待機と チェックの両方に役立ちます。すなわち、”眠っている”あいだにチャートからエキスパートアドバイザーを削除した場合、それは維持されず強制的に停止され るのです。

トレーダーにはそのことが分かるように、あとどれだけ待機する時間があるのか、(”眠っている”あいだ毎秒)情報を表示します。

結果として、以下のコードが作成されなければいけません。

作者: Andrey Khatimlianskii