FXチャートのラインブレイクを自動で通知する|無料EA第3弾

2018年11月4日

自由

FXで価格がトレンドラインや抵抗線をブレイクするまで、じっと画面を見続けていることはありませんか?

この見続けるという時間は、あまり生産的な行為ではないうえに人間がチェックしていては見落とすこともあります。

今回は自分が引いたラインのブレイクを自動で検知して、画面上にアラートを出すプログラムを作成しようと思います。

記事中のプログラムは自由にお使いください。

利用するアプリケーション

メタトレーダー4(MT4)を使用します。

MT4をインストールしていない方は、まずは「メタトレーダー(MT4/MT5)で自動売買するための事前準備(第1回)」からご確認ください。

※ここで紹介するプログラムはまだMT5には対応していませんので、MT5をお使いの方はもう少々お待ちください。

 

プログラムの設計

大枠

MT4のチャート上に自分でラインを引きます。

ラインは何本引いても構いません。

ラインをブレイクしたらアラートを出力します。

対象とするラインはトレンドラインや水平線で、フィボナッチのように1回の操作で複数のラインが出るものは未対応とします。

※フィボナッチに関してもいずれは記事にしようと思いますので、お待ちください。

 

詳細

曖昧な部分だけ詳細を詰めます。

先ほどの大枠で曖昧な部分は、「ラインをブレイクしたら」になります。

ラインをブレイクしたらというのは人間には直ぐに伝わりますが、コンピューターには理解できません。

以下のように具体的な内容に落とし込みます。

ラインブレイクを定義価格より上にあるラインに対して、上抜けた場合

価格より下にあるラインに対して、下抜けた場合

ランブレイクは分かりました。

しかし、今度は「上抜け/下抜け」とは具体的に?という話になりますので、さらに定義していきます。

 

上抜けを定義2本前のローソク足の終値がラインの値より小さい

1本前のローソク足の終値がラインの値より大きい

下抜けを定義2本前のローソク足の終値がラインの値より大きい

1本前のローソク足の終値がラインの値より小さい

これらのルールを実際の状況に当てはめると下図の黄色丸枠がアラートのポイントになります。

「しっかりと1本前の終値でブレイクが確定する。」ところがポイントです。

黄色でバツを付けた部分のように、「一時的にトレンドラインを上抜いたが、終値では下回ったパターン」ではアラートを出力しません。

チャート

 

プログラム作成

大枠

構成は以下の通りです。

  • ローソク足の始めかを判定
  • 画面上のラインを取得する
  • ラインをブレイクしたらアラートを出力する

 

全て説明後に完成版プログラムを載せますので、途中途中のプログラムをコピーする必要はありません。

 

ローソク足の始めかを判定する

EAの大枠と前処理の作成(第4回)」で記載しておりますので、詳細はそちらをご参照ください。

簡単に言うと、無駄に処理を実行させないための工夫です。

 

画面上のラインを取得する

ポイントのみ説明します。

少し細かいので、プログラムに興味が無い方は読み飛ばしてください。

ObjectsTotal()
チャート上に引かれたラインの総数を取得できます。
ArrayResize(line_price_arr, obj_size);
配列のサイズを変更しています。
何故変更するかと言うと、この言語では初期値として配列のサイズに変数を使えないので、一度作成した後にリサイズする必要があるからです。
if (ObjectType(ObjectName(i)) == OBJ_TREND)
オブジェクトがトレンドラインなのか、それ以外(水平線など)かを判定しています。
トレンドラインのみ取得方法が違うためです。
ObjectGetValueByShift(ObjectName(i), 1);
1本前のトレンドラインの値を取得
line_price_arr[i] = ObjectGet(ObjectName(i), OBJPROP_PRICE1);
トレンドライン以外の値を取得

 

ラインブレイク判定

設計で定義した「上抜け/下抜け」をそのままプログラム化したものです。

複数のラインがある場合は、どれか1つでもブレイクすればラインブレイクと判定します。

 

アラート出力

プログラム通りなので特に説明はありません。

 

完成版

完成版を載せますので、こちらをコピーしてお使いください。

プログラムの適用方法が分からない場合は、「最短でEAを作る(第2回)」を先にご確認ください。

MetaEditorに貼り付けてコンパイルしていただければ準備完了です。

 

動作確認

今回は自分が引いたラインを元に判定を行うので、バックテストはできません。

また、売買をするプログラムでもないので、軽い気持ちで1分足や5分足のチャートにそのまま適用してみましょう。

 

チャートにプログラムを適用する

下図の通り作成したEAをチャートにドラッグして、右上の四角枠のように「にこにこマーク」が出ればOKです。

※このサンプルではアラートを出力するのみなので、実際は「にこにこマーク」ではなくても問題ないです。

チャートへのプログラム適用

 

検証

まずは適当なところにトレンドラインを引いてみます。

ラインチャート

 

検証はしっかり4パターン行います。

  1. トレンドラインを下から上にブレイク
  2. トレンドラインを上から下にブレイク
  3. 水平線を下から上にブレイク
  4. 水平線を上から下にブレイク

※沢山アラートが出力されているのは、私が事前にテストしていたためなので気にしないでください。

[1] トレンドラインを下から上にブレイク

トレンドラインを下から上にブレイク

 

[2] トレンドラインを上から下にブレイク

トレンドラインを上から下にブレイク

 

[3] 水平線を下から上にブレイク

水平線を下から上にブレイク

 

[4] 水平線を上から下にブレイク

下ブレイク

 

全パターンで問題なくテストが完了しました。

 

もし上手くいかない場合は、無効なラインが含まれている可能性がありますので、そのラインを削除してください。

エキスパートタブに、エラーとなったラインの番号が出力されているはずです。(下図ではTrendline 30304)というラインに問題があることが分かります。)

MT4のコンソールログ

 

まとめ

思ったより簡単に作ることができましたね。

今回はアラートを出すことにしましたが、アラート部分を注文に変更すれば完全自動売買になります。

フィルターの1つに使うこともできますので、色々と使い勝手が良いのではないでしょうか。

 

無料EAに興味がある方は以下もご参照ください。

押し目エントリーのEA作成(第5回)

メタトレーダーの無料EA第2弾