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

この記事の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は、各バーの高値・安値・終値を使います。
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本の境界線は同じ計算結果を共有します。
ダウンロード¶
MT5のIndicatorsへ保存してコンパイルし、確認したい通貨・時間足のチャートへ適用してください。
ロジック評価の結論¶
原典の価値は、2本の線の上下関係を色の面へ変換し、クロス後の状態を一目で追えるようにした点です。MQL5ではDRAW_FILLINGが同じ目的を直接表現できるため、MQL4固有のバッファペア規則を再現するより、意図が明確な実装になりました。
一方、雲の色は移動平均の遅行性を引き継ぎます。レンジ相場では赤と青が短期間に入れ替わりやすく、色の切り替わりだけで取引すると往復のノイズを拾う可能性があります。トレンドの視認補助として使い、エントリーへ応用する場合は価格位置、上位足、変動幅などを別に検証する必要があります。
見た目は一目均衡表の雲に似ていますが、計算内容は12EMAと26EMAの間を塗ったものです。一目均衡表の先行スパンとは別物であることを理解したうえで使うのが、このサンプルの正しい位置づけです。
前後の記事¶
前: 【移植#19】オシレーター通知 — Slow StochasticクロスとWilliams %R到達を確定足で知らせる
次: 【移植#21】平均足をサブウィンドウへ描く — 背景色で隠さずDRAW_COLOR_CANDLESで表示