移動平均線(MA)の上昇/下降をプログラミングしてみる(2)

アイキャッチ

関数化しておくと便利

前回の記事で、移動平均線(MA)の上昇/下降の判定ロジックを検討しました。

今回は、それをMQL4でプログラミングしてみます。

おさらいですが、MAの上昇/下降の判定ロジックは以下の3つでしたね。

  • ある一定期間内で、あるMAがその1つ前のMAより大きい間隔の割合が多い
  • ある一定期間内で、最新のMAが最古のMAより大きい
  • 最新のMAがその1つ前のMAより大きい(任意)

これらをプログラミングしていくわけですが、その前に、MAの上昇/下降というのは汎用的な条件ですので、今後も使用することが考えられます。ですので、関数として作成しておくのが良さそうです。

MQL4\Includeフォルダの下に私のオリジナル関数を格納するOriginalフォルダを作成済という前提で話を進めますが、MQL4\Include\Originalの下にApplication.mqhというテキストファイルを作成します(Originalフォルダ内に存在する既存のmqhファイルをコピーするのが手っ取り早いです)。

そこに以下を記載します(いきなり全部書いちゃいます!)。

では、解説していきます。まず、関数名はjudgeUpAndDownMAとしました。関数を実行した結果、返ってくる値は0~2の整数値で、1なら上昇、2なら下降、0ならどちらでもないという意味になります。

引数は沢山ありますが、殆どがiMAを呼ぶのに必要なもので、オリジナルな引数としては、後ろ3つのaJudgeNumber、aRate、aUseStrictだけです。

aJudgeNumberは、MAの上昇/下降を判定するためのMAの点数。aRateは、そのMA点の間隔うち、何割が上昇/下降していれば、MAが上昇/下降していると判断するかを表す割合。最後のaUseStrictは、3つの任意の条件を有効にするかどうかのフラグです。

冒頭にある以下のif文はMAの点数が2未満の場合、エラーとして返すための処置です。

iMA関数を呼び出して配列にMA値を格納します。これが、”ある一定期間内”を表すことになります。

あとは、1つ1つの条件をプログラミングしていきます。

plusFlg1~3、minusFlg1~3は、各条件の結果を格納する変数です。trueなら条件が成立したことを表します。

plusFlg1~3が全てtrueなら上昇、minusFlg1~3が全てtrueなら下降というわけです。これが最後の条件となっており、各フラグを用いて、MAの上昇/下降を最終判断しています。

3つ目の条件で、aUseStrictがどういう役割を果たしているかにご注目ください。aUseStrictがtrueの場合は後続に条件式がありますが、falseの場合、無条件で条件成立としていますね。このテクニックは時々使いますので、ぜひここで覚えておきましょう。

ところで、プログラミングに慣れていない人にとって、配列のインデックス(配列内の番号)は混乱しやすいものです。基本的に配列は0から付番しますので、くれぐれもご注意ください。

例えば、N個繰り返したい場合は、0からN-1までということになります(Nまで繰り返すと1個余分になっちゃいます)。

どうしても頭がついていかない場合は、思い切って最初の0番は欠番として使わないという手もあります。場所としては確保しているけど、敢えて使わないわけですね。但し、その場合、要素数はN+1必要になります。この辺はご自身の理解しやすい方法で構いませんが、世の中に出回っているプログラムの殆どは0始まりなので、長い目で見たら0スタートで慣れておいたほうが良いと個人的には思います。

サンプルEA

上記関数を使ったサンプルEAを載せておきます。どんな風に使うかの参考になれば幸いです。

以下のサンプルEAは確定足で判断するようにしています。従って、1本の足が確定したタイミングでのみ稼働するような仕掛けになっていることにもぜひご注目ください。

なお、矢印オブジェクトはチャート上のどこでMAが上昇/下降と判定されたかを示すためのものです。見やすくするためのものなので、無くても構いません。

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

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

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

6件のコメント

  • きよし

    5桁通貨に対応していなくないですか?

    • りゅーき

      どうしてそう思われたのでしょうか?私の環境では5桁通貨でも正常に動作しております。

  • HT

    MAの傾き角度を検知できれば最強ですが、可能でしょうか。
    緩やかな傾きはトレンドとは言えないと思います。

    • りゅーき

      YESとも言えますし、NOとも言えます。
      チャートの傾き角度というのは主観的なもので、チャートの表示の仕方を変えると角度も一緒に変わってしまいます。
      つまり、人によって(厳密には各自のMT4のチャートの設定状態によって)同じチャートが違う角度に見え得るということです。
      ですので、角度を設けようとすると、色々と条件が付くことになります。
      以上の理由から、角度を自動売買に取り込むことには否定的な考えを持っております。
      客観的な角度計算アルゴリズムがあるならば、話は別なのですが…。

  • ℃素人

    お。
    ネット上で、まともなEA開発者発見。

    で、結果はどうでしたか?

    • りゅーき

      この条件だけで勝つのは難しいですね。あくまで1機能として捉えて頂ければ幸いです。

      ただ、書籍やネットに記載されているMA上昇/下降の判定条件は、乱暴なものばかりなので、それが嫌でこの記事を作成しようと決心しました。
      人間が無意識に理解しているプロセスはそんなに単純な話じゃないよと。それをプログラミングするのにはそれなりの手間がかかるんだよと。

コメントを残す



twelve + 3 =