3. 2. 2025

5 0

CUSO

Indicatore CUSUM in StrategyQuant

Nel post di oggi, esamineremo da vicino un'implementazione personalizzata dell'indicatore CUSUM (somma cumulativa). Spesso utilizzata nel controllo statistico dei processi, la tecnica CUSUM aiuta a rilevare piccoli spostamenti nel livello medio di una serie. Questa particolare implementazione è stata progettata per essere integrata nell'StrategyQuant, offrendo ai trader un modo dinamico per monitorare e reagire ai cambiamenti del mercato.

Che cos'è il CUSUM?

Il CUSUM è una tecnica di analisi sequenziale che accumula le deviazioni da un valore target nel tempo. Confrontando la somma cumulativa con le soglie definite, diventa più facile individuare anche le più sottili variazioni nel comportamento dei prezzi. Nella nostra implementazione, due accumulatori separati - uno per i movimenti al rialzo (CUSUM positivo) e uno per i movimenti al ribasso (CUSUM negativo) - segnalano quando la variazione della serie di prezzi sottostante diventa significativa.

Guida al codice

L'indicatore è definito come una classe Java che estende

IndicatoreBlocco

garantendo una perfetta integrazione con l'ecosistema di StrategyQuant. Analizziamo i componenti principali:

Parametri e ingressi

  • Dati del grafico: L'indicatore utilizza un grafico (in genere il prezzo di chiusura) come fonte di dati.
  • Periodo: Determina la dimensione della finestra su cui vengono calcolate la media mobile e la deviazione standard. Si tratta di un aspetto cruciale, in quanto definisce la sensibilità dell'indicatore.
  • Soglia (k): Imposta la soglia di rilevamento. Una soglia più alta significa che l'indicatore diventa meno sensibile, riducendo i falsi segnali.
  • Deriva (μ): Tiene conto della deriva prevista nel processo, consentendo il rilevamento di cambiamenti più piccoli ma persistenti.

@Parametro(defaultChartIndex=0)
public ChartData Chart;

@Parametro(category="Default", name="Period", minValue=1, maxValue=10000, defaultValue="20", step=1)
public int Periodo;

@Parametro(category="Default", name="Threshold", minValue=0.1, maxValue=100, defaultValue="2", step=0.1)
@Help("Soglia di rilevamento (k) - valori più alti rendono l'indicatore meno sensibile")
public double Soglia;

@Parameter(category="Default", name="Drift", minValue=0, maxValue=10, defaultValue="0.5", step=0.1)
@Help("Deriva prevista nel processo (mu) - aiuta a rilevare cambiamenti persistenti più piccoli")
public double Deriva;

Calcolo delle statistiche periodiche

Per ogni nuova barra (o punto temporale), il codice calcola la media mobile e la deviazione standard nel periodo definito. Queste statistiche servono come base per standardizzare i dati di prezzo attuali.

double sum = 0;
double sumSquares = 0;

per (int i = 0; i < Periodo; i++) {
double price = Chart.Close(i);
sum += prezzo;
sumSquares += prezzo * prezzo;
}

double media = somma / Periodo;
double variance = (sumSquares - (sum * sum / Period)) / (Period - 1);
double stdDev = Math.sqrt(varianza);

// Impedisce la divisione per zero
se (stdDev == 0) {
stdDev = 1;
}

 

Standardizzazione e calcolo del CUSUM

Il prezzo corrente viene standardizzato sottraendo la media e dividendo per la deviazione standard. Il valore standardizzato viene quindi utilizzato per aggiornare gli accumulatori CUSUM:

  • CUSUM Positivo: Accumula deviazioni positive.
  • CUSUM Negativo: Accumula le deviazioni negative.

Ogni aggiornamento sottrae sia la deriva che la soglia, assicurando che solo le deviazioni significative contribuiscano alla somma cumulativa.

// Ottenere il valore standardizzato corrente
double currentValue = (Chart.Close(0) - media) / stdDev;

// Calcolare i valori CUSUM
double prevCusumPos = getCurrentBar() > Period ? CusumPos.get(1) : 0;
double prevCusumNeg = getCurrentBar() > Period ? CusumNeg.get(1) : 0;

// CUSUM superiore
CusumPos.set(0, Math.max(0, prevCusumPos + currentValue - Drift - Threshold));

// CUSUM inferiore
CusumNeg.set(0, Math.max(0, prevCusumNeg - currentValue - Drift - Threshold));

 

Gestione dei casi limite

Un dettaglio importante è il controllo della deviazione standard. Quando i dati di prezzo sono troppo coerenti (con conseguente deviazione standard pari a zero), il codice la reimposta a 1. Questa salvaguardia impedisce errori di divisione e mantiene l'indicatore robusto in condizioni di bassa volatilità.

Mettere tutto insieme

L'indicatore CUSUM è uno strumento potente per i trader che cercano di cogliere cambiamenti sottili ma sostenuti nell'azione dei prezzi. Adattandosi dinamicamente ai dati di mercato recenti (tramite statistiche rolling) e tenendo conto del rumore tramite i parametri di soglia e di deriva, l'indicatore offre un approccio equilibrato alla generazione di segnali.

Se siete interessati a incorporare questo indicatore nelle vostre strategie di trading, il codice è strutturato in modo da essere adattabile e facile da integrare nell'ambiente StrategyQuant.

 

 

0 Commenti
Vecchi
Più recenti Le più votate