Table des matières
Kelly_RM
Kelly_RM est un dépôt de recherche d’AlgoÉTS sur la gestion du risque avec le critère de Kelly, la règle qui fixe la taille d’une mise à partir de la probabilité de gain et du rapport de gain. Le README à la racine est vide ; le code associe une simulation de pile ou face à un carnet qui backteste une stratégie RSI, mesure les chances de gain par titre et en tire une fraction de Kelly. Il s’adresse à qui veut voir le comportement de la formule avant de l’appliquer à une stratégie.
1. Aperçu
Kelly_game/betting_strategies.py définit BaseGame, un jeu répété de pile ou face avec une pièce biaisée. Les sous-classes ne décident que de la mise : Kelly mise la fraction optimale de la richesse, KellyWithAnEstimate attend dix lancers puis mise selon la fréquence observée, ConstantDollar mise un montant fixe et BetLikeADummy mise gros après trois piles. La classe trace l’évolution de la richesse, simule la distribution des taux de croissance et compare la croissance espérée selon la fraction misée, avec le point de Kelly en repère. Kelly_game/Playing the Game.ipynb fait jouer les quatre stratégies côte à côte ; il se présente comme le code d’accompagnement d’une vidéo sur le critère de Kelly.
sandbox/Main strategy.ipynb transpose l’idée au trading. Il télécharge des historiques de prix avec src/data.py (fonctions Financial Modeling Prep et Binance appuyées sur src/request_api.py), coupe chaque série en trois ans d’entraînement et une suite inédite, puis optimise RsiOscillator (src/strategy.py) avec backtesting.py. À partir des transactions obtenues, il calcule par titre la probabilité de gain ainsi que la moyenne et la variance des gains et des pertes, garde les titres présents dans les deux périodes et applique f* = (p·b − q)/b avec b = gain moyen / perte moyenne.
2. Cas d’utilisation
Carnets et utilitaires pour estimer les chances de gain par backtest et dimensionner les positions selon Kelly.
- Simuler le jeu de Kelly
- Chercheur quantitatif
BaseGame (Kelly_game/betting_strategies.py) joue des lancers de pièce biaisée ; Kelly, KellyWithAnEstimate, ConstantDollar et BetLikeADummy fixent la mise, et Playing the Game.ipynb trace richesse et taux de croissance avec Altair.
- Télécharger l’historique
- Chercheur quantitatifAPI de données marché
src/data.py encapsule les points d’accès historical-price-full de Financial Modeling Prep et les chandelles Binance ; src/request_api.py envoie les requêtes avec httpx et src/config.py lit les clés dans l’environnement.
- Optimiser une stratégie RSI
- Chercheur quantitatif
sandbox/Main strategy.ipynb sépare chaque série en trois ans d’entraînement et une suite inédite, puis balaie les bornes et la fenêtre de RsiOscillator avec backtesting.py et affiche une carte de chaleur seaborn.
- Estimer les chances par titre
- Chercheur quantitatif
À partir des transactions de chaque backtest, le carnet calcule par titre la probabilité de gain, la moyenne et la variance des gains et des pertes, sur les deux périodes, et garde les titres présents dans les deux.
- Calculer la fraction de Kelly
- Chercheur quantitatif
La section Kelly Criterion applique f* = (p·b − q)/b avec b = gain moyen / perte moyenne et enregistre le résultat dans une colonne Kelly_Fraction.
2.1. Scénario : Dimensionner des positions RSI selon Kelly
- Lancer pip install -r requirements.txt, ajouter les paquets manquants du carnet (pandas_ta, scipy, sympy) et définir FMP_API_KEY dans l’environnement.
- Ouvrir sandbox/Main strategy.ipynb ; il lit les symboles du S&P 500 sur Wikipédia et télécharge dix historiques avec src/data.py.
- Séparer chaque série en trois ans d’entraînement et une période inédite.
- Optimiser RsiOscillator avec Backtest.optimize et lire la carte de chaleur des paramètres.
- Calculer par titre la probabilité de gain et la taille des gains et pertes sur les deux périodes, puis la fraction de Kelly des titres retenus.
Fichiers consultésREADME.mddocs/README.mdrequirements.txtrequirements-dev.txtenvironment.ymlsrc/config.pysrc/data.pysrc/request_api.pysrc/strategy.pysrc/signal.pyKelly_game/betting_strategies.pyKelly_game/Playing the Game.ipynbsandbox/Main strategy.ipynbdocs/notebook/strategy.ipynb
3. Fonctionnement de l’algorithme
La fraction de Kelly. Pour un pari gagné avec une probabilité p, qui rapporte b fois la mise (et fait perdre la mise sinon), la fraction de la richesse qui maximise le taux de croissance à long terme vaut
f* = p − q / b = (p·b − q) / b, avec q = 1 − p
BaseGame.kelly_bet calcule p + (p − 1) / b, la même expression, et la borne à [0, 1] : ni pari sur pile ni levier. La quantité que Kelly maximise est la croissance logarithmique espérée par pari, g(f) = p · ln(1 + b·f) + q · ln(1 − f), que plot_exp_growth_rates_by_perc_wager trace en fonction de f.
Exemple avec le jeu du carnet. Playing the Game.ipynb utilise p = 0,5, b = 1,5, 10 lancers et une richesse de départ de 500 $.
| Fraction misée | g(f) par lancer | Richesse typique après 10 lancers |
|---|---|---|
| 5 % | +1,05 % | × 1,11 |
| f = 1/6 ≈ 16,7 %* | +2,04 % | × 1,23 |
| 1/3 (deux fois Kelly) | 0,00 % | × 1,00 |
| 40 % | −2,04 % | × 0,82 |
La première mise de Kelly vaut donc 500 / 6 ≈ 83,33 $. Miser deux fois la fraction de Kelly donne une croissance nulle, et toute mise au-delà fait fondre la richesse avec le temps, même si chaque lancer a une espérance positive. La colonne « richesse typique » vaut exp(10 · g) : c’est le résultat médian, pas la moyenne.
Les quatre stratégies. Kelly mise f* de la richesse courante avec le vrai p. KellyWithAnEstimate ne mise rien pendant les dix premiers lancers, puis prend la fréquence observée de face comme p. ConstantDollar mise un montant fixe quelle que soit la richesse. BetLikeADummy mise gros après trois piles d’affilée, l’erreur du joueur. play_game plafonne toute mise à la richesse courante et s’arrête à zéro.
Des lancers aux transactions. sandbox/Main strategy.ipynb optimise une stratégie RSI par titre sur ses trois premières années de données (la boucle télécharge les dix premiers symboles du S&P 500, par la fonction FMP écrite pour les paires crypto), récupère les transactions et calcule par titre p = part des transactions gagnantes, une taille de gain et une taille de perte, puis b = gain / perte et f* = (p·b − q)/b.
flowchart LR
T["10 premiers symboles du S&P 500"] --> D["Prix quotidiens (FMP), 3 premières années = entraînement"]
D --> O["optimize de backtesting.py : fenêtre RSI 10–25, bornes 15–55 / 35–80"]
O --> TR["Liste des transactions par titre"]
TR --> P["p = transactions gagnantes / transactions"]
TR --> W["gain moyen, perte moyenne"]
P & W --> K["f* = (p·b − q) / b, b = gain / perte"]
TR --> BT["Test binomial de p contre 0,5"]
Dans le carnet, Win_Size vaut 0 pour les transactions perdantes et Loss_Size vaut 0 pour les gagnantes, et les deux sont ensuite moyennés sur toutes les transactions. Les moyennes valent donc p · E[gain] et q · E[perte], et b donne (p · E[gain]) / (q · E[perte]) au lieu du rapport de gain E[gain] / E[perte]. Pour p = 0,6, le b calculé vaut 1,5 fois le vrai rapport, ce qui gonfle la fraction de Kelly.
4. Démarrage
La description du projet en français, docs/README.md, donne l’étape d’installation :
pip install -r requirements.txt
jupyter notebook
Définissez FMP_API_KEY (et BINANCE_API_KEY pour la fonction Binance) dans l’environnement ; src/config.py les lit. Les carnets importent aussi des paquets absents de requirements.txt, comme pandas_ta, scipy, sympy et altair ; environment.yml est un export conda complet qui ajoute pandas-ta et SciPy, sans couvrir tous les imports.
5. Guide du dépôt
Kelly_game/betting_strategies.pycontient le jeu de pile ou face et ses stratégies de mise.Kelly_game/Playing the Game.ipynbcompare les stratégies avec des graphiques Altair.sandbox/Main strategy.ipynbenchaîne l’optimisation RSI, l’estimation des chances et la fraction de Kelly.src/data.py,src/request_api.pyetsrc/config.pyrécupèrent les prix chez FMP et Binance.src/strategy.pydéfinit les stratégies backtesting.pyEmaetRsiOscillator.src/signal.pytrace des lignes de support et de résistance avec trendln et un seuil de R².docs/README.mdest la description du projet ;docs/Kelle_complement.pdfest un article de référence sur la stratégie optimale en incertitude de paramètres, par approche Monte Carlo.docs/notebook/strategy.ipynbest un carnet vide.
6. Fonctionnalités
- stratégies Kelly, Kelly estimé, montant constant et « mise forte après des piles » sur une pièce simulée ;
- graphiques de richesse, histogrammes de taux de croissance et croissance espérée selon la fraction misée ;
- historiques d’actions et de cryptomonnaies FMP et chandelles de contrats à terme Binance avec httpx ;
- recherche par grille des paramètres RSI avec carte de chaleur seaborn ;
- statistiques de probabilité de gain et de taille des gains et pertes par titre, en entraînement et en données inédites ;
- fraction de Kelly pour chaque titre retenu.
7. Limites
- Le
README.mdà la racine est vide.docs/README.mddécrit des limites de risque dansconfig.py, un ajustement à la volatilité, une interface utilisateur et un script principal ; rien de cela n’existe dans le code, etsrc/config.pyne contient que les clés d’API et les URL de base. - Les dépendances sont incomplètes :
pandas_ta,trendln,fmp_python,scikit-learn,scipy,sympyetaltairsont importés sans figurer dansrequirements.txt. sandbox/Main strategy.ipynbajoute un chemin Windows codé en dur àsys.pathet appelle la fonction de prix des cryptomonnaies pour des symboles d’actions du S&P 500. Il utiliseDataFrame.append, retiré de pandas 2, et ses filtres de cohérence valent −1, ce qui les désactive.- Dans
src/strategy.py, la stratégieEmacalcule sa moyenne à 150 périodes avec le paramètre de 80 périodes. - Aucun test n’existe, même si
pytestfigure dansrequirements-dev.txt. - Les résultats dépendent de l’état des carnets et de données d’API en direct ; le dépôt ne les conserve pas.
8. Sources
- Dépôt GitHub
- Description du projet (
docs/README.md) Kelly_game/betting_strategies.pysandbox/Main strategy.ipynbsrc/data.pysrc/strategy.py
9. Pipeline CI/CD
Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.
Généré à partir du code au commit faf4eeb.
10. Schéma de déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
local["Poste local<br/>Python"]
repo -->|"cloner et lancer"| local
Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.
11. Dépendances externes
7 paquets déclarés (7 à l’exécution, 0 pour le développement) dans requirements.txt.
Tableau des paquets 7
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
python-dotenv | ==0.21.1 | exécution | Configuration | pypi.org |
backtesting | ==0.3.3 | exécution | Tests | pypi.org |
pandas | ==1.4.0 | exécution | Analyse de données | pypi.org |
polars | ==0.13.3 | exécution | Analyse de données | pypi.org |
numpy | ==1.24.2 | exécution | Analyse de données | pypi.org |
matplotlib | ==3.5.1 | exécution | Graphiques | pypi.org |
seaborn | ==0.11.2 | exécution | Graphiques | pypi.org |
12. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
API
Une interface par laquelle des composants logiciels échangent des requêtes et des résultats. Une API n’utilise pas nécessairement HTTP.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Port publié
Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Mermaid
Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.
13. Références
- AlgoETS. (2026, 5 novembre). Kelly_RM. [Software repository] github.com.
- AlgoETS. (2026, 5 novembre). Description du projet (docs/README.md). [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). Kelly_game/betting_strategies.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). sandbox/Main strategy.ipynb. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). src/data.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). src/strategy.py. [Source file or documentation] github.com.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.