コンテンツにスキップ

【移植#20】MAの間に雲を描く — DRAW_FILLINGで上昇・下降を塗り分ける

12EMAと26EMAの間を赤と青の雲で塗り分けたEURUSD 1時間足

この記事の3行まとめ

  • 12EMAと26EMAの間を塗り、短期が上なら赤、下なら青の雲として表示します
  • MQL4のペアになったDRAW_HISTOGRAMを、MQL5専用のDRAW_FILLINGへ置き換えました
  • EURUSD・1時間足1000本で上下両状態と41回のクロスを確認し、雲と境界線の値も完全一致しました

今回の原典は「2本の移動平均の間を塗る」

投稿日順で次に当たる2010年1月7日の記事では、MQL4のメインチャート上に一目均衡表のような雲を描く方法が紹介されていました。

元記事「雲を描く」を読む

原典のサンプルは、短期と長期の2本の移動平均をラインで描き、その値を別の2本のバッファへ複製しています。後者へDRAW_HISTOGRAMを指定すると、2本の値の間が縦線で埋まり、上下関係が変わる場所で色も切り替わります。

初期設定は次の組み合わせです。

項目 原典の初期値
短期MA 12
長期MA 26
平滑化 EMA
適用価格 Typical Price
短期が上の色 Crimson
短期が下の色 RoyalBlue

今回のMQL5版も、期間、計算方式、適用価格、色の対応を変えていません。


MQL5ではDRAW_FILLINGを使う

MQL4のDRAW_HISTOGRAMには、メインチャートで連続する偶数・奇数バッファを組にして、その間を塗る特殊な使い方がありました。MQL5では、この目的に合うDRAW_FILLINGが用意されています。

DRAW_FILLINGは、1つの描画に2本のインジケーターバッファを使います。第1バッファが第2バッファより大きい区間と、その反対の区間へ別々の色を指定できます。

今回のバッファ構成は次のとおりです。

バッファ 用途 描画
0 短期EMAの雲側 DRAW_FILLINGの第1境界
1 長期EMAの雲側 DRAW_FILLINGの第2境界
2 短期EMA CrimsonのDRAW_LINE
3 長期EMA RoyalBlueのDRAW_LINE

雲だけでも上下関係は分かりますが、境界線がないと2本が接近した部分を追いにくくなります。原典の考察と同じく、雲2本にライン2本を重ね、合計4バッファで見やすさを優先しました。


色が切り替わる条件

適用価格のTypical Priceは、各バーの高値・安値・終値を使います。

Text Only
Typical Price = (High + Low + Close) / 3
Fast = EMA(Typical Price, 12)
Slow = EMA(Typical Price, 26)

雲の判定は、複雑な売買条件ではなく2本の大小関係だけです。

状態 条件 雲の色
短期が上 Fast > Slow Crimson(赤)
短期が下 Fast < Slow RoyalBlue(青)
同値 Fast = Slow 2本の境界が重なる

赤と青の切り替わりがEMAクロスです。形成中の0番足も移動平均とともに更新されるため、最新部分の色は足が確定するまで変わる可能性があります。ただし、過去の確定足を後から計算し直すようなロジックは入れていません。


MQL5実装で確認した安全ポイント

iMA()は値ではなくハンドルを返す

MQL4の原典はループ内でiMA()の値を直接取得していました。MQL5のiMA()はインジケーターハンドルを返すため、短期用と長期用を初期化時に一度だけ作成しています。

必要本数がそろうまで描画を確定しない

内部MAの計算本数を確認し、CopyBuffer()が要求本数をすべて返した場合だけ雲を更新します。履歴の読み込み途中に一部だけ届いた値を正常な描画として扱いません。

雲と境界線は同じ値を使う

短期・長期EMAを取得したあと、その値を雲用バッファへ複製します。別々にEMAを再計算しないため、境界線と塗りの位置がずれません。実MT5の検証EAでも4本のバッファを個別に読み、1000本すべてで一致を確認しました。

ハンドルを解放する

インジケーターを外したときは、短期・長期の両ハンドルをIndicatorRelease()で解放します。時間足変更や付け外しを繰り返しても、不要な計算資源を残さない構成です。

売買処理は含めない

このインジケーターは表示専用です。注文送信、ロット計算、ポジション操作は行いません。雲の色は2本のEMAの位置関係であり、それだけで将来の値動きや利益を保証する売買シグナルではありません。


専用MT5での動作確認

売買を行わない専用テストMT5で本体をコンパイルし、表示とは別に全バッファを読み取って検査しました。

項目 設定・結果
通貨ペア・時間足 EURUSD・1時間足
検査本数 直近1000本
短期MA EMA 12
長期MA EMA 26
適用価格 Typical Price
短期EMAが上 481本
短期EMAが下 519本
EMAクロス 41回
雲と境界線の一致 1000本で一致
雲の最大幅 281.6ポイント
本体コンパイル 0 errors / 0 warnings
検証用コンパイル 0 errors / 0 warnings
キャプチャ 成功、エラー0

画像では赤い区間で12EMAが26EMAより上、青い区間で12EMAが26EMAより下です。境界に同色のラインを重ねたため、雲が細くなるクロス付近も確認できます。


パラメータ

パラメータ 初期値 説明
InpFastPeriod 12 短期MAの期間
InpSlowPeriod 26 長期MAの期間
InpMAMethod EMA SMA、EMA、SMMA、LWMAから選択
InpAppliedPrice Typical Price MA計算へ使う価格

短期期間は長期期間より小さく設定してください。不正な期間では初期化を中止します。MA方式や適用価格を変えても、雲と2本の境界線は同じ計算結果を共有します。


ダウンロード

20_MA_Cloud_v1_00.mq5 をダウンロード

MT5のIndicatorsへ保存してコンパイルし、確認したい通貨・時間足のチャートへ適用してください。


ロジック評価の結論

原典の価値は、2本の線の上下関係を色の面へ変換し、クロス後の状態を一目で追えるようにした点です。MQL5ではDRAW_FILLINGが同じ目的を直接表現できるため、MQL4固有のバッファペア規則を再現するより、意図が明確な実装になりました。

一方、雲の色は移動平均の遅行性を引き継ぎます。レンジ相場では赤と青が短期間に入れ替わりやすく、色の切り替わりだけで取引すると往復のノイズを拾う可能性があります。トレンドの視認補助として使い、エントリーへ応用する場合は価格位置、上位足、変動幅などを別に検証する必要があります。

見た目は一目均衡表の雲に似ていますが、計算内容は12EMAと26EMAの間を塗ったものです。一目均衡表の先行スパンとは別物であることを理解したうえで使うのが、このサンプルの正しい位置づけです。


前後の記事

前: 【移植#19】オシレーター通知 — Slow StochasticクロスとWilliams %R到達を確定足で知らせる

次: 【移植#21】平均足をサブウィンドウへ描く — 背景色で隠さずDRAW_COLOR_CANDLESで表示

— SPONSORED —