Aller au contenu
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.

CarnetsCritère de Kelly
PythonJupyterbacktesting.pypandasNumPyhttpxAltairseaborn
  • Mis à jour

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.

Diagramme de cas d’utilisation de Kelly_RM : Simuler le jeu de Kelly; Télécharger l’historique; Optimiser une stratégie RSI; Estimer les chances par titre; Calculer la fraction de KellyKelly_RMSimuler le jeu de KellyTélécharger l’historiqueOptimiser une stratégie RSIEstimer les chances par titreCalculer la fraction de KellyChercheur quantitatif«système»API de données marché
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. 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.
  2. 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.
  3. Séparer chaque série en trois ans d’entraînement et une période inédite.
  4. Optimiser RsiOscillator avec Backtest.optimize et lire la carte de chaleur des paramètres.
  5. 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éeg(f) par lancerRichesse 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.py contient le jeu de pile ou face et ses stratégies de mise.
  • Kelly_game/Playing the Game.ipynb compare les stratégies avec des graphiques Altair.
  • sandbox/Main strategy.ipynb enchaîne l’optimisation RSI, l’estimation des chances et la fraction de Kelly.
  • src/data.py, src/request_api.py et src/config.py récupèrent les prix chez FMP et Binance.
  • src/strategy.py définit les stratégies backtesting.py Ema et RsiOscillator.
  • src/signal.py trace des lignes de support et de résistance avec trendln et un seuil de R².
  • docs/README.md est la description du projet ; docs/Kelle_complement.pdf est un article de référence sur la stratégie optimale en incertitude de paramètres, par approche Monte Carlo.
  • docs/notebook/strategy.ipynb est 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.md décrit des limites de risque dans config.py, un ajustement à la volatilité, une interface utilisateur et un script principal ; rien de cela n’existe dans le code, et src/config.py ne 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, sympy et altair sont importés sans figurer dans requirements.txt.
  • sandbox/Main strategy.ipynb ajoute un chemin Windows codé en dur à sys.path et appelle la fonction de prix des cryptomonnaies pour des symboles d’actions du S&P 500. Il utilise DataFrame.append, retiré de pandas 2, et ses filtres de cohérence valent −1, ce qui les désactive.
  • Dans src/strategy.py, la stratégie Ema calcule sa moyenne à 150 périodes avec le paramètre de 80 périodes.
  • Aucun test n’existe, même si pytest figure dans requirements-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

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
Dépendances externes
PaquetVersionUsageRôleRegistre
python-dotenv==0.21.1exécutionConfigurationpypi.org
backtesting==0.3.3exécutionTestspypi.org
pandas==1.4.0exécutionAnalyse de donnéespypi.org
polars==0.13.3exécutionAnalyse de donnéespypi.org
numpy==1.24.2exécutionAnalyse de donnéespypi.org
matplotlib==3.5.1exécutionGraphiquespypi.org
seaborn==0.11.2exécutionGraphiquespypi.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

  1. AlgoETS. (2026, 5 novembre). Kelly_RM. [Software repository] github.com.
  2. AlgoETS. (2026, 5 novembre). Description du projet (docs/README.md). [Source file or documentation] github.com.
  3. AlgoETS. (2026, 5 novembre). Kelly_game/betting_strategies.py. [Source file or documentation] github.com.
  4. AlgoETS. (2026, 5 novembre). sandbox/Main strategy.ipynb. [Source file or documentation] github.com.
  5. AlgoETS. (2026, 5 novembre). src/data.py. [Source file or documentation] github.com.
  6. 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.