バックテストで突然50%の暴落が現れたのに、当時のニュースには何もない。配当株を検証すると、なぜか実際より成績が良すぎる。こうした異常は、売買ルールではなく株価データの扱いから発生することがあります。特に注意したいのが、株式分割や配当を反映した調整後株価です。
調整後株価は分析に便利ですが、その価格で当時売買できたわけではありません。「指標を計算する価格」「注文を約定させる価格」「配当を計上する方法」を分けずに使うと、もっともらしい成績でも資金計算が成立しなくなります。架空の数値を使い、個人投資家が検証前に行えるデータ監査を整理します。
株式分割は、株価の下落と同じではない
1株2,000円の株式を100株保有しているとします。1株を2株にする分割が行われ、他の要因がなければ理論上は1株1,000円、保有株数200株となり、評価額20万円は変わりません。分割前後の生の終値だけをつないだチャートは50%下落して見えますが、投資家の資産が半分になったわけではありません。
分割調整済みデータでは、過去の2,000円を現在の株数基準で1,000円へ置き換えるなどして、連続性を保ちます。どの時点を基準に調整するかは提供元の仕様次第です。株価だけでなく、出来高や1株当たり指標をどう調整しているかも確認する必要があります。

データサービスが提供する「調整後終値」が、分割だけを反映するのか、配当も反映するのかは統一されていません。例えばQuantConnectのデータ仕様では、Raw、Adjusted、SplitAdjusted、TotalReturnなどを区別しています。別サービスへ移る際は、列名が似ているから同じ意味だと判断しないことが重要です。
配当調整と配当現金を足すと二重計上になる場合がある
株価1,000円の銘柄が1株30円の配当権利を落とし、他の要因を除いた価格が970円になったとします。100株の投資家は、株式評価額9万7,000円と税引前配当3,000円を合わせて10万円です。価格だけなら−3%ですが、配当を含めた理論上の税引前収益はゼロです。
配当込みリターンを表すよう調整された価格系列で、この期間の収益をゼロとして計算したうえ、さらに現金3,000円を追加すると、実在しない+3%を作ってしまいます。一方、未調整株価を使い、配当を一切加えなければ、今度は収益を過小評価します。必要なのは「足すか、足さないか」ではなく、価格系列に何がすでに含まれているかの把握です。
税引前の指数と、税金や再投資条件を反映した口座損益も一致しません。また配当の権利が確定する時点と現金が支払われる時点は違います。資金繰りを再現するなら、権利落ち日に自由に使える現金が増えると仮定しないようにします。データや検証基盤がどの日に現金を計上するかを確認してください。

バックテストの設計は二つの方式から選ぶ
一つ目は、実際の未調整価格で売買し、株数の変化と配当を別途処理する方式です。注文価格、売買単位、現金残高を実取引に近づけやすい反面、分割日に株数や未約定注文を調整し、配当の支払条件も扱う必要があります。企業行動のイベントデータが欠けると、口座評価額が不自然に変わります。
二つ目は、調整済み系列で収益率を計算する簡略方式です。長期の投資対象比較や、比率ベースのシグナルの検討に向いています。ただし「調整後価格×当時の売買単位」が実際の必要資金とは限りません。配当込みの仮想保有と、税や支払日を反映した現金勘定を完全に同じものとして扱わないことが条件です。
実務では、指標計算用に調整系列を使い、約定と会計には未調整価格・企業行動を使う併用もできます。その場合、両方の価格を同じ日付で対応付け、注文水準を未調整の尺度へ変換しなければなりません。変換係数を明示せず「移動平均の値をそのまま指値へ使う」と、分割前後で桁の違う注文が出るおそれがあります。
終値だけを調整して、始値・高値・安値を放置しない
データファイルにOpen、High、Low、Close、Adjusted Closeがあり、調整後終値だけを他の生価格と一緒に使うと、ローソク足として成立しない日が生まれます。例えば未調整の高値2,050円、安値1,980円に、調整後終値1,000円を混ぜれば、終値が安値を大幅に下回るという矛盾です。
その日の調整係数を「調整後終値÷未調整終値」と定義し、同じ方式の始値・高値・安値へ適用する方法があります。ただし企業行動が場中に起きる場合や、日中データと日足データの仕様が違う場合は単純換算で足りません。可能なら提供元の正式な調整済みOHLCを使用し、自作処理は仕様と一致するかテストします。
出来高も要注意です。1対2の分割に合わせて過去の株価を半分にした場合、過去の出来高を現在株数基準で2倍にする仕様があります。反対に未調整のまま配信する提供元もあります。価格だけ半分、出来高はそのままという組み合わせで売買代金を推計すると、過去の流動性を半分に見積もってしまいます。
「株価1,000円以下」の条件は、未来の分割で変わり得る
現在の株数基準へ遡って調整した過去価格は、後から行われた分割で変更されることがあります。当時の株価が2,000円だった銘柄が、将来の分割を反映したファイルでは1,000円になると、「1,000円以下だけ買う」という当時の条件を誤って通過します。売買単位当たりの必要資金も同じ問題を持ちます。
一方、同じ期間の価格をすべて同じ係数で変換するだけなら、価格÷移動平均のような比率が変わらない場合もあります。調整済みデータを使うこと自体が常に先読みというわけではありません。ルールが絶対価格に依存するか、イベントの前後をまたぐか、参照窓の中で調整条件が変わるかを具体的に確認します。
対処方法は、当時の未調整価格を保存する、各時点で既知の企業行動だけを反映したデータを使う、価格条件を資金や売買単位と整合する形で再計算する、などです。検証を再現できるよう、データ取得日、提供元、調整モードを結果と一緒に記録します。日々上書きするCSVだけでは、半年後に成績が変わった理由を追えません。
5つの小さなテストで、派手な誤成績を防ぐ
- 分割テスト:価格以外が変わらない仮想分割で、保有評価額が維持されるか。
- 配当テスト:配当額だけ価格が下がる仮想例で、税引前の合計価値が意図した通りになるか。
- OHLCテスト:高値が始値・終値以上、安値が始値・終値以下になっているか。
- 数量テスト:分割前後の株数、注文数量、売買単位の処理が仕様どおりか。
- 再現テスト:同じデータ版と設定で、同じ結果を再計算できるか。
テストの入力は実在銘柄でなくても構いません。3日間の架空データを作り、2日目に分割、別のケースで配当を発生させるだけでも、計算の矛盾を見つけられます。複雑な戦略を走らせる前に、単純な買い持ちの評価額が手計算と一致することを確認します。
プラットフォームが企業行動を自動処理する場合、自分でも同じ処理を追加すると二重に反映するおそれがあります。例えばQuantConnectの企業行動ドキュメントは、データモードによる配当や分割の扱いを説明しています。利用環境の版と設定を確認し、「自動」と「自作」の責任範囲を表にすると安全です。
前日終値とのギャップ検証は、分割イベントで答え合わせする
前日終値から翌日始値への変化を使う戦略は、企業行動の影響を受けやすい例です。分割前の終値2,000円、1対2分割後の始値1,020円なら、生価格で計算すると−49%ですが、株数基準をそろえた前日終値は1,000円なので、本来比較したい価格変化は+2%です。
この+2%を使ってエントリーを判定したとしても、分割前の取引日に1,000円で買えたわけではありません。シグナルの連続性を保つ処理と、各時点の実際の約定価格は別です。検証表に「判定用前日価格1,000円」「当時の原価格2,000円」「調整係数0.5」を並べると、変換の方向を間違えにくくなります。
配当落ちを使う戦略ではさらに、配当落ちそのものを取り除きたいのか、その価格変化を売買対象にしたいのかを先に決めます。配当込み系列で機械的に滑らかにしてから「配当落ち後の反発」を探すと、調べたかった現象をデータ加工で消してしまうことがあります。調整は万能な清掃ではなく、研究目的に応じた変換です。
監査ログに残すべき情報を、再計算できる形にする
ファイル名だけに取得日を付けても、設定が失われれば再現できません。保存単位ごとに、提供元、銘柄識別子、取引所、通貨、タイムゾーン、調整方式、取得日時、データ範囲を付けます。企業行動データを別ファイルから結合するなら、その版と結合キーも残します。銘柄コードの再利用や変更に備え、可能なら恒久的な識別子を使います。
日付の意味も重要です。米国市場の日付を日本時間へ変換すると暦日が変わることがあります。配当や分割を一日ずらして適用すれば、前後に人工的な急騰・急落を作ります。日足の日付は現地取引日なのか、時刻は足の開始か終了なのかを確認してから結合してください。
検証結果には、異常を見つけた日、原因、修正前後の価格、修正方式を一覧で添えます。元データを上書きせず、加工後のファイルを別に保存すると、将来提供元のデータが訂正された場合でも差分を追えます。手作業で数行だけ直した場合も、修正内容を処理手順へ反映しなければ再現性は保てません。
銘柄別の損益を、手計算の残高と照合する
分割前に100株を2,000円で買い、分割後に200株を1,050円で売ったなら、費用を除く利益は1万円です。調整系列で1,000円から1,050円へ5%上昇と計算しても、投資額20万円に掛ければ同じ1万円になります。方式が違っても、この単純な経済結果へ到達するかを照合します。
ここで調整後の買値1,000円に元の100株を掛けて投資額10万円とし、売却だけ200株で処理すると架空の11万円の利益ができます。価格と数量のどちらか片方だけを変えたことが原因です。複雑な年次成績を見る前に、一銘柄一往復で一致を確認する方が、誤りの場所をはるかに特定しやすくなります。
調整が正しくても、バックテストの信頼性は別に確認する
調整後株価の問題を直しても、現在上場している銘柄だけで過去を検証すれば、途中で上場廃止となった銘柄を落とす生存者バイアスが残ります。また、決算情報を期末日から使えば、まだ公表されていなかった数字を参照することになります。株価の修正と、銘柄集合・情報公表時刻の修正は別の監査項目です。
極端なリターンが出た日を上位から抽出し、企業行動、データ欠損、通貨変更、上場廃止を照合する作業も有効です。異常値を機械的に削除すると本当の暴落まで消してしまうため、理由を確認して処理を記録します。調整の目的は成績を滑らかにすることではなく、経済的に同じ持分を一貫した尺度で比較することです。
検証結果を見るときは、年率収益の横に「価格調整方式」「配当処理」「約定価格」「データ取得日」の四つを置いてください。この四つを説明できない結果は、細かな売買パラメータを比較する前に土台を確認する必要があります。データの意味をそろえることが、使えるバックテストへの最短の入口になります。


コメント