フラマ(Frama)の計算方法
直接の答え: 「Frama」計算が意味するもの
FRAMA(多くの場合「Frama」と表記されます)は FRactal Adaptive Moving Average の略です。これは、直近の値動きが「複雑」なのか「トレンド的」なのかに応じて、平滑化の強さが適応的に変わる移動平均を作るために計算されます。適応は、複数のルックバック・ウィンドウにおける価格レンジからフラクタル次元を推定し、その推定値を実効的な平滑化係数へ変換することで得られます。
重要なポイントは、フラマの値が「1つのパラメータだけを使った単一の式」から生成されるわけではないことです。フラマは次に依存します:
- 選択したルックバック長、
- 価格データの定義(例:OHLCから導出した高値/安値レンジを使うかどうか)、
- フラクタル次元から平滑化係数へのマッピング。
メカニズム:入力と中核となる計算手順
1) データと「レンジ」を定義する
多くのフラマ実装では、ウィンドウ内の価格の レンジ を使います。通常これは高値と安値から導出されます。標準的なレンジの考え方は次のとおりです:
- ウィンドウにおけるレンジ:そのウィンドウ内での (最高値 − 最低値) のような指標。
自分で計算を検証する場合、最初のタスクは、参照しているソースが使っている「レンジ」の厳密な定義を固定することです。レンジ定義を変えると、結果として得られるフラマ系列が変わってしまうためです。
2) メインのルックバックをサブウィンドウに分割する
典型的なフラマの設計では、メインのウィンドウ長(N と呼びます)を使います。フラクタル挙動を推定するために、アルゴリズムは次を考慮します:
- 直近 N 本のバーにおけるレンジ、そして
- 長さ N/2 の2つの連続するサブウィンドウにおけるレンジ(N が偶数の場合)。
つまり、時刻 t のバーについて概念的に次を計算します:
- Range1:最初のサブウィンドウにおけるレンジ、
- Range2:2つ目のサブウィンドウにおけるレンジ、
- RangeTotal:全体のウィンドウにおけるレンジ。
3) フラクタル次元の推定を計算する
フラクタル次元(フラマの文脈での)は、RangeTotal が Range1 と Range2 と比べてどうかによって推定されます。一般的な考え方は、比率を次元値へ変換し、価格の動きがより不規則に見えるほど次元値が増え、より滑らかなトレンドに見えるほど減るようにすることです。
実際には複数のバージョンがあるため、検証には、レンジ比率からフラクタル次元への変換がどのように行われるかについて、あなたが選んだ参照元の「厳密な対応関係」を確認する必要があります。
4) フラクタル次元を適応的な平滑化係数へ変換する
フラクタル次元の推定値が得られたら、フラマはそれを平滑化係数へ変換します。考え方は次のとおりです:
- 推定された複雑さが「よりノイズが多い」ことを示すと、平滑化は強くなる(応答が遅くなる)、
- 推定された複雑さが「よりトレンド的な構造」を示すと、平滑化は弱くなる(応答が速くなる)。
ここでも、変換は実装依存です。多くのバリアントでは、平滑化係数を実用的な範囲に保つために、最小/最大の平滑化境界のようなパラメータを使います。
5) 指数平滑化の更新を適用する
最後に、フラマは移動平均のスタイルで再帰的に更新します:
- 時刻 t における新しいフラマ値は、現在の価格(またはミッド価格のような選択した代理値)と、前回のフラマ値のブレンドであり、
- ブレンドの重みは、手順2〜4で計算された適応的な平滑化係数です。
つまり、フラクタル次元の数式が正しくても、次を検証する必要があります:
- 更新に使われる「現在の価格」が何か(終値か、ミッド価格か)、そして
- 最初のフラマ値がどのように初期化されるか。
証拠または例:取引の前提なしにフラマ計算を検証する方法
厳密な式はソースによって変わり得るため、「どのように計算されるか」を検証する最も信頼できる方法は、小さなデータセットに対して固定した前提で再現することです。
自己チェック手順
- 短い期間の履歴スライスを選び、固定したバー定義を決めます(例:高値/安値と終値を含むOHLC)。
- N とサブウィンドウ分割ルールを選びます(例:左右それぞれ N/2、N は偶数である必要がある)。
- 対象ソースと同じレンジ定義を使って、Range1、Range2、RangeTotal を計算します。
- そのソースに記載されているとおりに、フラクタル次元のマッピングを適用します。
- 適応的な平滑化係数を計算し、その後、再帰的なフラマ更新を行います。
- 同じ入力に対するターゲット出力と、最終的な系列値を比較します。
明示的に述べるべき前提(マテリアル・アサンプション)
メモに前提を明記してください:
- レンジとして (最高値 − 最低値) を使ったかどうか、
- 最終更新で終値かミッド価格かを使ったかどうか、
- 最初の N 本のバーをどう扱うか(出力なし、ウォームアップ、または初期化)、
- 偶数のみの N を使うのか、サブウィンドウの丸めを行うのか。
これらのどれかを変えると、「フラクタル適応」という見出しのアイデアが同じでも、フラマの値は変わるはずです。
制限と失敗パターン
1) 実装の違いはよくある
「Frama」はアルゴリズム上の概念ですが、異なるプラットフォームや記事では次の詳細が異なる場合があります:
- フラクタル次元のマッピング、
- 平滑化の境界、
- 更新における価格の代理値、
- 初期化。
そのため、計算の詳細が一致しない限り、プロバイダー間でフラマ値を安全に比較することはできません。
2) レンジベースの入力はノイズに敏感になり得る
高値/安値のレンジを使うと、インジケーターはバー内の極端な値に強く反応し得ます。レンジ相場のような状況では、ランダムな振れがレンジ比率を変え、その結果として、基礎となる「トレンド」が明確でない場合でも、適応的な平滑化係数が変わってしまうことがあります。
3) パラメータ選択が挙動を支配し得る
ルックバック長や平滑化境界は、フラマがどれだけ素早く適応するかに強く影響します。短いウィンドウは応答性が高い傾向がありますが、不安定になりやすくもあります。長いウィンドウは滑らかになりやすい一方で、遅れが出やすくなります。これは数学的・統計的なトレードオフであり、正しさの保証ではありません。
4) 再帰型インジケーターは初期条件に依存する
フラマは通常再帰的であるため、初期化の判断やウォームアップの扱いが、その後の値に影響します。長い履歴では影響が薄れる可能性がありますが、短いサンプルでは重要になり得ます。
検証と次に尋ねるべき質問
誰かにフラマを正確に説明するには、次の3つを用意してください:
- あなたが使っている厳密な式の詳細(レンジ、フラクタル次元、平滑化係数、再帰的更新がどのように定義されているかを含む)。
- 必要な入力の一覧(少なくとも高値/安値と更新ステップのための価格)と、必要なパラメータ(例:N と平滑化境界)。
- あなたが仮定した実装の選択に基づく1つの制限文(例:高値/安値のノイズへの感度、または初期化への依存)。
役立つ次の質問は:あなたが選ぶ設定は、応答性と平滑化のバランスをどのように変えますか? もし、あなたが使っているソースからの具体的なパラメータ名と価格/レンジ定義を共有できれば、フラマ計算はデータセットに対して手順ごとに検証できます。
DOCUMENT END