Python Forum
Trading Risk management script.
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trading Risk management script.
#1
Lightbulb 
This program is a lightweight, pure-Python tool designed to help traders accurately measure, control, and optimize their risk on every position. Built entirely with the Python standard library, it provides a fast and transparent way to calculate position sizes, validate risk levels, and maintain consistent risk discipline across all trades.

Code:
def calculer_position_sizing(capital, risque_pourcent, sl_pips):
    """
    Calcule la taille de position pour le trading
    
    Args:
        capital: Capital disponible en €
        risque_pourcent: Pourcentage du capital à risquer (0-100)
        sl_pips: Stop Loss en pips
    
    Returns:
        Dict avec taille_lot, exposition, levier
    """
    
    # Vérifications
    if capital <= 0:
        return {"erreur": "Le capital doit être positif"}
    if risque_pourcent <= 0 or risque_pourcent > 100:
        return {"erreur": "Le risque doit être entre 0 et 100%"}
    if sl_pips <= 0:
        return {"erreur": "Le SL doit être positif"}
    
    # Montant à risquer en €
    montant_risque = capital * (risque_pourcent / 100)
    
    # Valeur d'un pip (pour crypto généralement 1 pip = 0.01 USDT)
    # Pour BTC/USDT: 1 pip = 0.01 (par defaut)
    # Vous pouvez modifier selon votre pair
    valeur_pip = 0.01
    
    # Risque total en €
    risque_total = sl_pips * valeur_pip
    
    # Taille de lot (en unités)
    if risque_total > 0:
        taille_lot = montant_risque / risque_total
    else:
        taille_lot = 0
    
    # Exposition (montant total engagé)
    # Pour crypto: exposition = taille_lot * prix_moyen
    # Exemple BTC à 50000: exposition = taille_lot * 50000
    exposition = taille_lot * 1  # 1 = prix normalisé (à adapter)
    
    # Levier estimé (exposition / capital)
    if capital > 0:
        levier = exposition / capital if exposition > 0 else 1
    else:
        levier = 1
    
    return {
        "capital": capital,
        "risque_pourcent": risque_pourcent,
        "montant_risque": montant_risque,
        "sl_pips": sl_pips,
        "taille_lot": round(taille_lot, 4),
        "exposition": round(exposition, 2),
        "levier": round(levier, 2)
    }

def afficher_resultats(resultats):
    """Affiche les résultats de manière formatée"""
    
    if "erreur" in resultats:
        print(f"\n❌ Erreur: {resultats['erreur']}")
        return
    
    print("\n" + "=" * 60)
    print("📊 RÉSULTATS DU POSITION SIZING")
    print("=" * 60)
    print(f"\n💰 Capital: {resultats['capital']}€")
    print(f"⚠️ Risque: {resultats['risque_pourcent']}%")
    print(f"📉 Montant à risquer: {resultats['montant_risque']}€")
    print(f"🎯 Stop Loss: {resultats['sl_pips']} pips")
    print("\n" + "-" * 60)
    print(f"📦 Taille de lot: {resultats['taille_lot']} unités")
    print(f"💵 Exposition: {resultats['exposition']}€")
    print(f"🔧 Levier estimé: x{resultats['levier']}")
    print("=" * 60)

def main():
    print("=" * 60)
    print("💹 CALCULATEUR DE POSITION SIZING TRADING")
    print("=" * 60)
    print("\nCe tool calcule la taille optimale de votre position")
    print("basée sur votre capital et votre tolérance au risque")
    print("\n" + "=" * 60)
    
    while True:
        try:
            print("\n📝 Entrez vos paramètres (ou 'quit' pour quitter):")
            
            capital_input = input("\n💰 Capital disponible (€): ").strip()
            if capital_input.lower() in ['quit', 'q']:
                print("\n👋 Au revoir!")
                break
            
            capital = float(capital_input)
            
            risque_input = input("⚠️ Pourcentage de risque (1-10%): ").strip()
            risque_pourcent = float(risque_input)
            
            sl_input = input("🎯 Stop Loss (pips): ").strip()
            sl_pips = float(sl_input)
            
            # Calculer
            resultats = calculer_position_sizing(capital, risque_pourcent, sl_pips)
            
            # Afficher
            afficher_resultats(resultats)
            
            # Demander si on continue
            continuer = input("\n🔄 Faire un autre calcul? (oui/non): ").strip().lower()
            if continuer not in ['oui', 'o', 'yes', 'y']:
                print("\n👋 Merci d'avoir utilisé le calculateur!")
                break
        
        except ValueError:
            print("\n❌ Erreur: Entrez des nombres valides!")
        except KeyboardInterrupt:
            print("\n\n👋 Programme arrêté")
            break
        except Exception as e:
            print(f"\n❌ Erreur: {e}")

if __name__ == "__main__":
    main()
Usage example:

💰 Capital disponible (€): 100
⚠️ Pourcentage de risque (1-10%): 1
🎯 Stop Loss (pips): 1

============================================================
📊 RÉSULTATS DU POSITION SIZING
============================================================

💰 Capital: 100.0€
⚠️ Risque: 1.0%
📉 Montant à risquer: 1.0€
🎯 Stop Loss: 1.0 pips

------------------------------------------------------------
📦 Taille de lot: 100.0 unités
💵 Exposition: 100.0€
🔧 Levier estimé: x1.0
buran write Nov-29-2025, 07:09 PM:
Please, use proper tags when post code, traceback, output, etc. This time I have added tags for you.
See BBcode help for more info.

Attached Files

.py   trading size.py (Size: 4.34 KB / Downloads: 0)
Reply
#2
This is called Code sharing, so please share code, not attachments.
Reply
#3
(Nov-29-2025, 05:24 PM)Axel_Erfurt Wrote: This is called Code sharing, so please share code, not attachments.
Sorry I am new on the forum, but the code is on the post.
Reply
#4
The code should be in code tags (the python button), otherwise all indentations are lost.
Reply
#5
(Nov-29-2025, 07:08 PM)Axel_Erfurt Wrote: The code should be in code tags (the python button), otherwise all indentations are lost.
Ok Thank you for the advice, i will make sure to change it.
Reply
#6
(Nov-29-2025, 04:51 PM)NeoQuant Wrote: This program is a lightweight, pure-Python tool designed to help traders accurately measure, control, and optimize their risk on every position. Built entirely with the Python standard library, it provides a fast and transparent way to calculate position sizes, validate risk levels, and maintain consistent risk discipline across all trades.

Code:
def calculer_position_sizing(capital, risque_pourcent, sl_pips):
    """
    Calcule la taille de position pour le trading
    
    Args:
        capital: Capital disponible en €
        risque_pourcent: Pourcentage du capital à risquer (0-100)
        sl_pips: Stop Loss en pips
    
    Returns:
        Dict avec taille_lot, exposition, levier
    """
    
    # Vérifications
    if capital <= 0:
        return {"erreur": "Le capital doit être positif"}
    if risque_pourcent <= 0 or risque_pourcent > 100:
        return {"erreur": "Le risque doit être entre 0 et 100%"}
    if sl_pips <= 0:
        return {"erreur": "Le SL doit être positif"}
    
    # Montant à risquer en €
    montant_risque = capital * (risque_pourcent / 100)
    
    # Valeur d'un pip (pour crypto généralement 1 pip = 0.01 USDT)
    # Pour BTC/USDT: 1 pip = 0.01 (par defaut)
    # Vous pouvez modifier selon votre pair
    valeur_pip = 0.01
    
    # Risque total en €
    risque_total = sl_pips * valeur_pip
    
    # Taille de lot (en unités)
    if risque_total > 0:
        taille_lot = montant_risque / risque_total
    else:
        taille_lot = 0
    
    # Exposition (montant total engagé)
    # Pour crypto: exposition = taille_lot * prix_moyen
    # Exemple BTC à 50000: exposition = taille_lot * 50000
    exposition = taille_lot * 1  # 1 = prix normalisé (à adapter)
    
    # Levier estimé (exposition / capital)
    if capital > 0:
        levier = exposition / capital if exposition > 0 else 1
    else:
        levier = 1
    
    return {
        "capital": capital,
        "risque_pourcent": risque_pourcent,
        "montant_risque": montant_risque,
        "sl_pips": sl_pips,
        "taille_lot": round(taille_lot, 4),
        "exposition": round(exposition, 2),
        "levier": round(levier, 2)
    }

def afficher_resultats(resultats):
    """Affiche les résultats de manière formatée"""
    
    if "erreur" in resultats:
        print(f"\n❌ Erreur: {resultats['erreur']}")
        return
    
    print("\n" + "=" * 60)
    print("📊 RÉSULTATS DU POSITION SIZING")
    print("=" * 60)
    print(f"\n💰 Capital: {resultats['capital']}€")
    print(f"⚠️ Risque: {resultats['risque_pourcent']}%")
    print(f"📉 Montant à risquer: {resultats['montant_risque']}€")
    print(f"🎯 Stop Loss: {resultats['sl_pips']} pips")
    print("\n" + "-" * 60)
    print(f"📦 Taille de lot: {resultats['taille_lot']} unités")
    print(f"💵 Exposition: {resultats['exposition']}€")
    print(f"🔧 Levier estimé: x{resultats['levier']}")
    print("=" * 60)

def main():
    print("=" * 60)
    print("💹 CALCULATEUR DE POSITION SIZING TRADING")
    print("=" * 60)
    print("\nCe tool calcule la taille optimale de votre position")
    print("basée sur votre capital et votre tolérance au risque")
    print("\n" + "=" * 60)
    
    while True:
        try:
            print("\n📝 Entrez vos paramètres (ou 'quit' pour quitter):")
            
            capital_input = input("\n💰 Capital disponible (€): ").strip()
            if capital_input.lower() in ['quit', 'q']:
                print("\n👋 Au revoir!")
                break
            
            capital = float(capital_input)
            
            risque_input = input("⚠️ Pourcentage de risque (1-10%): ").strip()
            risque_pourcent = float(risque_input)
            
            sl_input = input("🎯 Stop Loss (pips): ").strip()
            sl_pips = float(sl_input)
            
            # Calculer
            resultats = calculer_position_sizing(capital, risque_pourcent, sl_pips)
            
            # Afficher
            afficher_resultats(resultats)
            
            # Demander si on continue
            continuer = input("\n🔄 Faire un autre calcul? (oui/non): ").strip().lower()
            if continuer not in ['oui', 'o', 'yes', 'y']:
                print("\n👋 Merci d'avoir utilisé le calculateur!")
                break
        
        except ValueError:
            print("\n❌ Erreur: Entrez des nombres valides!")
        except KeyboardInterrupt:
            print("\n\n👋 Programme arrêté")
            break
        except Exception as e:
            print(f"\n❌ Erreur: {e}")

if __name__ == "__main__":
    main()
Usage example:

💰 Capital disponible (€): 100
⚠️ Pourcentage de risque (1-10%): 1
🎯 Stop Loss (pips): 1

============================================================
📊 RÉSULTATS DU POSITION SIZING
============================================================

💰 Capital: 100.0€
⚠️ Risque: 1.0%
📉 Montant à risquer: 1.0€
🎯 Stop Loss: 1.0 pips

------------------------------------------------------------
📦 Taille de lot: 100.0 unités
💵 Exposition: 100.0€
🔧 Levier estimé: x1.0
Than you very much Buran.
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020