フィッシャー変換はどのように計算されますか?

フィッシャー変換の計算手順、入力、制限を学びます。

フィッシャー変換はどのように計算されますか?

フィッシャー変換とは(そしてなぜ式が違って見えるのか)

フィッシャー変換は、時系列(多くの場合は価格系列)を、より「上限・下限のないオシレーター」のように振る舞う形へ変換するための数学的変換です。これは「統計的な予測」を行うからではなく、非線形関数を使って値をリマップするために「transform(変換)」と呼ばれます。

実務上の要点は次のとおりです:

  1. ローリングの高値/安値レンジを使って入力系列を有界な値に抑える、
  2. Fisher型の非線形マッピング(対数比に関連)を適用する、
  3. マップされた値を再帰的に更新し、「点ごとに」そのまま出すのではなく、指標が滑らかに反応するようにする。

マッピングは非線形であり、レンジはウィンドウ上で計算されるため、出力の厳密なスケールや感度は、選んだ設定と、計算に投入するデータに強く依存します。

中核となる計算:式、パラメータ、入力

広く使われているフィッシャー変換の計算は、次のような一般的な構造に従います。厳密な実装の詳細は出典によって異なりますが、以下の仕組みが本質的な構成要素を捉えています。

パラメータと入力

必要なのは次のとおりです:

  • 入力系列:通常は、各時点ごとに与えられる派生価格値(たとえば中央値)です。
  • ルックバックウィンドウ長(N):ローリングの最小値と最大値を計算するために使うバー数です。
  • 再帰/反復:フィッシャーのマッピングは、先に計算した値を参照する再帰的な更新を使います。

ステップ1:ローリング正規化値を計算する

各時点 t(ルックバックに十分なデータが存在してから)について、直近 N ステップの入力系列のローリング最小値と最大値を計算します:

  • Lowest(t) = ウィンドウ内の入力の最小値
  • Highest(t) = ウィンドウ内の入力の最大値

次に、正規化位置を次のような形で計算することが多いです:

  • x(t) = 2 × ((\frac{Input(t) - Lowest(t)}{Highest(t) - Lowest(t)})) − 1

これは、直近のmin/maxレンジの中で入力がどこに位置するかに基づいて、現在の入力を有界な値(概念的には −1 から +1 の間)へマッピングします。

計算例の前提: あなたは「Input(t)」が何であるかを定義しなければならず、値を再現するときは、同じ N と同じウィンドウ定義(現在のバーを含める/含めない)を一貫して使う必要があります。

ステップ2:フィッシャー型の非線形マッピングを適用する

有界な正規化値を、対数比変換を使ってフィッシャーのような領域へマップする中間値を計算します。よくあるパターンは次のとおりです:

  • f(t) = 0.5 × ln((\frac{1 + x(t)}{1 - x(t)}))

x(t) が ±1 に近づくとき(ゼロ除算やゼロの対数を避けるため)、実装では通常、x(t) をわずかに小さい区間へクランプするなどのセーフガードを含めます(たとえば、ちょうど −1 と +1 を避ける)。

ステップ3:再帰的な更新(過去の値による平滑化)

多くのフィッシャー変換の式では、マップされた値を前回の出力で更新します。典型的な再帰構造は次のとおりです:

  • fish(t) = fish(t−1) + f(t)

そして、追加の平滑化係数や中間の「previous」変数が導入されることもあります。正確な再帰の形は、指標の応答性を決めます。

ステップ4:任意の丸めまたはスケーリング

一部の実装では、最終系列を読みやすくするために再スケールしたり丸めたりします。これは表示上の選択であり、コアとなる数学的概念ではありません。

確認できる「実例」のアウトライン

ここではリアルタイムの市場データは仮定しないため、計算を学ぶ最も確実な方法は、小さな仮想データセットでそれを再現することです。

例のセットアップ(最初に前提を定義する)

  • N = 5 を選びます。
  • 各時点の Input(t) を選びます(たとえば、中央値の価格系列)—数値として提示します。
  • 「最初の N 点」をどう扱うかを決めます(一般的には、ウィンドウが完成してから出力を作り始めます)。
  • レンジが小さすぎるときに x(t) をどうクランプするかを決めます。

中間値を段階的に計算する

ウィンドウが存在する各時点について:

  1. 直近 N 個の入力値から Lowest(t)Highest(t) を求めます。
  2. (2 × ((Input−Lowest)/(Highest−Lowest)) − 1) を使って x(t) を計算します。
  3. x(t) がちょうど ±1 に到達しないようにセーフガードします。
  4. f(t) = 0.5 × ln((1 + x)/(1 − x)) を計算します。
  5. 選んだ再帰に従って fish(t) を更新します。たとえば fish(t) = fish(t−1) + f(t)(fish(t−1) は、選んだ慣習に従って初期化します)。

正しく実装できたかの確認方法

同じ前提で同じ手順を実装すれば、次が一致するはずです:

  • ローリングの min/max 値、
  • 中間の x(t) シーケンス、
  • フィッシャーのマッピング f(t)
  • 再帰的な fish(t) シーケンス。

どれか1つでも中間シーケンスが異なれば、最終出力も異なります。そのため、検証の焦点は最終行だけでなく、中間計算の再現に置くべきです。

制限と失敗モード(計算を壊しうるもの)

フィッシャー変換は定義された式ですが、実装の詳細の違いやデータの振る舞いによって、計算された出力は大きく変わり得ます。

1) ルックバックウィンドウ内の小さいレンジ、またはフラットなレンジ

Highest(t) − Lowest(t) が非常に小さくなると、正規化 ((Input−Lowest)/(Highest−Lowest)) が不安定になります。すると x(t) が ±1 に向かって急にジャンプし、その後、対数マッピングが極端な値へ押し出されます。

重要な含意: ゼロに近いレンジに対するセーフガードを定義する必要があります(たとえば、更新をスキップする、または計算した比率をクランプする)。

2) 対数比変換における特異点

マッピング (ln((1+x)/(1−x))) は、ちょうど x = 1 または x = −1 では定義されません。実データや丸めによって、これらの境界に非常に近い値が生じることがあります。

重要な含意: 実装では通常、無限大の値を避けるために x(t) を(−1, +1)の内側へわずかにクランプします。

3) 再帰の初期化と一貫しない慣習

計算はしばしば過去の出力を使うため、初期の fish(0)(または最初に計算される fish の値)の選択が、その後の値に影響します。

重要な含意: 同じ式を使っていても、初期の慣習が異なる2つの実装は分岐し得ます。

4) 入力定義がすべてを変える

もし「Input(t)」が別の価格指標(終値 vs. 中央値 vs. 加重価格)であるなら、ローリングのmin/max値が変わり、結果として x(t)、そしてフィッシャーの出力も変わります。

重要な含意: 入力系列の定義は、外部の細部として扱うのではなく、計算の一部として扱う必要があります。

5) データ品質の問題

欠けたバー、不規則なタイムスタンプ、再サンプリングされたデータは、ローリングのmin/maxウィンドウを変えてしまいます。「市場予測」がなくても、これらの計算メカニズムが指標ラインを歪める可能性があります。

外国為替およびCFD取引には大きなリスクがあります。FoxiForexの情報は教育目的であり、個別の金融助言ではありません。スポンサー掲載は明確に表示されます。