Calcul automatique taille position

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #239302 quote
    ArturAgababyan13
    Participant
    New

    Bonjour à toutes et à tous,

    J’aurais besoin de votre aide pour résoudre un problème lié au calcul de la taille de la position.

    Effectivement, j’aimerais que dans mon backtest le calcul de taille se fasse automatiquement en fonction du montant du portefeuille, du % de risque par trade, du niveau d’entrée et du niveau de stop de protection.

    Pour illustrer ça voici un exemple :

    • Montant du portefeuille 1000€
    • % risque par trade : 2% (perte max 20€ par trade)
    • Stop de protection : le plus bas sur x période – 1*atr
    • Stop loss en point : abs(niveau d’entrée – top de protection)
    • Taille de la position : (20€/Stop loss en point/PointValue)*pipsize

    Le problème : lorsque je lance le backtest, aucun trade n’est pris sur sur l’ensemble de l’historique et cela peut importe le montant du portefeuille que je renseigne.

    En pièce jointe le résultat du backtest. Je ne sais pas d’où peut venir le problème. J’ai développé l’indicateur de la stratégie que me donne bien les signaux d’achat, donc les conditions d’achat sont valides. Peut-être de la manière dont je calcule la taille de la position ?

    Le problème persiste également lorsque j’entre une quantité spécifique : 0.01, 0.1, 0.5, etc.

    Pour réaliser la partie de calcul taille de position je me suis basé sur ces ressources :

    https://www.prorealcode.com/topic/money-management-how-to-get-the-available-capital-from-the-broker/

    https://www.prorealcode.com/blog/learning/money-management-prorealtime-code/

    DEFPARAM CumulateOrders = False  // Ne pas cumuler les ordres
    DEFPARAM NoCashUpdate = False
    DEFPARAM MaxOrder = 500
    
    once startCapital = 1000
    
    // Calcul des indicateurs EMA et CCI
    ema = ExponentialAverage[emaPeriod](Close)
    fastCCI = CCI[fastCCIperiod](Close)
    interCCI = CCI[interCCIperiod](Close)
    slowCCI = CCI[slowCCIperiod](Close)
    atrValue = AverageTrueRange[atrLength](Typicalprice)
    
    // ************************************************* BUY ************************************************* //
    
    // Conditions d'achat
    buyCond1 = (Close > ema) AND (fastCCI > 0) AND (interCCI > 0) AND (slowCCI crosses over 0)
    buyCond2 = (Close > ema) AND (slowCCI > 0) AND ((fastCCI crosses over 0) OR (interCCI crosses over 0))
    buyCond = buyCond1 OR buyCond2
    
    // Calcul du stop-loss
    capital = startCapital + STRATEGYPROFIT                       // La valeur de mon portefeuille
    longStop = Lowest[BarLookback](Low) - (atrValue * atrMult)    // La valeur de mon stop loss
    riskAmount = ROUND(RiskPercent / 100.0) * capital             // Le montant max que je risque par trade
    longRisk = Close - longStop                                   // L'écart entre l'entrée et le stop loss
    
    longPositionSize = abs(round((riskAmount/longRisk)/PointValue)*pipsize)
    
    // Entrée en position longue
    IF not ONMARKET and buyCond THEN
    BUY longPositionSize SHARES AT MARKET
    SET STOP LOSS longRisk
    ENDIF
    
    // Sortie du bay
    IF LongOnMarket THEN
    SET STOP TRAILING longRisk
    ENDIF
    

    Merci d’avance pour votre aide !!!

    res_backtest_ko.jpg res_backtest_ko.jpg res_backtest_ko-1.jpg res_backtest_ko-1.jpg
    #239405 quote
    Iván González
    Moderator
    Master

    Le problème réside dans le capital initial. Dans votre code, vous avez mis 1 000 $. Ce n'est pas suffisant pour l'actif que vous négociez "MOIS". Si vous passez à 10 000 par exemple vous verrez que vous obtenez déjà des résultats.

    2024-10-24_13-19.png 2024-10-24_13-19.png
    #239434 quote
    ArturAgababyan13
    Participant
    New

    Bonjour,

    Merci pour votre précision. Je viens de faire la manipulation, mais j’ai toujours le même résultat !

    En PJ un portefeuille à 10k, à 100k et à 1000k.

    Je ne sais pas où est mon erreur. Ce qui est embêtant pour réaliser un backtest.

    res_backtest_ko-10k.jpg res_backtest_ko-10k.jpg res_backtest_ko-100k.jpg res_backtest_ko-100k.jpg res_backtest_ko-1000k.jpg res_backtest_ko-1000k.jpg
    #239479 quote
    fifi743
    Participant
    Master

    si vous mettez
    longPositionSize = 1 il marche

    mettre en bas du code
    graph longPositionSize
    pour connaitre le nombre de contract

    #239534 quote
    ArturAgababyan13
    Participant
    New

    Effectivement en mettant :

    longPositionSize = 1

    Cela fonction, mais comment je peux faire pour avoir une taille de position qui s’adapte en fonction de l’évolution du portefeuille et de la règle de 2%?

    Je pensais que ce bout de code allait me permettre justement de réaliser ce calcul :

    // Calcul du stop-loss
    capital = startCapital + STRATEGYPROFIT                       // La valeur de mon portefeuille
    longStop = Lowest[BarLookback](Low) - (atrValue * atrMult)    // La valeur de mon stop loss
    riskAmount = ROUND(RiskPercent / 100.0) * capital             // Le montant max que je risque par trade
    longRisk = Close - longStop                                   // L'écart entre l'entrée et le stop loss
     
    longPositionSize = abs(round((riskAmount/longRisk)/PointValue)*pipsize)

    Merci pour l’astuce de la taille de position à 1.

    #239536 quote
    fifi743
    Participant
    Master

    pourquoi vous utilisé pas ce code

     

    REM Money Management
    Capital = 10000 
    Risk = 0.01 
    StopLoss = 10 // Could be our variable X
     
    REM Calculate contracts
    equity = Capital + StrategyProfit
    maxrisk = round(equity*Risk)
    PositionSize = abs(round((maxrisk/StopLoss)/PointValue)*pipsize)
    #239539 quote
    ArturAgababyan13
    Participant
    New

    Je n’utilise pas ce code car mon stop loss se calcule différemment en fonction du sens du trade. Le code ici c’est uniquement pour une position longue. Or je viens de rédiger la suite pour une position courte.

    #239540 quote
    fifi743
    Participant
    Master

    vous avez testé avec ce code
    graph longPositionSize
    le nombre de contract ?

    #239545 quote
    ArturAgababyan13
    Participant
    New

    Oui, comme vous m’avez dit de l’initialiser à 1, j’ai soit +1 pour position longue soit -1 pour position courte.

    #239551 quote
    ArturAgababyan13
    Participant
    New

    J’ai trouvé le problème ! Je viens de le résoudre 🙂

    // Ouverture d'une position longue
    IF NOT ONMARKET AND buyCond THEN
    BUY PositionSizeLong CONTRACTS AT MARKET
    buySL = LongStopLoss
    SET STOP PRICE buySL
    ENDIF
    
    // Stop suiveur pour la position longue
    IF LongOnMarket AND LongStopLoss > buySL THEN
    buySL = LongStopLoss
    SET STOP PRICE buySL
    ENDIF
    // Ouverture d'une position courte
    IF NOT ONMARKET AND sellCond THEN
    SELLSHORT PositionSizeShort SHARES AT MARKET
    sellSL = ShortStopLoss
    SET STOP PRICE sellSL
    ENDIF
    
    // Stop suiveur pour la position courte
    IF ShortOnMarket AND ShortStopLoss > sellSL THEN
    sellSL = ShortStopLoss
    SET STOP PRICE sellSL
    ENDIF

    Merci à vous !

Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.

Calcul automatique taille position


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 9 replies,
has 3 voices, and was last updated by ArturAgababyan13
1 year, 4 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 10/21/2024
Status: Active
Attachments: 6 files
Logo Logo
Loading...