同じチャートを見て「上昇」と「レンジ」に意見が割れるのは、相場が曖昧だからではなく、どの山を高値と呼ぶかを先に決めていないからです。流れの判定を安定させたければ、決めるべきは四つ。対象の時間足、スイング点(山と谷)の定義、更新の判定基準、そしてカウントをリセットする条件です。この四つを文章にして固定すれば、判定は誰がやっても同じ結果になり、検証の対象になります。
なぜ同じチャートで判定が割れる?
高値・安値の更新を数えるという発想そのものは古くからあります。ダウ理論(Dow theory)として知られる考え方では、上昇トレンドを「高値と安値がともに切り上がる状態」と説明します。枠組みは明快ですが、実務で詰まるのは次の点です。
- どの山が「高値」なのか。5分足の小さな戻り高値も高値と呼ぶのか、それとも一定の大きさを超えた山だけを数えるのか。
- どこまで動いたら「更新」なのか。ヒゲが0.1pips上抜けただけで更新と呼ぶのか、終値で超えたときだけ数えるのか。
- いつ確定するのか。山は後から見れば明らかですが、リアルタイムでは「まだ伸びるかもしれない」状態が続きます。
この三つが未定のまま目視で判断すると、その日の気分やポジションの有無で結論が変わります。主観を減らすというのは、感情を抑えることではなく、判断が入る余地を定義で埋める作業だと考えたほうが実装しやすいはずです。
スイング高値・安値とは何を指す?
スイング高値(swing high)は周囲より高い山の頂点、スイング安値(swing low)は周囲より低い谷の底を指します。「周囲」をどう決めるかで方式が分かれます。代表的なものを並べます。
| 方式 | 判定の仕方 | 自分で決める値 | 弱点 |
|---|---|---|---|
| N本フラクタル | ある足の高値が、前後N本の高値より高ければスイング高値とする | N(前後の本数) | 確定までN本待つ。値幅を見ないので小さな山も拾う |
| 値幅しきい値(ZigZag型) | 直前の極値から一定以上逆行して初めて、その極値をスイング点として確定する | 反転と見なす幅(%またはpips) | ボラティリティが変わると同じ幅の意味が変わる |
| ATR倍率 | 反転幅のしきい値をATRの定数倍で置く | ATRの期間と倍率 | ATRの計算期間しだいで反応が変わる |
| 終値ベース | ヒゲを無視し、終値だけで山谷と更新を判定する | 時間足 | 日中の瞬間的な抜けを取りこぼす |
ATR(Average True Range、真の値幅の平均)は、ギャップを含めた1本あたりの値幅を平均した指標で、J. Welles Wilder の著作で紹介されたものとして知られます。値幅しきい値を固定pipsで置くと、ボラティリティが縮んだ局面では山が拾えず、拡大局面では拾いすぎます。ATR倍率はその補正ですが、万能ではありません。ボラティリティの縮小が何を意味するかはボラ縮小が示すのは方向でなく時間でも扱っています。
どれが正しいという話ではありません。重要なのは、方式と数値を書き留めて、途中で変えないことです。方式を変えるなら、変更前後の判定を並べて比較できる形で残します。
「更新」はどう判定する?
スイング点が定義できたら、次は更新の判定です。ここで決める項目は三つあります。
- 基準価格:ヒゲ(高値・安値)で見るか、終値で見るか。ヒゲ基準は反応が早い代わりに、瞬間的な抜けで判定が反転します。終値基準は判定が安定する代わりに足の確定を待ちます。
- しきい値:「超えた」と言うための余裕幅。0でもルールとしては成立しますが、スプレッド拡大やデータ提供元の差で判定が割れやすくなります。
- 同値の扱い:直前のスイング高値とぴったり同値だった場合に更新と数えるか、数えないか。例外として後から悩まないよう、先に決めます。
基準価格は、検証に使うデータの仕様とも直結します。ヒゲ基準を採るなら、ヒゲの値がデータ提供元によって違う可能性を前提に置く必要があります。この種の落とし穴は検証のブレを潰すデータ仕様7項目で整理しています。
確定の遅れを嘘にしない
N本フラクタルで前後2本を条件にすると、山が確定するのは頂点からN本後です。検証コードで「頂点の位置でシグナルが出た」ことにすると、未来の情報を使った判定になります。これはリペイント(後から過去の表示が変わる現象)と呼ばれる問題で、バックテストの成績を実際より良く見せる典型的な原因です。スイング点には「発生した足」と「確定した足」の二つの時刻を持たせ、使ってよいのは確定時刻以降だけとするのが安全です。
数えた結果をどう記録する?
更新の判定ができたら、直前の同種スイングとの比較で四つに分類します。
| 記号 | 読み方 | 意味 |
|---|---|---|
| HH | Higher High | 直前のスイング高値より高い高値 |
| HL | Higher Low | 直前のスイング安値より高い安値 |
| LH | Lower High | 直前のスイング高値より低い高値 |
| LL | Lower Low | 直前のスイング安値より低い安値 |
そのうえで状態を定義します。たとえば次のような決め方です(仮の設定例であり、推奨値ではありません)。
- HHとHLが連続して出たら「上昇」、LHとLLが連続したら「下降」、それ以外は「不定」。
- 上昇中にLLが出たら、連続カウントを0に戻して「不定」へ。
- 連続カウントは、同じ向きの組み合わせが続いた回数とする。
記録する列は、表計算でも十分に足ります。最低限、銘柄・時間足・スイング種別(高値か安値か)・価格・発生時刻・確定時刻・分類(HH/HL/LH/LL)・連続カウント・状態を持たせます。時刻はブローカーのサーバー時刻とUTCのどちらで持つかを決め、列名に明記します。記録項目の決め方そのものは取引記録は表計算で足りる──続く項目の決め方の考え方がそのまま使えます。
この形で残すと、後から「上昇状態が何本続いたか」「不定に落ちてから再び上昇に戻るまでの平均本数はどれくらいか」といった集計ができます。集計できて初めて、数え方が自分の時間軸に合っているかを検証できます。
この数え方が機能しにくいのはどんな相場?
構造が単純なぶん、崩れる条件もはっきりしています。
| 条件 | 起きること | 考えられる対処 |
|---|---|---|
| 狭いレンジ | HHとLLが交互に出て状態が頻繁に反転する | しきい値をATR倍率にする。状態が不定の期間を集計対象から外す |
| 押しが極端に浅い一方通行 | スイング安値が形成されず、HLが数えられない | 小さい時間足を併用して谷を拾う |
| 週明けの窓(ギャップ) | 窓の片側だけで更新判定が成立してしまう | 窓をまたぐ足に印を付け、別集計にする |
| 経済指標・中銀イベントの直後 | ヒゲ基準の判定が一瞬で反転する | イベント時刻の前後を除外区間として記録する |
| 流動性が薄い時間帯 | 提供元ごとのヒゲ差が判定を左右する | 終値基準に切り替える。しきい値を広げる |
特に注意したいのは、レンジで状態がパタパタ反転することを「ダマシ」と呼んで片付けないことです。それは手法の欠陥ではなく、定義どおりに動いた結果です。除外する条件を定義側に書き足すのか、それとも不定状態を許容して何もしない時間と割り切るのか、方針を決めて記録に残します。
まとめ
高値・安値の更新を数える作業は、指標を増やすことなく流れの判定を言語化できる点に価値があります。やることは次の順です。
- 時間足を一つに固定する。複数見るなら、それぞれ別の列として記録する。
- スイング点の定義(N本フラクタル、値幅しきい値、ATR倍率、終値ベースなど)と数値を文章で残す。
- 更新の基準価格・しきい値・同値の扱いを決める。
- 発生時刻と確定時刻を分けて持ち、確定前の情報を使わない。
- HH/HL/LH/LLと状態、連続カウントを表に記録し、後から集計する。
この数え方は方向を当てるための道具ではなく、自分が見ている状態を再現可能にするための記録様式です。状態が「上昇」と出ていても、その先が続く保証はどこにもありません。判定が正しいことと、その判定で利益が出ることは別の問題です。実際の売買に使う前に、自分の口座とデータで集計し、機能しない条件を自分の目で確認してください。相場には常に損失の可能性があり、過去の集計結果が将来の結果を示すものではありません。
この記事は、AI で下書きを作り、益山康秀(運営者)が内容を確認して公開しています
この記事は情報の提供を目的としたもので、特定の金融商品の売買をすすめるものではありません。売買の判断は、ご自身の責任で行ってください。(運営者情報)