決済したローソク足では仕掛けない機能

アイキャッチ

簡単そうだけど、ちょっとした工夫が必要

決済したローソク足では仕掛けない機能をご紹介します。方法は色々ありそうですが、口座履歴は参照しない方法で作りました。

ポジションに設定したSLないしTPで決済した場合を想定しています。OrderCloseを使って自前で決済する場合は、あえて記事にするほどでもないかなと思っています。

cATraderだとポジション決済イベントが用意されているのでスマートに書けるのですが、MT4だとそれが存在しないため、小細工が必要です。

本機能に関係ある部分のみを抜粋したプログラムなので、必要に応じて加工してお使いください。

上記プログラムで最も重要なのは以下の部分です。

最初のif文は、現ティックでのポジション数と1ティック前のポジション数(gSumPos)を比較し、現ティックでのポジション数の方が少なければ、ポジションが決済されたと解釈して、以降のプログラムを実行することを意味します。

1ティック前のポジション数をグローバル変数で作成している点がポイントです。

このif文ではEAの実行よりも先に決済(ポジションに設定したSLないしTP)の判定と実行が行われるMT4の性質を使っていることに注目してください。

gOpenTimeOfClosedPositionは決済時のローソク足のオープン時間を表しています。

それが初期化されている状態なら、現在のローソク足のオープン時間をセットします。

現在のローソク足のオープン時間とgOpenTimeOfClosedPositionが一致している、つまり、現在のローソク足と決済したローソク足が同じ間は、returnで後続処理をスキップさせています。

そして、最後に現在のポジション数をgSumPosに格納して完了です。

決済イベント、実装してくれないかなぁ。

スポンサードリンク

ブログランキングに参加中!

ポチっとクリック頂けると励みになります♪
(クリックしてもランキング一覧が表示されるだけですが、それでOKです)

にほんブログ村 為替ブログ FX システムトレード派へ

コメントを残す



twelve + 19 =