日足の高値が利確価格を上回り、安値が損切り価格を下回った。バックテストには利益が記録されているが、実際には先に損切りされた可能性もある。ローソク足一本が示すのは始値・高値・安値・終値という四本値であり、その間をどの順番で動いたかまでは分からない。
短い利確幅や損切り幅を使う戦略では、この順序の仮定だけで成績が逆転し得る。本稿では、すでに保有している買い建玉から始める単純な例で、分からない部分をどのように計測し、検証の判断へ反映するかを説明する。数値は全て架空で、手数料を除く例から順に考える。
同じ四本値から正反対の損益が生まれる
始値100円、高値110円、安値90円、終値105円の足を考える。足が始まる前から100円で100株を保有し、利確を108円、損切りを95円に設定していたとする。どちらかで全量決済したら、残りの決済注文を取り消す前提だ。
価格が100→110→90→105の順なら、108円の利確に先に届き、利益は8円×100株=800円。一方、100→90→110→105なら、95円の損切りに先に届き、損失は5円×100株=500円となる。足の色も四本値も同じなのに、一つの取引の損益差は1300円になる。

陽線だから先に安値を付けた、上ヒゲが長いから先に高値を付けた、といった読み方では順序は確定しない。実際の価格はその間に何度も往復する可能性があり、二つの単純経路は曖昧さを示すための例にすぎない。
最初に「曖昧な取引」を別に数える
全ての取引がこの問題を持つわけではない。足の安値が損切りより上で高値だけが利確へ届いた場合は、少なくとも四本値の範囲では競合しない。高値も安値も決済条件へ届かない足も、今回の意味では曖昧ではない。
各保有足について、有効な利確注文と損切り注文の両方に価格範囲が触れたかを記録する。該当する足があれば、その取引に曖昧フラグを付ける。100取引中2取引なのか、40取引なのかで、四本値に依存した検証の信頼性は大きく違う。
ただし利確と損切りの水準だけでなく、注文がその時点で有効だったかも必要だ。建玉を持つ前に発生した安値を、保有後の損切りとして扱うことはできない。後述する新規注文やトレーリングストップでは、単純な高値・安値判定だけでは足りなくなる。
100取引の利益が順序の仮定だけで赤字へ変わる例
先ほどと同じ利確+800円、損切り−500円を使う100取引を考える。順序が確認できた80取引は、40勝40敗で、利益3万2000円、損失2万円、差引+1万2000円だったとする。残る20取引だけが同じ足で両方へ到達し、順序不明だった。
20取引を全て利確先行と扱えば合計は1万2000+20×800=2万8000円。全て損切り先行なら1万2000−20×500=2000円。1取引あたり往復費用100円を仮定すると、100取引で1万円が差し引かれ、結果は+1万8000円から−8000円の範囲になる。

この範囲は将来利益の信頼区間ではない。固定した100取引と数量について、不明な決済順序を二通りに置いた感度分析だ。またギャップや滑り、部分約定を含めた実際の損益の上限・下限を保証するものでもない。
いつも損切り優先にすれば正しいのか
損切り優先は保守的な仮定として役立つが、観測した事実になるわけではない。実際は高値に先に到達していた取引まで負けにするため、戦略の評価を過度に下げる可能性がある。反対にいつも利確優先なら、利益を過大評価しやすい。
まず両方の結果を併記し、その差が結論に影響するかを見る。損切り優先でも費用後利益が残るなら、順序の曖昧さに比較的強い。二つの結果が黒字と赤字に分かれるなら、追加データなしに採用を決めるのは難しい。差が大きい銘柄や期間を優先して調べると効率がよい。
下位足を使っても曖昧さがゼロにはならない
日足だけでなく1分足を取得できれば、95円到達が午前、108円到達が午後だった、と順序が分かる場合がある。TradingViewのBar Magnifierのように、下位時間足を使って約定判定を詳細化する機能もある。ただし利用できる過去期間やデータの粒度を確認する必要がある。
1分足の中でも両水準へ届けば、その1分の順序は依然として不明だ。ティックデータへ細かくしても、表示が仲値だけなのか約定値なのか、売買気配があるのかで再現できる内容は変わる。データが細かいことと、注文が実際に成立することは同義ではない。
現実には、利確指値に価格が触れても順番待ちで約定しない場合があり、逆指値は指定水準から滑る場合がある。下位足で価格順序を確定した後も、約定数量と価格のモデルは別に確認する。両者をまとめて「高精度モードだから正しい」と扱わない。
同じ足の終値で出した注文を、その足の安値で約定させない
日足終値105円を確認して「翌日100円へ押したら買う」と決めたのに、その日の安値90円を使って100円で買えたことにしてしまう実装がある。注文を決めた時点では既に安値は過去であり、その価格へ後から注文を届けることはできない。
シグナル算出時刻、注文送信時刻、注文有効化時刻、約定判定時刻を分けて記録すると、この先読みを発見しやすい。終値を使って判断する戦略なら、通常はその終値が確定した後の取引可能時点から注文を評価する。引け執行の特殊な設定を使う場合も、どの情報を何時までに知って発注したかを明示する。
新規の逆指値があると経路の問題が増える
100円から上昇し、103円の買い逆指値で新規に入り、その後98円で損切りする設定を考える。足の安値が97円でも、その安値を付けた後に初めて103円へ上がったなら、安値97円を保有後の損切りに使うことはできない。逆に103円へ上がってから97円へ下げたなら損切りが起こり得る。
したがって「足の高値が103円以上、安値が98円以下」という二つの条件だけでは新規と決済を判定できない。状態を、未保有、注文有効、保有中、決済済みの順に更新し、状態が変わる前の値動きを後の処理へ流用しない設計が必要になる。
トレーリングストップは高値の更新時刻を確認する
高値から5円下へ損切りを追随させるルールで、その足の高値110円からストップ105円を計算したとする。足の途中で90円を付けてから110円へ上がったのに、先にストップ105円が存在したかのように90円の下落へ適用すると時間が逆転する。
直前の確定足までの高値を使い、次の足からストップを更新する方法なら順序が明確になる。ただし、リアルタイムで高値を更新する元の戦略とは別のルールになる。どちらの戦略を検証するのかを決め、実運用でも同じ更新頻度を使わなければ比較できない。
再エントリーを許す場合は単純な上下限に注意する
利確したら同じ足で入り直す戦略や、負けたら数量を変える戦略では、最初の決済順序によって次の取引自体が変わる。先ほどのように、固定した20取引の損益だけ入れ替えればよいとは限らない。注文イベントを時系列で処理し直し、後続の取引まで再計算する必要がある。
同時保有数や資金余力にも上限があれば、一つの早い決済が別銘柄の新規注文を可能にすることもある。局所的には損切り優先でも、戦略全体の最悪ケースになるとは限らないため、「保守的な仮定」と「数学的に保証された下限」を区別する。
小さなテスト用データで注文処理を監査する
大きな価格データを読み込む前に、四つ程度の人工的な経路を作ると実装の誤りを見つけやすい。利確だけに届く経路、損切りだけに届く経路、両方に届く高値先行の経路、両方に届く安値先行の経路だ。各経路で期待する決済時刻と損益を先に手計算しておき、プログラムの結果と照合する。
次に、足の開始前に建玉があるケースと、足の途中で初めて建玉ができるケースを分ける。価格系列が同じでも、注文が有効になる時刻が違えば正しい結果は違う。決済後の残注文が確実に取り消されることも確認する。利確後に損切りまで約定すると、意図しない新規の売り建玉を作る実装になっている可能性がある。
売り戦略では符号と条件を反転させたテストも必要だ。買いの利確判定だけを修正し、売り側の損切り優先順位が古いまま残ることがある。テスト用の価格には市場データを使う必要はない。むしろ、どのイベントが先に起きたかを自分で説明できる単純な系列の方が、注文処理の監査に向いている。
細かいデータを取得する優先順位を決める
全銘柄の全ティックを集める前に、曖昧な取引が成績へ与える影響で順位付けする。一件の差が1300円なら、20件で最大2万6000円の差が生まれる。戦略の利益がそれより小さい場合、その20件を確認する価値は高い。一方、既に順序が明確な足を細かくしても、今回の問題は解消しない。
調査済みの期間と未調査の期間を分け、データ粒度が異なる結果を無説明で一つに合算しない。近年だけ詳細データがあり、古い期間は四本値の仮定に頼っているなら、その境目を成績表にも残す。見かけの長い検証期間より、各期間で何を再現できているかを示す方が判断の精度を高める。
検証結果に残す四つの数字
全取引数、順序不明の取引数、その取引が作る損益差、下位足で確認できた割合を残す。例えば「100件中20件が不明、順序の仮定による差2万6000円、下位足で15件を解消」と書けば、残る不確実性が見える。利益だけを1円単位で表示するより、判断に役立つ。
さらにデータ欠損、取引時間外、値幅制限、気配だけの価格変化を別の例外として扱う。ローソク足の見た目を細かくするだけでは、発注の時間制約や流動性までは補えない。取引の根拠となった情報と、注文が有効になった後の価格を順番に追うことが、バックテストを実際の売買へ近づける基本になる。
参考:TradingViewのBar Magnifier解説、TradingViewのストラテジーと注文シミュレーションの公式資料。本文の取引例は独自の仮定。


コメント