フィッシャー変換(Fisher Transform)を責任ある形でバックテストするには?
直接の回答
責任あるフィッシャー変換バックテストは、安定したインジケーターの仕組みを、市場レジームのような可変条件、データ品質、そして執行に関する前提から切り分けることから始まります。次に、正確なデータと計算ルールを定義し、重要なコストと実務的な執行の前提を含め、よくあるバイアス(特に先読みと過学習)を制御し、アウト・オブ・サンプルでその考えを検証します。過去のパフォーマンスは参考にはなりますが、将来の結果を保証するものではありません。
メカニズムと定義
フィッシャー変換(Fisher Transform)は、上限・下限のある入力系列に対して適用され、入力の変化を新しいスケールへ写像する数学的変換です。バックテストにおける「責任ある」部分は主に、どのように入力系列を作るか、そして時間を通じてどれだけ一貫して変換を計算するかにあります。
まず、入力を事前に定義します。たとえばレンジベースのオシレーターから始める場合、各時点でそのオシレーターをどのように計算するのか(ローリング窓の長さを含む)、どのソース価格を使うのか(例:終値のみか、高値/安値由来の入力か)、そして窓が未完成の最初のバーではどうするのかを、正確に述べてください。次に、フィッシャー変換の計算を手順ごとに文書化します:中間値、クランプ(制限)や平滑化の選択、そして欠損データへの対応方法です。
前提は、すべての計算について明示する必要があります。中間値を正規化、クランプ、平滑化するなら、正確なルールを書き下してください。どこかで離散化(丸め)を使うなら、その内容を説明します。これらの詳細がないと、両方とも「フィッシャー変換」と言っていても、バックテスト結果は大きく異なり得ます。
エビデンスまたは例:バックテストで制御すべきこと
責任あるバックテストでは、明確に定義された手法を、一定の評価プロトコルと比較します。
まずデータの整合性とタイミングから始めます。よくある失敗パターンは、偶発的な先読みです。つまり、意思決定時点では利用できなかった情報でインジケーターを計算してしまうことです。これを避けるには、評価するシグナルが時刻 t において、t 以前に存在していた入力だけを使うようにしてください。さらに、インジケーター値と執行の整合(アライン)方法も決めます。インジケーターが終値で計算される場合、取引判断が終値で行われるのか(その終値価格を使うのか)、それとも次の始値で行われるのかを明確にします。
次に、コストと執行の前提を含めます。特定の提供元を名指ししなくても、コストは1取引あたりの摩擦(手数料、スプレッド、スリッページ)としてモデル化できます。重要なのは、サンプル全体で前提を一貫させ、感度分析を行うことです。つまり、バックテストを複数の妥当なコスト水準で実行し、結論が成り立つかどうかを確認します。
バイアス制御は、適応型またはパラメータ化されたインジケーターで特に重要です。パラメータ(例:ルックバック長や変換設定)を、評価に使う同じデータで調整すると、過学習のリスクがあります。ウォークフォワードまたはアウト・オブ・サンプルの分割を使いましょう:意思決定に使わなかった別のセグメントで評価するために、ある区間で調整し、その後別区間で検証します。結果が1つの有利な窓に左右される確率を下げるために、複数の時間期間で分割を繰り返すことも検討してください。
制限とリスク
過去の関係は将来の結果を保証しません。慎重なコーディングをしていても、バックテストは次の理由で失敗し得ます:
- 過学習: ある期間で最適化したパラメータが、別の期間へ移転しない可能性。
- 非定常性: 市場の挙動はレジームによって変化するため、同じ入力→出力の対応が別の挙動を示す可能性。
- データとミクロ構造の不一致: 実際の執行は、バックテストの理想化と異なる。
- 実装の曖昧さ: インジケーター計算ルールの小さな違い、丸め、ウォームアップ処理の扱いが、結果を変えてしまう可能性。
重要な制限として、バックテストは複雑な執行を単純化した前提に圧縮してしまうことがよくあります。結論が、コストやタイミングに非常に敏感な細かなパフォーマンス指標に依存している場合、頑健性は低くなるかもしれません。
検証または次の質問
フィッシャー変換バックテストを責任ある形で独立に検証するには、チェックリストに従えます:(1)入力定義と計算手順を正確に公開する;(2)先読みを防ぐために時間整合を検証する;(3)現実的なコストモデリングを含め、感度分析を行う;(4)アウト・オブ・サンプルまたはウォークフォワードテストで検証する;(5)別のパラメータ値、または別の非重複期間に対して手法をストレステストする。
さらに進めたいなら、次の質問が役立ちます:あなたの実装でフィッシャー変換に使っている正確な入力系列は何で、その入力(または窓(ウィンドウ)ルール)を変えると結果はどう変わるのか?
DOCUMENT END