今回は、テクニカルと言えばテクニカルの記事になります。
以前、FX取引の基礎とかファンダメンタルズ分析シリーズの記事を書いていて、
この辺とか
この辺ですね!!
(未完で止まっています。笑)
この辺を完結させた後に、
テクニカル分析に関してのインジケーターなどの記事を書こうと思っていました。
そして、どうせならちょっと違った角度から解説できないかなあ?
と思っていました。
そんな中、最近になってEAやカスタムインジへの知見を深めるべく、
MQL4のお勉強をしているのですが、
その辺に無理やり絡めて説明出来たらいいなあ・・・
(記事として書くのは難しそうだけど・・・)と思いつつ、
やっていってるうちの少しは自分の復習用としても書いていけたらな。
と思ってい書いています。
今回のテクニカルインジケーターは、
【単純移動平均線】です。
では、簡単な解説を入れた後に、視覚的に見ていってみましょう!
単純移動平均線(SMA(Simple Moving Average))とは!?
ブログでよくある〇〇とは!?がまず大きな段落としてくる流れ
私あんまり好きじゃないんですが、取りあえず説明しないことには仕方ないので、
簡単に説明します。
そもそも、移動平均線にはいくつか種類があります。
(そこは別機会に記事にするかもしれないので、今回はパス)
その中でも、今回みていくのは
「単純」移動平均線です。
計算の行い方は非常に簡単で、
【一定期間の終値の平均】をチャート上にプロット
しただけのものになっています。
計算式的には
【 間近n本の終値の合計 / n 】
となります。
例えば、短期トレードなんかで使われることがあるMA5(5日間(5本分の足)の平均を出したもの)だったら、現在のローソク足も含めて、過去に遡って5本分の終値の平均を出してあげると、現在時点のMA5の値が出てきます。
(執筆時点は土曜日でMT4チャートもとまってらっしゃるので、止まった状態をみていきましょう)動いている時は、終値が確定してそのバーの移動平均線の値が確定します。
小さいですが、赤で囲まれている5つが、
間近5本のローソク足の終値になっています。
そして、白いラインが移動平均線で、
最新の値は107.601付近となっています。
では、これをもっと噛み砕いて、
単純移動平均線(SMA)をエクセルで計算して出してみよう!!
別にただSMAを使う分は、
わざわざ計算してみて出す必要は全くないんですが、
ブラックボックスを使用しているより理解していた方が良いということで、
まずは各バーの終値を確認してみましょう!
MT4のヒストリカルセンターで値を確認する
MT4のヒストリカルデータを覗きに行きましょう☆
MT4のツールの中のヒストリーセンターに行くと、ここにコレまでのデータが眠っています。
(初期状態ではDLしないとダメですが)
今回は、上の方で最初に出している画像が1分足なので、
1分足のデータをゲットします。
ここの終値を、エクスポート(量が多すぎて表示できないことあり)
か、転記しましょうww
単純移動平均線をエクセルで計算する
計算の行い方は、
(間近n本の終値の合計/n)
なので、今回は5MAを出していくので、
エクセルで間近5本の各終値の値を足して(SUM関数)、
それを5で割ってあげましょうw
SMAの5MA計算 | 終値 | |
現在ローソク足 | 107.611 | |
1本前 | 107.597 | |
2本前 | 107.595 | |
3本前 | 107.599 | |
4本前 | 107.601 | |
間近5本の合計 | 538.003 | |
間近5本の平均 | 107.6006=107.601 |
となって、先ほどの画像の
現在のローソク足にある移動平均線の値(白)と同じになっていますね!
(今回の場合、厳密には小数点の以下3桁までしか証券会社の表示がないので値としては
若干違いますが)
皆さんは期間を定めた複数の期間の足
(5,10,25)
(25,75,200)
(8,21,89)→フィボナッチ数列関係
などを、短期・中期・長期移動平均線を表示させている人が多いと思います。
今回は、そんな単純移動平均線ってどうやってできているの!?
という部分を書いていきました。
では、さらに突っ込んでみましょう☆
MQL4での移動平均線はどういう風に扱われているのか!?
裁量でトレードをするにしても、
カスタムインジケータ作成でも、EAを作成していくにしても、
MAはどうやってもトレーダーに関わってきます。
(注 単純移動平均線の中身の話から遠ざかります。
人によっては著しく時間を無駄にする可能性があるので気を付けてください。)
では、MQL4というメタトレーダーでのプログラミング言語では、
どの様に扱われているのでしょうか?
という書き出しをしてしまうと、
未熟な私はどう書いていけばいいかわからなくなってしまいましたw
なので、まずは組み込みテクニカル指標関数というものがありますよ!
というのをしっかりアウトプットできるようにして、
別記事で書いていきたいと思います。(書けたら)
今回は、【そういう関数たちがいる】ってことで話を勧めますねww
そして、組み込みテクニカル指標関数を利用する場合は、
各関数の戻り値を指標バッファとして割り当てた配列に代入する。
ことになるのですが、ここもさらっと流してください。ww
今回は「MQL4でどういった風に移動平均線をいじっていくのか~」
をさわりだけ紹介する感じです。
移動平均線の組み込みテクニカル指標関数 iMA()
MQL4ではiMA()という組み込みテクニカル関数さんがいます。
で、その関数の書式が下記になります。
————————————–
double iMA( //doubleは浮動小数点数を宣言するデータ型
string symbol, // 通貨ペアの記入 string は文字列を宣言するデータ型 ①
int timeframe, // 時間軸 int は整数を宣言するデータ型 ②
int ma_period, // MAの平均期間 ③
int ma_shift, // MAシフト ④
int ma_method, // MAの平均化メソッド ⑤
int applied_price,// 適用価格 ⑥
int shift // シフト ⑦
);
—————————————-
と、ここまでがまず1セットで、iMAの書式をざっくり見ましたね!
では、それぞれの変数内にはどういった値が入っていくのでしょうか。
更に分解していきましょう!☆
①symbol
通貨ペアが入ってきます。NULLを入れた場合は、
挿入したチャートの通貨ペアになります。NULL使うこと多いと思います。多分
②timeframe
何分足にするかということです。
ここでは、定数として1分足~月足までをPERIOD_M1~PERIOD_MN1
といった形で記入か、それぞれに対応した1~43200という数字を入れます。
0を入れた場合は、表示させているチャートの時間足になります。
③ma_period
移動平均線の期間を決めます。
MA5が欲しかったら、5と記入します。
④ma_shift
移動平均線をチャートの右にいくつずらすかを決めます。
基本は0で良いと思います。
⑤ma_method
ここで、メゾットがでてきました。
なぜ、この章の段落部分から「単純」の文字が消えているかと言うと、
MQL4のiMA関数での扱いは「単純移動平均線は、複数の移動平均線の中から選ぶ一つ」
的な扱いで選択されます。
ma_method では
定数 | 値 | 種類 |
MODE_SMA | 0 | 単純移動平均線 |
MODE_EMA | 1 | 指数移動平均線 |
MODE_SMMA | 2 | 平滑移動平均線 |
MODE_LWMA | 3 | 線形加重移動平均線 |
といった選択をするので、今回は単純移動平均線で0を入力しましょう!
⑥applied_price
どの価格を適用するかを設定できます。
全部書くと多いので、4つに絞って
【終値=0(PRICE_CLOSE) 始値=1 高値=2 安値=3】
でそれぞれに定数があります。
今回は、終値の0をチョイスします。
⑦shift
移動平均線を算出する位置(最新のバーから後ろに何本)
そして、これらの戻り値が、
shift の位置における移動平均線の値になります。
ということで、記事の冒頭での間近5MAでの移動平均線の値を取得するためのiMAでの書き方は
iMA(NULL, 0, 5, 0, MODE_SMA, PRISE_CLOSE, 0);
MODE_SMAとPRICE_CLOSEは定数で書いてます。
とまあ、これだけ書いてもインジケーターに表示もされませんが、、、ww
単純移動平均線の記事のまとめ
ただ単に単純移動平均線を算出して記入するとなれば、
自分でデータを見て、エクセルなんかで計算して一個一個出せば、
手動ででも移動平均線を書けなくはなさそうですよねw
でも圧倒的に大変だから、プログラムに最初に色々と指定してあげて(①~⑦とか)
他にもいろいろ定義づけやら命令を加えてあげることで、
自動でチャートに過去に遡って移動平均線が引かれるんだなあと、なんとなく私はコード見たりしてて思ったので、
その流れで記事を書かせてもらいました(笑
今回の記事では、
単純移動平均線の算出の仕方から~MQLで移動平均線を使っていきたい場合によく使う関数の話まで行っていきました。
記事としては、私のアウトプット的な意味合いが強く、
かなり勢いで書いた記事なので、
まとまりのない文章になってしまって申し訳ありませんでしたが、
最後まで読んで頂きありがとうございました☆