Come si calcola il Kama?
Risposta diretta
Il Kama è generalmente calcolato come una media mobile variabile e auto-adattativa. Nella formulazione più comune, ogni nuovo valore del Kama utilizza (1) il valore precedente del Kama, (2) un fattore di smoothing che varia nel tempo e (3) il prezzo corrente. Tale fattore di smoothing dipende da quanto “efficientemente” il prezzo si è mosso in una finestra recente di osservazione—spesso misurato come rapporto tra variazione netta del prezzo e variazione assoluta totale.
Poiché in pratica esistono diversi nomi e varianti, il modo più sicuro per verificare ciò che si sta utilizzando è controllare la definizione esatta nelle impostazioni dell’indicatore disponibili (ad esempio, la lunghezza del lookback e le costanti di smoothing). Il calcolo riportato di seguito mostra una struttura stabile e ampiamente utilizzata; se il Kama della vostra piattaforma utilizza nomi di parametri diversi o una formula di efficienza leggermente differente, i passaggi meccanici sono simili ma le costanti potrebbero differire.
Meccanismo e definizione
Un modo pratico per descrivere il meccanismo è quello di considerarlo un processo ricorsivo di smoothing.
- Scegliere la serie di prezzi di input
Il Kama viene calcolato a partire da una serie temporale di prezzi. Il “prezzo” può essere definito in modi diversi (ad esempio, prezzo di chiusura, prezzo tipico o un’altra serie derivata). La scelta del prezzo deve corrispondere all’implementazione che si desidera riprodurre.
Sia P[t] il prezzo selezionato al tempo t.
- Impostare una finestra di lookback e i limiti di smoothing
Un Kama tipico utilizza:
- Lunghezza del lookback: N (numero di periodi utilizzati per valutare l’efficienza)
- Impostazione di smoothing veloce: di solito rappresentata da un periodo o costante “veloce” piccolo
- Impostazione di smoothing lenta: di solito rappresentata da un periodo o costante “lenta” più grande
In molte implementazioni, i limiti di smoothing vengono convertiti in due costanti:
- SC_fast e SC_slow derivate dai periodi veloce e lento
La mappatura esatta dipende dall’implementazione. Un approccio comune utilizza costanti di tipo smoothing esponenziale della forma:
- SC_fast = 2 / (fastPeriod + 1)
- SC_slow = 2 / (slowPeriod + 1)
- Calcolare un rapporto di efficienza negli ultimi N periodi
Nella finestra di lookback vengono confrontate due quantità:
- Variazione netta: |P[t] − P[t−N]|
- Somma delle variazioni assolute: sum_{i=0..N−1} |P[t−i] − P[t−i−1]|
Quindi viene calcolato un rapporto di efficienza ER come:
- ER = netChange / sumAbsMoves
Questo ER è progettato per essere più alto quando il prezzo si muove in modo deciso dall’inizio alla fine della finestra, rispetto alla quantità di movimenti “a zig-zag” al suo interno. Quando ER è vicino a 0, il prezzo è stato irregolare; quando ER è più vicino a 1, il prezzo si è mosso in modo più diretto.
Un dettaglio che le implementazioni gestiscono esplicitamente: se sumAbsMoves è zero (ad esempio, se il prezzo non cambia per tutta la finestra), ER può essere impostato a 0 o gestito per evitare divisioni per zero. Dovete replicare la stessa regola utilizzata nella vostra fonte.
- Convertire ER in una costante di smoothing dinamica
Viene quindi calcolata una costante di smoothing variabile SC[t] utilizzando ER e i limiti di smoothing. Una struttura comune è:
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2
L’esponente (spesso 2) fa parte della formulazione comunemente utilizzata; se la vostra implementazione utilizza un esponente diverso, dovrete usare lo stesso.
- Aggiornare il Kama in modo ricorsivo
Infine, il Kama viene aggiornato come:
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1])
Questa forma rende il Kama “attratto verso” il prezzo corrente di un importo che dipende da SC[t]. Un valore SC più alto implica un aggiustamento più rapido; un valore SC più basso implica un aggiustamento più lento.
- Inizializzazione
Il Kama richiede un valore iniziale iniziale Kama[0] (o Kama[N−1], a seconda dell’indicizzazione). Molte implementazioni inizializzano il Kama con il prezzo al primo punto disponibile o con una media mobile semplice. Se volete verificare indipendentemente il calcolo, confermate la regola esatta di inizializzazione dalla definizione dell’indicatore che state testando.
Evidenza o esempio (con assunzioni esplicite)
Di seguito è riportata una breve dimostrazione numerica con assunzioni dichiarate. Questo non è dato di mercato reale; mostra la struttura di calcolo che potete ripetere con la vostra serie.
Assunzioni per l’esempio:
- Il prezzo di input P è il prezzo di chiusura.
- Lunghezza del lookback N = 3.
- fastPeriod = 2, slowPeriod = 30, quindi:
- SC_fast = 2/(2+1) = 0,666666…
- SC_slow = 2/(30+1) = 0,064516…
- L’esponente in SC[t] è 2.
- Il valore precedente del Kama è Kama[t−1] = 100.
Supponiamo che al tempo t si abbia:
- P[t−2] = 99
- P[t−1] = 101
- P[t] = 100
Passo A: netChange
- netChange = |P[t] − P[t−N]| = |100 − 99| = 1
Passo B: sumAbsMoves
Per N = 3, serve |P[t]−P[t−1]| + |P[t−1]−P[t−2]| + |P[t−2]−P[t−3]|. Ma la nostra mini-serie mostra solo due prezzi precedenti. Per mantenere la dimostrazione coerente, espandiamo la finestra includendo P[t−3].
Sia P[t−3] = 98.
Ora calcoliamo:
- |P[t] − P[t−1]| = |100 − 101| = 1
- |P[t−1] − P[t−2]| = |101 − 99| = 2
- |P[t−2] − P[t−3]| = |99 − 98| = 1
- sumAbsMoves = 1 + 2 + 1 = 4
Passo C: ER
- ER = netChange / sumAbsMoves = 1 / 4 = 0,25
Passo D: costante di smoothing dinamica
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2
Prima calcoliamo (SC_fast − SC_slow): - 0,666666… − 0,064516… = 0,602150…
Poi il termine lineare: - ER × (SC_fast − SC_slow) + SC_slow
= 0,25 × 0,602150… + 0,064516…
= 0,150537… + 0,064516…
= 0,215053…
Eleviamo al quadrato: - SC[t] ≈ (0,215053…)^2 ≈ 0,0463
Passo E: aggiornamento del Kama
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1])
= 100 + 0,0463 × (100 − 100)
= 100
In questo esempio costruito, il prezzo corrente è uguale al Kama precedente, quindi l’aggiornamento è zero. Se P[t] fosse diverso da Kama[t−1], si vedrebbe un aggiustamento non nullo scalato da SC[t].
Perché questo illustra l’idea: se ER aumenta (il prezzo diventa più diretto in N periodi), SC[t] tende a spostarsi verso SC_fast, rendendo il Kama più reattivo. Se ER diminuisce (movimento più irregolare), SC[t] tende verso SC_slow, rendendo il Kama più liscio.
Limitazioni e rischi
-
Sbaglio nei parametri
Il Kama dipende da N, dalle impostazioni veloce/lenta e dall’esponente e dalle regole di gestione dei casi limite (come la divisione per zero). Se copiate la formula ma non la mappatura esatta dei parametri dal vostro indicatore, otterrete valori diversi. -
Definizione del prezzo di input
Piattaforme diverse definiscono il “prezzo” in modo diverso. Se una utilizza il prezzo di chiusura e un’altra un prezzo derivato (ad esempio, media di high/low/close), l’intera serie di output cambia.