ローソク足の経過本数で決済するプログラム

「エントリー後、ローソク足が任意の本数分だけ経過したら決済してほしい」というご依頼がまれにあります。システムトレードとして決済に合理的根拠がどこにもないせいか、あまり人気はありませんが、少なくとも私の経験からすると、MACDやストキャスティクスなどのようなテクニカル指標を使うより、よく利益が出ます。

本日はそのプログラム法について解説します。

いろんなやり方がありますが、Barsを使って、エントリーしたときのローソク足の本数を何らかのかたちで記憶しておいて、現在の本数と比較するというのが一番簡単な方法です。

 

問題は、それをどうやってMT4内に記憶させるかですが、グローバル変数やstatic変数を使うと、プログラムが複雑になる上に、ポジションを複数保有するロジックの場合の処理に困ります。

 

こういった場合、私がよく使うテクニックは、OrderSend()関数のコメント欄にエントリー時のBarsを保存するというものです。あとはfor文とOrderSelect()関数でポジションごとにコメントを呼び出して、現在のBarsと比較すればよいわけです。

しかし、そもそもBarsを使う方法は、こちら の記事で解説したようなやっかいな問題があります。

そこで、現在私が一番よく使う方法は、OrderSend()関数のコメント欄に、Barsではなく、そのローソク足の始値の時刻を返すTime[0]を保存しておいて、for文とOrderSelect()関数でポジションごとにコメントを呼び出して、現在の時刻を返すTimeCurrent()と比較するというものです。

上の画像のように、秒数単位で計算するプログラムになるので少し面倒ですが、恐らくこれが一番確実な方法ではないかと思います。