今回は、MT4のEAサンプルソース(FX用)を公開します。
はじめに
今回、移動平均線について以下のような質問があったので記載していきます。
EAで移動平均線の上向き、下向きを判定したい
という事で、移動平均線が上を向いた、下を向いたという判定をEAで実現するにはどうしたらいいかという内容について解説していきます。
今回は自分のEAに移動平均線のエッセンスを取り込みたい場合などに参考にして頂ければと思います。
※丸々コピペでEAとなるサンプルソースではありません
主な構文
iMA()
【使用例】 double dMA_atai = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
まず絶対に必要となる関数ですが、移動平均線の値を取得するiMA()関数を使います。
引数の内容は以下の通りです。
- 引数1・・・通貨ペアです(NULLでチャートの通貨になります)
- 引数2・・・時間軸です(0でチャートの時間軸になります)
- 引数3・・・期間です(20で20移動平均線、25で25移動平均線になります)
- 引数4・・・表示移動です
- 引数5・・・移動平均の種別です(MODE_SMAで単純移動平均線)
- 引数6・・・適用価格です(PRICE_CLOSEでクローズ値)
- 引数7・・・バーシフトです(0で現在の値、1で1つ前ーのバーの時の値です)
基本的に、3,5,7ぐらいしか触らなさそうな設定です。
3:期間、5:移動平均線の種別はMT4の移動平均線設定画面上で見るとイメージしやすいです。
期間は、何日(20日)移動平均線とかのあの数値です。
移動平均線の種別は、以下4種類です。
- 単純移動平均線:MODE_SMA
- 指数移動平均線:MODE_EMA
- 平滑移動平均線:MODE_SMMA
- 線形加重移動平均線:MODE_LWMA
7:バーシフトは過去の移動平均線値をとりたい場合変更します
バーシフトが0の場合は最新のローソク足上の移動平均線値を取得します。バーシフトが1の場合は1つ前のローソク足上、バーシフトが2の場合は2つ前のローソク足上という感じです。
移動平均線値はローソク足が確定した時点で同時に確定するので、バーシフトが0の最新の移動平均線値は値動きがある度に上下することになります。
したがって、今回はバーシフト1と2の移動平均線値を使って移動平均線の上向き下向きを判定します。
そもそも、移動平均線値って何?
そもそも移動平均線値って何かわかりますか?iMA()関数で取得できる値ですがどんな値が取得できるのかを理解しているとプログラムを作って行くうえでとても便利です。
まず下のイメージを見てください。
MT4上の移動平均線の上にマウスカーソルを合わせると右下の四角(Moving Aberage(21)・・・)が出てきます。
※普通四角の部分は1つしか出ませんが、わかりやすいように2つ並びに編集しています
これのValueの箇所を見てほしいんですが、2のところは130.045となっており1の方は103.049となっています。この値が移動平均線の値となります。このように移動平均線値はローソク足単位で計算されており、この値を線で結んでいく事で私たちがよく見ている移動平均線になるという感じです。
では、この移動平均線値を見て行けば移動平均線の上向きと下向きを判定できそうですよね。実際にプログラムでどうやって書けば移動平均線値を取得する事ができるのでしょうか?
そう、先ほど説明したiMA()関数を使えば取得できます。実際に書くとこんな感じです。
130.045 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
130.049 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
最後のバーシフトを2と1にするのがポイントです。
移動平均線値で上向き、下向きを判断する
上記の内容から、移動平均線値で上向き、下向きを判断していきます。
上向き判断
先ほどの例でいくとこの状態であれば移動平均線は上向きであることがわかります。
130.045 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
130.049 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
イメージ図のように2つ前の移動平均線値より、1つ前の移動平均線値が高い場合は上向きとなります。
下向き判断
次は移動平均線が下向きの例です。
130.007 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
129.985 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
2つ前の移動平均線値より、1つ前の移動平均線値が低い場合は下向きとなります。
この内容がわかれば、あとはソースコードで移動平均線の上下判定をするのは容易になってきます。
ソースコード
double MA_ATAI_2 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2); //移動平均線で2つ前の値を取得
double MA_ATAI_1 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1); //移動平均線で1つ前の値を取得
//移動平均線の傾きが上向きの場合
if(MA_ATAI_2 < MA_ATAI_1){
//上向きの処理を書く
}
else if(MA_ATAI_2 > MA_ATAI_1){
//下向きの処理を書く
}
まず、iMA()関数でバーシフト2とバーシフト1の値をMA_ATAI変数にセットしています。その後は、if文でセットした値の大きさを比較しているだけとなります。
上記の説明を全てまとめた『移動平均線値で上向き、下向きを判断する』という内容はこのソースコードで網羅できます。
文章で書くと長いですが、プログラムで書くとあっさりですね(*’▽’)
さいごに
以上が、『移動平均線の上向き、下向きを判定してEAに組み込みたい』の内容となります。
漠然と頭でイメージすると、私もどうやって実現するのか?って分からない事がよくあるんですが数値として(移動平均線を)しっかりイメージできるとどうやれば実現できるかというのが見えてきやすくなります。
上記の記事では上向き下向きを判断するだけですが、上向き下向きの角度等でエントリー判断できないか?とかも以前考えた記事がありますのでこちらも参考にして頂ければと思います。
※移動平均線の短期、中期、長期等の設定についてはこちら
※ EAのサンプルソースを一覧表にまとめました
※オンラインレッスンやってます
コメント