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

この記事の3行まとめ
- MQL4で背景色の棒を重ねていた表示を、MQL5の
DRAW_COLOR_CANDLESへ置き換えました - 平均足の始値・高値・安値・終値と色番号を、合計5本のバッファでサブウィンドウへ描きます
- EURUSD・1時間足1000本で計算式との一致を確認し、陽線460本・陰線540本・色転換232回を検出しました
今回の原典は「ゼロまで伸びる棒をどう隠すか」¶
投稿日順で次に当たる2010年1月8日の記事では、平均足をサブウィンドウへ表示するMQL4インジケーターが取り上げられていました。
元記事「SubWindow の DRAW_HISTOGRAM で平均足」を読む
MQL4のサブウィンドウでDRAW_HISTOGRAMを使うと、棒は値からゼロラインまで伸びます。そのままでは、価格帯にある平均足の胴体だけを宙に浮かせたように描けません。
原典で紹介された方法は、余分に伸びた部分へ背景色と同じ棒を重ねて隠すものでした。黒い背景なら黒、白い背景なら白へ設定し直す必要があります。グリッドまで覆われるため、表示テーマに依存することも記事中で説明されています。
この発想はMQL4の描画制約を回避する工夫として面白い一方、MQL5で同じ隠し方を再現する必要はありません。
MQL5ではローソク足を直接描ける¶
MQL5のDRAW_COLOR_CANDLESは、4本の価格バッファと1本の色番号バッファを使い、ローソク足を直接描画できます。公式リファレンスでも、チャートのサブウィンドウへ表示できる描画形式として定義されています。
今回の構成は次の5本です。
| バッファ | 内容 | 役割 |
|---|---|---|
| 0 | 平均足の始値 | 胴体の始点 |
| 1 | 平均足の高値 | 上ヒゲの先端 |
| 2 | 平均足の安値 | 下ヒゲの先端 |
| 3 | 平均足の終値 | 胴体の終点 |
| 4 | 色番号 | 0が緑、1が赤 |
公式仕様どおり、始値・高値・安値・終値・色番号の順でSetIndexBuffer()へ登録しています。背景色の棒や、表示を隠すための追加バッファはありません。
今回の移植は原典の中心だった「平均足をサブウィンドウへ描く方法」に範囲を絞っています。参照されていたファイル名にはMTFの表記がありますが、配布版は現在のチャートと同じ時間足を使います。
平均足の計算式¶
各バーの平均足終値は、通常足の4本値を平均します。
平均足始値は、1本前の平均足始値と平均足終値の中間です。
高値と安値には、通常足の高値・安値と、そのバーの平均足始値・終値を使います。
平均足終値が平均足始値以上なら緑、下なら赤にしています。色は入力パラメータから変更できます。
平均足始値は1本前の計算結果へ依存します。そのため、配布版は配列を古いバーから新しいバーの順にそろえ、前の値が確定してから次のバーを計算します。
MQL5実装で確認した安全ポイント¶
再計算時も1本前からつなぎ直す¶
初回は履歴の先頭から計算し、2回目以降はprev_calculated - 1から更新します。形成中の最新バーだけでなく、その直前とのつながりも再確認できる位置です。
時間足変更などで計算済み本数が現在の履歴本数より大きくなった場合は、その状態のまま配列へアクセスせず、再初期化を待ちます。
配列の向きを明示する¶
価格配列とインジケーターバッファを、ともに古いバーが小さい添字になる向きへ統一しています。平均足始値の計算でi - 1が必ず1本前を指すようにし、時系列の逆転を防ぎました。
高値・安値の包含関係を検証する¶
平均足の高値は通常足高値、平均足始値、平均足終値の最大値です。安値は同じ3値の最小値です。検証EAでは、表示バッファを読むだけでなく元のローソク足から4本値を再計算し、1000本すべてで一致することを確認しました。
ハンドルや売買処理を持たない¶
このインジケーターはチャートから受け取るOHLCだけで計算します。外部インジケーターハンドル、注文送信、ポジション操作はありません。平均足の色は値動きを見やすく平滑化した結果であり、将来の方向や利益を保証する売買シグナルではありません。
専用MT5での動作確認¶
売買を行わない専用テストMT5で本体と検証EAをコンパイルし、サブウィンドウの表示と計算値を確認しました。
| 項目 | 設定・結果 |
|---|---|
| 通貨ペア・時間足 | EURUSD・1時間足 |
| 検査本数 | 直近1000本 |
| 平均足の陽線 | 460本 |
| 平均足の陰線 | 540本 |
| 色の転換 | 232回 |
| OHLC計算式との最大誤差 | 0.0000ポイント |
| 本体コンパイル | 0 errors / 0 warnings |
| 検証用コンパイル | 0 errors / 0 warnings |
| キャプチャ | 成功、エラー0 |
画像上段は通常のEURUSDチャート、下段が今回の平均足です。背景は標準の黒、価格表示は緑に統一し、平均足は陽線を緑、陰線を赤で表示しています。ゼロラインまで伸びる不要な棒や、背景色で隠した跡はありません。
パラメータ¶
| パラメータ | 初期値 | 説明 |
|---|---|---|
InpBullColor | LimeGreen | 平均足終値が始値以上の色 |
InpBearColor | Tomato | 平均足終値が始値より下の色 |
配布版はチャートの銘柄と時間足をそのまま使います。別時間足の平均足を同じ画面へ重ねるMTF機能は含めていません。
ダウンロード¶
21_Heiken_Ashi_Subwindow_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、確認したいチャートへ適用してください。平均足はメインチャートではなく、専用のサブウィンドウへ表示されます。
ロジック評価の結論¶
原典の見どころは、描画機能が足りない環境でも「見せたくない部分を背景色で上書きする」ことで目的の表示へ近づけた点です。ただし、背景色やグリッドに依存するため、利用者のチャート設定が変わると見た目も崩れます。
MQL5ではDRAW_COLOR_CANDLESがローソク足の4本値とバーごとの色を直接扱えます。今回の移植では、原典の視覚的な目的を維持しつつ、背景色による隠蔽を取り除けました。
平均足には通常足より細かな上下動を見やすくまとめる長所がありますが、表示されるOHLCは実際の約定価格ではなく合成値です。損切りや指値の価格を平均足の高値・安値へそのまま置くのではなく、注文判断では通常足の実価格も必ず確認してください。
前後の記事¶
前: 【移植#20】MAの間に雲を描く — DRAW_FILLINGで上昇・下降を塗り分ける
次: 【移植#22】ダブルゼロを価格タグで意識する — 水平線を増やさず節目を表示