【移植#90】MTFサポート・レジスタンスを自動更新 — フラクタルの更新範囲を見直す¶

この記事の3行まとめ
- MTF指標の再計算範囲は、最長の参照時間足が影響するチャート足まで広げます
- フラクタルの確定に必要な右側の足も考慮し、最大時間足比の3倍に余白を加えます
- MT5の全8ラインを1500本で全再計算版と比べ、10500個の有効値で差はありませんでした
手動更新をなくしつつ、全足の再計算も避ける¶
2010年4月29日の原典は、MTFサポート・レジスタンス指標が自動更新されず、手動更新が必要だという相談を扱っています。記事では、更新済み本数をIndicatorCounted()に任せず0へ戻す簡単な方法と、より効率よく更新する方法を説明していました。
元記事「自動更新されない! MTF SR.mq4の修正。。」を読む
簡単な方法は過去の全バーを計算し直すため、履歴が長いほど無駄が増えます。原典の改善案は、いちばん長い参照時間足が影響する範囲を求め、フラクタルの計算分としてその3倍まで再計算する考え方です。
今回はこの考え方をMT5で確かめるため、日足・4時間足・1時間足・30分足のフラクタルから、直近の高値をレジスタンス、安値をサポートとして表示する指標を作りました。元のMT4ファイルは記事ページから取得できなかったため、原典のコードをそのまま移植したものではありません。本文に説明された更新範囲の考え方を使った独立実装です。
上位足のフラクタルが変わり得る範囲¶
チャートがM5で、参照する最長時間足がD1なら、1日分に相当するチャート足は名目上288本です。原典の3倍を適用すると864本が目安になります。MT5版では時間足の秒数から比率を切り上げて求め、フラクタルの確定位置を扱うためにさらに2本を加えています。
この設定ではM5チャートの更新範囲は866本です。履歴の先頭やデータ更新などでMT5からprev_calculated=0が渡された場合は、全履歴を初期化して再計算します。上位足のデータやフラクタル値がまだ揃っていない場合も0を返し、次の計算イベントで再試行します。
フラクタルは、候補となる高値・安値の後に右側の足ができてから確定します。過去の候補位置へ確定前の値を描くと、後から振り返ったときだけ見える情報が混ざります。この実装では、チャート時刻に対応する上位足から3本分過去にある候補を使い、確定した後の時点から水準を表示します。
MT5では時間足ごとのフラクタルをiFractals()で作り、バッファをCopyBuffer()で読みます。チャート足を上位足へ対応づけるにはiBarShift()を使います。履歴の欠損で対応する足がない場合に近い足を使う設定なので、ブローカーの取引時間や履歴差も表示に影響します。
全再計算と1500本を照合¶
MT5 Build 6230で、配布指標と検証用EAをそれぞれ0エラー・0警告でコンパイルしました。EURUSD M5の1500本について、部分更新版と毎回全範囲を再計算する診断版の8バッファを比較しました。有効な10500個の値で差は0、判定不一致も0でした。注文・ポジション数は検証前後とも0です。
ここで確認したのは、同じ履歴に対する計算結果が一致することです。相場の将来の動きや、フラクタル水準を使った売買の有効性を調べたものではありません。画像は検証端末で指標を表示して撮影しています。
使い方¶
90_MTF_SR_Auto_Refresh_v1_00.mq5 をダウンロード
- MT5のデータフォルダ内
MQL5/Indicatorsに保存し、MetaEditorでコンパイルします。 - M30以下のチャートへ追加します。既定の参照時間足はD1、H4、H1、M30です。
- 各時間足の赤系ラインが直近の確定フラクタル高値、青系ラインが直近の確定フラクタル安値です。
時間足は入力から変更できますが、チャート時間足より短いものを指定すると初期化に失敗します。InpMaxBarsは表示履歴の上限です。通常はInpFullRecalculation=falseのまま使います。trueは診断用で、毎回全範囲を計算し直します。フラクタルは遅れて確定するため、転換点そのものの価格に確定後から線が伸びます。サポート・レジスタンスの候補を示すだけで、反発や突破を予測するものではありません。
参考¶
あわせて読みたい記事¶
前: 【移植#89】形成中の日足EMAをたどる — H1確定値から軌跡を描く
次: 【移植#91】トレンドラインの平均速度をpips/hで表示 — 画面の角度に頼らない