【移植#72】必要な日だけPivotを引く — 前日値幅で描く4つのFiboZone¶

この記事の3行まとめ
- 原典の計算式を確認し、Pivotの上下に「前日値幅の0.500〜0.618倍」と「1.000〜1.382倍」の帯を描きます
- 表示は直近1〜20日分。前の確定日足だけを使い、日付の境目で線を区切ります
- 1日・3日表示、日曜足の除外切替、通常Pivotを専用MT5で照合しました。線に触れたことと売買の優位性は別です
今回の原典は「PivotとFiboZone」¶
投稿日順で次の題材は、2010年3月20日の記事です。
原典は、Pivotとフィボナッチの帯を、必要な日数だけチャートに表示するツールを紹介しています。1日分と3日分の表示例があり、チャートを線だらけにしない使い方が特徴です。
今回は原典にリンクされた配布ZIP内の !3CA_Pivot2.mq4 と !3CA_FiboZone2.mq4 を読み、価格の計算式を確認してからMQL5で書き直しました。2本のインジケーターの役割を、1本にまとめています。
FiboZoneは、前日高安をそのまま分割した線ではありません¶
最初に、計算に使う前の確定日足の高値を H、安値を L、終値を C とします。
4つの帯は、Pivotを中心に前日値幅を足し引きして作ります。
| 帯 | 下端 | 上端 |
|---|---|---|
| 上側・内側 | P + 0.500 × W | P + 0.618 × W |
| 上側・外側 | P + 1.000 × W | P + 1.382 × W |
| 下側・内側 | P − 0.618 × W | P − 0.500 × W |
| 下側・外側 | P − 1.382 × W | P − 1.000 × W |
0.500や1.000も含め、ここでは原典の比率をそのまま採用しています。よく見かける別のフィボナッチ・ピボットの係数に置き換えていません。
帯と一緒に、中心の P と4本の R1 / R2 / S1 / S2 を表示します。初期設定のFibo Pivotでは、内側の線が P ± 0.618W、外側の線が P ± 1.382W です。
通常Pivotへ切り替えたときの違い¶
InpUseFiboPivot=false にすると、線の計算を原典の通常Pivotへ切り替えます。
この切替が変えるのは線だけです。帯は常に先ほどのFiboZoneの式で描きます。 原典でも、PivotとFiboZoneは別のインジケーターだったためです。
通常Pivotの線だけを確認したいときは、あわせて InpShowZones=false にします。
「何本ずらすか」から「どの日に描くか」へ¶
原典はチャートの時間足から1日分のバー数を求め、バッファをシフトして表示していました。今回のMT5版は、日足の開始時刻を基準に、水平な線分と長方形を直接置きます。
- 価格は、表示する日の前の確定日足から計算します
- 過去の日は、その日の日足開始から次の日足開始の1秒前まで描きます
- 最新の日は、日足開始から24時間後の1秒前まで描きます
- 左右へ無限に伸びる線や、異なる日の価格を結ぶ斜線は作りません
線分には、両端の価格を同じにした OBJ_TREND を使い、左右の延長を無効にしました。帯は塗りつぶした長方形です。最新日の右側にも表示できるのは、値が前日までの情報で決まっているためで、未来の価格を使っているわけではありません。
日足は CopyRates() でまとめて取得し、必要本数が揃うまで値を表示しません。履歴がまだ準備されていない場合は待機表示にして、1秒Timerからも再試行します。価格配信のないカスタム銘柄でも、次のTickを待ち続けないためです。
日曜足をどう扱うか¶
短い日曜足を配信するブローカーでは、その値幅だけで月曜のラインを作ると、帯が非常に狭くなることがあります。
原典には「参照する前の足が日曜なら、さらに1本前を使う」処理がありました。MT5版も初期設定でこれを引き継ぎます。日曜足が前にあれば、通常は金曜の日足から計算します。
ただし、日曜を金曜へ合算する処理ではありません。日曜足を計算元から除く方式です。また、InpDays は端末に存在する日足の本数なので、日曜足がある端末では表示日数にも数えます。
日付はブローカーの日足を基準にします
今回の版は日足専用で、時刻補正は行いません。原典の TargetPeriod による週足・月足指定と GMTShift は移植対象から外しました。日本時間区切りやニューヨーク終値区切りへの変換ではありません。過去の線分は次に存在する日足まで続くため、週末の休場時間を含むことがあります。最新日の終端だけは24時間として扱います。
1日分だけを表示する¶
InpDays=1 にすると、最新の日足に対応する線と帯だけになります。

数日間の違いを見比べるなら3日、今日の水準だけ見たいなら1日、と使い分けられます。前日値幅が変わるので、帯の厚さや中心の位置も日ごとに変わります。
専用MT5での検証¶
配布インジケーターと独立した検証EAをコンパイルし、実データと合成データの両方で動作を確認しました。
| 項目 | 結果 |
|---|---|
| MT5 Build | 6182 |
| 実データのチャート | EURUSD H1 |
| 配布インジケーター | コンパイル0エラー・0警告 |
| 独立検証EA | コンパイル0エラー・0警告 |
| 注文数・ポジション数 | 開始前後で変化なし |
5条件で、価格と描画範囲を照合¶
| 条件 | 期待する表示オブジェクト | 結果 |
|---|---|---|
| 実データ・Fibo・3日・帯あり | 30 | 価格・時刻・本数一致 |
| 実データ・Fibo・1日・帯あり | 12 | 価格・時刻・本数一致 |
| 合成データ・Fibo・3日・日曜除外 | 30 | 価格・時刻・本数一致 |
| 合成データ・Fibo・3日・日曜を含む | 30 | 価格・時刻・本数一致 |
| 合成データ・通常Pivot・3日・帯なし | 18 | 価格・時刻・本数一致 |
1日あたり線5本・帯4個で、これに状態表示3個を加えた本数です。帯なしでは1日5本になります。
検証EAは配布版の計算関数を呼ばず、日足の高値・安値・終値を別に取得して再計算しました。各オブジェクトの種類、両端の時刻、両端の価格、線の延長無効、帯の塗りつぶし、本数を確認しています。
合成データでは、日曜足と最新足の値幅をほかの日より極端に大きくしました。日曜除外の切替で参照元が変わることと、形成中扱いの最新足の値幅がその日の計算へ混入しないことを確かめるためです。
実データの計算例¶
2026年9月10日分の表示に使った、前日9月9日の日足は次のとおりでした。
同じEURUSDでもブローカーや日足の区切りが異なれば、値は一致しません。
パラメーターと使い方¶
| パラメーター | 初期値 | 役割 |
|---|---|---|
InpDays | 3 | 表示する日足の本数。1〜20 |
InpUseFiboPivot | true | falseで線を通常Pivotへ切替 |
InpShowZones | true | FiboZoneの帯を表示 |
InpSkipSundaySource | true | 計算元の前日足が日曜なら1本前へ |
- 下のMQ5をMT5のデータフォルダ内の
MQL5/Indicatorsへ置きます。 - MetaEditorでコンパイルし、H1など日足未満のチャートへ装着します。
- まずは初期設定の3日表示で、金色の中心線と上下の帯を確認します。
- 当日分だけなら
InpDays=1へ変更します。 - 右側にも当日分の帯を見たい場合は、チャートの右端シフトを有効にします。
装着チャートの銘柄をそのまま使うため、銘柄名の接頭辞・接尾辞もそのまま扱います。日足以上への装着や表示日数の範囲外指定は受け付けません。
72_Pivot_FiboZone_Sessions_v1_00.mq5 をダウンロード
帯に触れたことだけでは、効いたとは言えません¶
上下4つの帯と5本の線を置くと、価格がどこかへ近づく場面は増えます。今回確認したのは、計算と表示の正しさです。売買成績や反発確率は検証していません。
線が多いほど当たりやすくなる問題は、移植#68のライン・カバー率の検証でも扱いました。今回の帯が支持・抵抗として有効かを調べるなら、判定する距離、反発を測る期間、コスト、比較対象を先に決めた別の検証が必要です。
配布版は可視化専用で、売買・通知・DLL呼び出しを行いません。また、配信元が過去の日足を訂正すれば、対応する過去の線も再計算されます。
まとめ¶
原典の「必要な日だけ表示する」という機能と、Pivotを中心とした4つの帯をMT5へ移しました。前の確定日足、日曜足の扱い、表示する期間を明示すると、どのデータから引いた線なのかを追いやすくなります。
まずは1日表示と3日表示を切り替え、前日値幅と帯の広さの関係を観察してみてください。
前後の記事¶
前: 【移植#71】偽Tickを送らない — MT5タイマーの周期と取りこぼしを測る