【MQL5】 MT5のEA作成の勉強 その6 Ontick() / Processing() はどんな処理? 2/2

【MQL5】 MT5のEA作成の勉強 その6 Ontick() / Processing() はどんな処理? 2/2

まえがき

 前回の投稿で、価格の更新ごとに実行されるOntickメソッドで、取引に関する操作を行っているProcessingメソッドの前半部分について学びました。今回はその続き、後半のポジションオープンの判定を行っている部分を解読してゆきたいと思います。

Processingメソッドについて - ポジションオープン –

 それではざっくり見て行きます。 前回の投稿で読み進めた部分の直下からです。

  1. 未決済注文の数を確認する。
     OrdersTotalメソッドで未決済注文の数を取得しています。未決済注文の数が0でない場合のみ、2の処理を行っています。
  2. 全ての未決済注文のクローズ条件を確認し、条件を満たした未決済注文はクローズする。
     未決済注文がlongポジションを保有する指値or逆指値注文の場合、ExpertオブジェクトCheckDeleteOrderLongCheckTrailingOrderLongの二つの処理を行っています。CheckDeleteOrderLongは注文の有効期限判定とSignal オブジェクトCheckCloseLongメソッドによる判定のいずれかを満たした場合に注文を消去しています。CheckTrailingOrderLongはトレーリングストップの注文価格変更条件を確認し、条件を満たしている場合に注文価格の変更を行っています。こちらはSignal オブジェクトCheckTrailingOrderLongメソッドを使用しています。Trailingオブジェクトではない点に注意が必要です。未決済注文がshortポジションを保有する指値or逆指値注文の場合も同じように、ExpertオブジェクトCheckDeleteOrderShortCheckTrailingOrderShortを行っています。
  3. 新規ポジションのオープン条件を確認し、条件を満たしていればポジションをオープンする。
     まずはlongポジションのオープン条件を確認しています。これまで同様、ExpertオブジェクトCheckOpenLongを経由してSignal オブジェクトのメソッド、CheckOpenLongを呼び出しています。そして、Signal オブジェクトCheckOpenLongメソッドが注文価格、損切価格、利食い価格の3つを返した場合、ExpertオブジェクトOpenLongメソッドにそれらが引数として渡され、注文が行われています。shortポジションの場合も同様に、CheckOpenShortOpenShortを使って判定と注文を行っています。

まとめ – 結局、どこに条件を書けばよいのか? –

 これまでの学習で、保有済みのポジションおよび未決済注文に関する判定は全てSignal オブジェクトメソッドで行われていることが分かりました。同様に、新規発注の判定と注文価格、損切価格、利食い価格の設定全て Signal オブジェクトメソッドで行われてい ます。
 とはいえ、デフォルトで提供されているライブラリを書き換えるわけにはいかないので、これらの判定処理を呼び出している部分を自前のコードに置き換えることで、注文・決済のタイミングを変更することができそうです。
 次回以降は実際にコードを書き換えつつ、この仮説の検証を行ってゆきたいと思います。