Come si calcola il Fisher Transform?

Scopri i passaggi di calcolo del Fisher Transform, gli input e i limiti.

Come si calcola il Fisher Transform?

Cos’è il Fisher Transform (e perché la formula sembra diversa)

Il Fisher Transform è una trasformazione matematica progettata per convertire una serie temporale (spesso una serie di prezzi) in una forma che si comporta più come un oscillatore illimitato. Viene chiamato “trasformazione” perché ricalcola i valori utilizzando funzioni non lineari, non perché effettui una previsione statistica.

In pratica, l’idea chiave è:

  1. ridurre la serie di input a un valore limitato utilizzando un range mobile di massimi e minimi,
  2. applicare una mappatura non lineare di tipo Fisher (relativa a un logaritmo del rapporto),
  3. aggiornare il valore mappato in modo ricorsivo in modo che l’indicatore risponda in modo fluido, piuttosto che punto per punto.

Poiché la mappatura è non lineare e il range viene calcolato su una finestra temporale, la scala esatta e la sensibilità dell’output dipendono fortemente dalle impostazioni scelte e dai dati forniti al calcolo.

Il calcolo principale: formula, parametri e input

Un calcolo ampiamente utilizzato del Fisher Transform segue questa struttura generale. I dettagli implementativi possono variare a seconda della fonte, ma la meccanica riportata di seguito cattura i componenti essenziali.

Parametri e input

Sono necessari:

  • Serie di input: di solito un valore derivato del prezzo (ad esempio, il prezzo mediano), fornito per ogni intervallo temporale.
  • Lunghezza della finestra di lookback (N): il numero di barre utilizzate per calcolare il minimo e il massimo mobile.
  • Ricorsione/iterazione: la mappatura Fisher utilizza un aggiornamento ricorsivo che fa riferimento ai valori calcolati in precedenza.

Passo 1: calcolare un valore normalizzato mobile

Per ogni intervallo temporale t (a partire solo quando sono disponibili dati sufficienti per il lookback), calcolare il minimo e il massimo mobili della serie di input negli ultimi N intervalli:

  • Lowest(t) = minimo della serie di input nella finestra
  • Highest(t) = massimo della serie di input nella finestra

Quindi calcolare una posizione normalizzata nel range, spesso della forma:

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

Questo mappa il valore attuale dell’input a un valore limitato (concettualmente tra −1 e +1) in base alla sua posizione all’interno del range min/max recente.

Assunzione per gli esempi di calcolo: è necessario definire cosa sia “Input(t)” e si deve utilizzare lo stesso N e la stessa definizione della finestra (inclusione/esclusione della barra corrente) in modo coerente quando si riproducono i valori.

Passo 2: applicare una mappatura non lineare di tipo Fisher

Calcolare un valore intermedio che mappa il valore normalizzato limitato in un dominio di tipo Fisher utilizzando una trasformazione log-rapporto. Un modello comune è:

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

Per evitare singolarità (divisione per zero o logaritmo di zero) quando x(t) si avvicina a ±1, le implementazioni includono tipicamente una protezione, come limitare x(t) a un intervallo leggermente più piccolo (ad esempio, impedendo esattamente −1 e +1).

Passo 3: aggiornamento ricorsivo (lisciatura tramite valori precedenti)

Molte formule del Fisher Transform aggiornano il valore mappato utilizzando l’output precedente. Una struttura ricorsiva tipica è:

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

a volte viene introdotto un ulteriore fattore di lisciatura o una variabile intermedia “precedente”. La forma ricorsiva esatta determina la reattività dell’indicatore.

Passo 4: arrotondamento o ridimensionamento opzionale

Alcune implementazioni ridimensionano o arrotondano la serie finale per migliorarne la leggibilità. Queste sono scelte di visualizzazione, non il concetto matematico fondamentale.

Esempio pratico che puoi verificare autonomamente

Poiché non si assume l’uso di dati di mercato in tempo reale, il modo più affidabile per imparare il calcolo è riprodurlo su un piccolo dataset ipotetico.

Configurazione dell’esempio (definire prima le assunzioni)

  • Scegliere N = 5.
  • Scegliere Input(t) per ogni intervallo temporale (ad esempio, una serie di prezzi mediani) che fornisci come valori numerici.
  • Decidere come gestire i “primi N” punti (di solito si inizia a produrre output solo dopo che la finestra è completa).
  • Decidere come limitare x(t) quando il range è troppo piccolo.

Calcolare passo dopo passo i valori intermedi

Per ogni intervallo temporale in cui esiste la finestra:

  1. Trovare Lowest(t) e Highest(t) dagli ultimi N valori di input.
  2. Calcolare x(t) usando (2 × ((Input−Lowest)/(Highest−Lowest)) − 1).
  3. Proteggere x(t) in modo che non raggiunga esattamente ±1.
  4. Calcolare f(t) = 0.5 × ln((1 + x)/(1 − x)).
  5. Aggiornare fish(t) utilizzando la ricorsione scelta, ad esempio fish(t) = fish(t−1) + f(t) (con fish(t−1) inizializzato secondo la convenzione scelta).

Come verificare che l’implementazione sia corretta

Quando implementi gli stessi passaggi con le stesse assunzioni, dovresti ottenere:

  • gli stessi valori di minimo e massimo mobili,
  • la stessa sequenza intermedia x(t),
  • la mappatura Fisher f(t),
  • e la sequenza ricorsiva fish(t).

Se una qualsiasi sequenza intermedia differisce, anche l’output finale sarà diverso. Per questo motivo, la verifica deve concentrarsi sulla riproduzione dei calcoli intermedi, non solo sulla linea finale.

Limiti e modalità di errore (cosa può compromettere il calcolo)

Anche se il Fisher Transform è una formula definita, il suo output calcolato può variare notevolmente a seconda di come vengono implementati i dettagli e del comportamento dei dati.

1) Range piccoli o piatti nella finestra di lookback

Se Highest(t) − Lowest(t) diventa molto piccolo, la normalizzazione ((Input−Lowest)/(Highest−Lowest)) diventa instabile. Questo può far sì che x(t) salti bruscamente verso ±1, spingendo poi la mappatura logaritmica verso valori estremi.

Implicazione concreta: è necessario definire una protezione per range quasi nulli (ad esempio, saltare l’aggiornamento o limitare il rapporto calcolato).

2) Singolarità nella trasformazione log-rapporto

La mappatura (ln((1+x)/(1−x))) non è definita esattamente per x = 1 o x = −1. Dati reali e arrotondamenti possono comunque produrre valori estremamente vicini a questi limiti.

Implicazione concreta: le implementazioni limitano tipicamente x(t) leggermente all’interno di (−1, +1) per evitare valori infiniti.

3) Inizializzazione ricorsiva e convenzioni non coerenti

Poiché il calcolo spesso utilizza output precedenti, la scelta del valore iniziale fish(0) (o del primo valore fish calcolato) influenza i valori successivi.

Implicazione concreta: due implementazioni che usano la stessa formula ma convenzioni iniziali diverse possono divergere.

4) La definizione dell’input cambia tutto

Se “Input(t)” è una misura di prezzo diversa (chiusura vs. prezzo mediano vs. prezzo ponderato), i valori di minimo e massimo mobili cambiano, quindi x(t) e di conseguenza l’output del Fisher cambiano.

Implicazione concreta: la definizione della serie di input deve essere considerata parte integrante del calcolo, non un dettaglio esterno.

5) Problemi di qualità dei dati

Barre mancanti, timestamp irregolari e dati ricampionati possono alterare le finestre di minimo e massimo mobile. Anche senza alcuna “previsione di mercato”, queste meccaniche di calcolo possono distorcere la linea dell’indicatore.

Il trading su forex e CFD comporta rischi significativi. Le informazioni di FoxiForex sono educative e non costituiscono consulenza finanziaria personale. I contenuti sponsorizzati sono chiaramente indicati.