Block EA 今日のワンポイント:2本のラインの交差判定ブロック
ブロックでメタトレーダーEAのプログラミング:Block EA、ちょっとバージョンアップしました。
修正点は以下の通りです。
・カスタム関数のブロック(戻り値なし、戻り値あり)を追加
・iATRでTFが常に0になってた不具合の修正
・初期値にタイムフレーム定数をセットした変数の型をENUM_TIMEFRAMEに変更
・iRVIブロックを追加
・繰返しでコードがおかしくなる不具合の修正
・if break/continueブロックを追加
ですが、今回のBlock EA ワンポイントは、このバージョンアップとは関係ありません。
今回はこれ。
2本のラインの交差判定ブロックです。
どのツールボックスに配置するか迷ったのですが、テクニカル指標を使うので、テクニカル指標のツールボックスに配置しました。
下図のように2本のテクニカル指標が交差したかどうかを判定する場面で利用します。テクニカル指標を利用したシグナル生成でよく出てくるパターンです。
例えば、1本前の短期移動平均をFastMA1、長期移動平均をSlowMA1、2本前の短期移動平均をFastMA2、長期移動平均をSlowMA2とします。
ブロックで表すとこんな感じです。
交差の条件は、文章で書くと、「短期移動平均線が長期移動平均線を上抜ける」とか、「短期移動平均線が長期移動平均線を下抜ける」と表しますね。
でも、この条件はMQLのコードだと、
if (FastMA2 <= SlowMA2 && FastMA1 > SlowMA1)
のように、2本前で長期移動平均の方が上、かつ、1本前で短期移動平均の方は上という書き方をします。
もちろん、このような条件分岐も次のようにブロックで表すことはできます。
ただ、このような書き方はあくまでプログラム向けです。人が考えているイメージをコンピュータだったらこう実行した方がいいよね、と忖度した書き方です。人間にとってわかりやすい書き方ではありません。
そこで、同じ4つの値を使うのなら、チャートの見た目のロジック通りにブロック化できる方がいいということで、2本の交差判定ブロックを作りました。
例えば、「短期移動平均線が長期移動平均線を上抜ける」条件であれば、
というブロックになります。
速く変化するラインを主体として、最初の2つのパラメータに短期移動平均線の2本前と1本前の値を代入します。そして、後半の二つのパラメータに長期移動平均の2本前と1本前の値を代入します。
この順番さえ間違えなければ、最後のパラメータを「上抜けた」に設定することで、上述と同じコードを生成します。
また、下抜けた場合、コードだと2か所の不等号を逆にしないといけませんが、このブロックを使うと、最後の「上抜けた」を「下抜けた」に変えるだけで済みます。
前回紹介した売買シグナル生成ブロックと組み合わせると、以下のような形で上抜けた場合、買いシグナル、下抜けた場合、売りシグナルを生成することができます。
このような形でブロック化されていると、売買ロジックの説明にもなりますし、コードもすぐに変換できるし、一石二鳥、一挙両得、二刀流です。
ほかにもローソク足のパターンをブロックで表す、なんてことも考えられます。ただ、個人的にローソク足のパターンをEAに使っていないので、後回しになっています。
リクエストがあれば検討したいと思います。
では、また。