Méthode GARCH — prévision de volatilité + dimensionnement de position
Cette compétence répond à la question que le commerce de détail ne pose jamais et que chaque fonds pose quotidiennement : combien ?
Elle ne prédit PAS la direction. GARCH prévoit l'amplitude des mouvements — à quel point demain sera violent, et non dans quelle direction il ira. Dites ceci à l'utilisateur lors de la présentation des résultats.
Les trois outils
Tous les scripts se trouvent dans scripts/ et s'exécutent avec uv run (les dépendances se résolvent automatiquement via les métadonnées en ligne — rien à pip-installer).
1. garch_forecast.py — la prévision
GARCH(1,1) sans regard en avant (paramètres réestimés tous les 21 jours sur une fenêtre croissante ; la récursion avance entre les réestimations en utilisant uniquement les données passées).
uv run scripts/garch_forecast.py --csv prices.csv --json
uv run scripts/garch_forecast.py --ticker BTC-USD --json
Sortie : prévision de volatilité sur 1 jour (quotidienne + annualisée), percentile de volatilité sur l'année glissante, régime (calme / normal / tempête).
2. vol_target.py — la taille
L'idée entière : taille = volatilité_cible / volatilité_prévue, plafonnée à [0,25x, 2,0x].
uv run scripts/vol_target.py --csv prices.csv --volatilité-cible 15 --json
Sortie : multiplicateur de taille de position. « Exécutez 0,6x votre ligne de base » — voilà la réponse.
3. compare.py — le test honnête
Exécute les mêmes signaux deux fois — taille fixe vs ciblée sur la volatilité — et affiche les deux courbes de rendement ainsi que les statistiques côte à côte. Livré avec une démonstration EMA 9/21 croisement ; accepte n'importe quelle stratégie via --signals mon_fichier.csv (colonnes : date, signal dans {-1,0,1}).
uv run scripts/compare.py --csv prices.csv --volatilité-cible 58 --graphique equity.png --json
uv run scripts/compare.py --csv prices.csv --signaux mon_fichier.csv
Sortie : CAGR, volatilité annuelle, Sharpe, drawdown maximal, pire mois, capital final — les deux versions — plus le graphique de courbe de rendement avec les régimes de tempête ombrés.
Contrat JSON
Chaque script prend en charge --json. Format de sortie principal :
{
"as_of": "2026-05-23",
"forecast_vol_annualized_pct": 41.2,
"vol_percentile_1y": 78.0,
"regime": "storm",
"position_size_multiplier": 0.6,
"note": "GARCH forecasts magnitude (volatility), not direction."
}
Trois modèles de composition
A. Couche de dimensionnement — à greffer sur n'importe quelle stratégie existante. Votre stratégie décide si ; cette compétence décide combien. Prenez le signal de la stratégie, multipliez-le par position_size_multiplier, terminé.
B. Frein de risque — coupe-circuit autonome. Si regime == "storm", réduisez toute exposition au multiplicateur, indépendamment de ce que disent vos signaux. Fonctionne avec n'importe quel agent qui gère les positions.
C. Harnais de comparaison — avant de faire confiance à une stratégie, exécutez-la via compare.py et vérifiez si le ciblage de volatilité améliore son Sharpe / drawdown. Si le dimensionnement n'aide pas, l'avantage de la stratégie est peut-être trop faible pour survivre aux conditions réelles.
Se compose proprement avec des compétences de direction de régime (par exemple les classificateurs haussiers/baissiers de style Markov) : leur sortie répond dans quelle direction, celle-ci répond combien. Multipliez les deux.
Valeurs par défaut et conventions
- Crypto :
--periods-per-year 365(par défaut). Actions :--periods-per-year 252. - Volatilité cible : 15 % est une valeur par défaut conservatrice raisonnable. Pour une comparaison ajustée au risque avec une stratégie sans levier, définissez la cible approximativement égale à la volatilité réalisée de la stratégie elle-même.
- Données : ticker yfinance (nécessite Internet) ou n'importe quel CSV avec colonnes date + clôture — s'intègre dans n'importe quel pipeline que l'utilisateur utilise déjà.
- Historique minimum : environ 510 observations quotidiennes avant la première prévision.
Règles d'honnêteté (non négociables)
- Ne présentez jamais la sortie de GARCH comme un appel directionnel.
- Ne cachez jamais les chiffres de drawdown ou de pire mois lors du rapport d'une comparaison.
- Si le ciblage de volatilité n'améliore PAS la stratégie de l'utilisateur, dites-le clairement — ce résultat est tout aussi précieux.