Como o Fisher Transform é calculado?
O que é o Fisher Transform (e por que a fórmula parece diferente)
O Fisher Transform é uma transformação matemática projetada para converter uma série temporal (frequentemente uma série de preços) em uma forma que se comporta mais como um oscilador sem limites. É chamado de “transform” porque remapeia valores usando funções não lineares, não porque realiza previsão estatística.
Na prática, a ideia principal é:
- reduzir a série de entrada a um valor limitado usando um intervalo móvel de alta/baixa,
- aplicar um mapeamento não linear estilo Fisher (relacionado a um log-ratio),
- atualizar o valor mapeado recursivamente para que o indicador responda suavemente, em vez de puramente “ponto a ponto”.
Como o mapeamento é não linear e o intervalo é calculado em uma janela, a escala exata da saída e a sensibilidade dependem fortemente das configurações escolhidas e dos dados que você alimenta no cálculo.
O cálculo principal: fórmula, parâmetros e entradas
Um cálculo de Fisher Transform amplamente utilizado segue esta estrutura geral. Os detalhes exatos de implementação variam conforme a fonte, mas a mecânica abaixo captura os componentes essenciais.
Parâmetros e entradas
Você precisa de:
- Série de entrada: geralmente um valor de preço derivado (por exemplo, o preço mediano), fornecido para cada etapa de tempo.
- Comprimento da janela de lookback (N): o número de barras usado para calcular o mínimo e o máximo móveis.
- Recursão/iteração: o mapeamento Fisher usa uma atualização recursiva que referencia valores calculados anteriormente.
Etapa 1: calcular um valor normalizado móvel
Para cada etapa de tempo t (começando somente após haver dados suficientes para o lookback), calcule o mínimo e o máximo móveis da série de entrada nas últimas N etapas:
- Lowest(t) = mínimo da entrada na janela
- Highest(t) = máximo da entrada na janela
Em seguida, calcule uma posição normalizada no intervalo, geralmente da forma:
- x(t) = 2 × ((\frac{Input(t) - Lowest(t)}{Highest(t) - Lowest(t)})) − 1
Isso mapeia a entrada atual para um valor limitado (conceitualmente entre −1 e +1) com base em onde ela se encontra dentro de seu intervalo recente de mín/máx.
Premissa para exemplos de cálculo: você deve definir o que é “Input(t)” e deve usar o mesmo N e a mesma definição de janela (inclusiva/exclusiva da barra atual) de forma consistente ao reproduzir valores.
Etapa 2: aplicar um mapeamento não linear estilo Fisher
Calcule um valor intermediário que mapeia o valor normalizado limitado para um domínio semelhante ao de Fisher usando uma transformação log-ratio. Um padrão comum é:
- f(t) = 0,5 × ln((\frac{1 + x(t)}{1 - x(t)}))
Para evitar singularidades (divisão por zero ou log de zero) quando x(t) se aproxima de ±1, as implementações normalmente incluem uma salvaguarda, como limitar x(t) a um intervalo ligeiramente menor (por exemplo, evitando exatamente −1 e +1).
Etapa 3: atualização recursiva (suavização via valores anteriores)
Muitas fórmulas de Fisher Transform atualizam o valor mapeado usando a saída anterior. Uma estrutura recursiva típica é:
- fish(t) = fish(t−1) + f(t)
e às vezes um fator de suavização adicional ou uma variável “anterior” intermediária é introduzido. A forma recursiva exata determina a capacidade de resposta do indicador.
Etapa 4: arredondamento ou escala opcional
Algumas implementações redimensionam ou arredondam a série final para legibilidade. Essas são escolhas de exibição, não o conceito matemático central.
Um esboço de exemplo prático que você pode verificar de forma independente
Como nenhum dado de mercado em tempo real é assumido aqui, a maneira mais confiável de aprender o cálculo é reproduzi-lo em um pequeno conjunto de dados hipotético.
Configuração do exemplo (defina as premissas primeiro)
- Escolha N = 5.
- Escolha Input(t) para cada etapa de tempo (por exemplo, uma série de preço mediano) que você fornece como valores numéricos.
- Decida como lidar com os primeiros “N” pontos (comumente você começa a produzir saídas somente após a janela estar completa).
- Decida como limitar x(t) quando o intervalo for muito pequeno.
Calcule os valores intermediários passo a passo
Para cada etapa de tempo em que a janela existe:
- Encontre Lowest(t) e Highest(t) dos últimos N valores de entrada.
- Calcule x(t) usando (2 × ((Input−Lowest)/(Highest−Lowest)) − 1).
- Proteja x(t) para que não atinja ±1 exatamente.
- Calcule f(t) = 0,5 × ln((1 + x)/(1 − x)).
- Atualize fish(t) usando a recursão escolhida, como fish(t) = fish(t−1) + f(t) (com fish(t−1) inicializado de acordo com sua convenção escolhida).
Como verificar se você implementou corretamente
Quando você implementa as mesmas etapas com as mesmas premissas, deve corresponder:
- aos valores de mín/máx móveis,
- à sequência intermediária x(t),
- ao mapeamento Fisher f(t),
- e à sequência recursiva fish(t).
Se qualquer sequência intermediária diferir, a saída final também diferirá. É por isso que o foco da verificação deve estar em reproduzir os cálculos intermediários, não apenas a linha final.
Limitações e modos de falha (o que pode quebrar o cálculo)
Mesmo que o Fisher Transform seja uma fórmula definida, sua saída calculada pode variar amplamente dependendo de como você implementa os detalhes e de como seus dados se comportam.
1) Intervalos pequenos ou planos na janela de lookback
Se Highest(t) − Lowest(t) se tornar muito pequeno, a normalização ((Input−Lowest)/(Highest−Lowest)) se torna instável. Isso pode fazer com que x(t) salte abruptamente em direção a ±1, o que então empurra o mapeamento log para valores extremos.
Implicação material: você deve definir uma salvaguarda para intervalos próximos de zero (por exemplo, pular a atualização ou limitar a razão calculada).
2) Singularidades na transformação log-ratio
O mapeamento (ln((1+x)/(1−x))) é indefinido exatamente em x = 1 ou x = −1. Dados reais e arredondamentos ainda podem produzir valores extremamente próximos desses limites.
Implicação material: as implementações normalmente limitam x(t) ligeiramente dentro de (−1, +1) para evitar valores infinitos.
3) Inicialização recursiva e convenções inconsistentes
Como o cálculo frequentemente usa saídas anteriores, a escolha do fish(0) inicial (ou do primeiro valor de fish calculado) afeta os valores subsequentes.
Implicação material: duas implementações que usam a mesma fórmula, mas convenções iniciais diferentes, podem divergir.
4) A definição da entrada muda tudo
Se “Input(t)” for uma medida de preço diferente (fechamento vs. mediana vs. preço ponderado), os valores de mín/máx móveis mudam, então x(t) e, portanto, a saída do Fisher mudam.
Implicação material: você deve tratar a definição da série de entrada como parte do cálculo, não como um detalhe externo.
5) Problemas de qualidade de dados
Barras ausentes, timestamps irregulares e dados reamostrados podem alterar as janelas de mín/máx móveis. Mesmo sem qualquer “previsão de mercado”, esses mecanismos de cálculo podem distorcer a linha do indicador.