Critère de Kelly

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #113705 quote
    vindioux
    Participant
    Average

    Bonjour,

    Suite à une vidéo de TrendFrance vue sur Youtube j’ai souhaité essayer d’appliquer le critère de Kelly à mon money management sur une stratégie qui prends des positions long et short.

    J’ai réussi sans problème si j’applique le Kelly indistinctement à mes prises de postions long et short. Mais cela ce complique lorsque je veux appliquer un critère de Kelly pour mes postions long et un critère de Kelly différent pour mes postions short. Sorti de la période d’étude : période pendant laquelle j’analyse la stratégie pour déterminer le critère de Kelly avant de l’appliquer, je n’ai plus de prises de positions.

    On est sur l’EUR/USD en m30, je vous joins le code, si quelqu’un voit ce qui cloche…

    Defparam cumulateorders = false
    
    Once NbGainLong=0
    Once NbGainShort=0
    Once NBLong=0
    Once NBShort=0
    
    
    Capital=10000
    TauxCouverture=3.33
    
    // Variable Période d'étude avant activativation Kelly
    PEtude=10
    
    
    // Comptage du nombre de positions longues/courtes
    T=barindex-tradeindex=0
    
    IF LongOnMarket AND T Then
    NBLong=NBLong+1
    ENDIF
    IF ShortOnMarket AND T Then
    NBShort=NBShort+1
    ENDIF
    
    //Calculs du Rapport détaillé + Période d'étude
    
    LongWin=Strategyprofit>Strategyprofit[1] AND LongOnMarket[1]
    LongLoose=Strategyprofit<Strategyprofit[1] AND LongOnMarket[1]
    ShortWin=Strategyprofit>Strategyprofit[1] AND ShortOnMarket[1]
    ShortLoose=Strategyprofit<Strategyprofit[1] AND ShortOnMarket[1]
    
    IF NBLong<=PEtude Then
    nL=10
    
    IF LongWin Then
    GainLong=GainLong+Strategyprofit-Strategyprofit[1]
    NbGainLong=NbGainLong+1
    pLongWin=NbGainLong/NBLong
    RatioLong=ABS(GainLong/PertesLong)
    ENDIF
    IF LongLoose Then
    PertesLong=PertesLong+Strategyprofit-Strategyprofit[1]
    pLongWin=NbGainLong/NBLong
    RatioLong=ABS(GainLong/PertesLong)
    ENDIF
    ENDIF
    
    IF NBShort<=PEtude Then
    nS=10
    
    IF ShortWin Then
    GainShort=GainShort+Strategyprofit-Strategyprofit[1]
    NbGainShort=NbGainShort+1
    pShortWin=NbGainShort/NBShort
    RatioShort=ABS(GainShort/PertesShort)
    ENDIF
    IF ShortLoose Then
    PertesShort=PertesShort+Strategyprofit-Strategyprofit[1]
    pShortWin=NbGainShort/NBShort
    RatioShort=ABS(GainShort/PertesShort)
    ENDIF
    ENDIF
    
    // Période Kelly
    IF NBLong>PEtude Then
    
    KellyLong=(pLongWin-(1-pLongWin)/RatioLong)
    nL=(Capital/(Capital*TauxCouverture)*KellyLong)
    nL=round(nL)
    
    IF LongWin Then
    GainLong=GainLong+Strategyprofit-Strategyprofit[1]
    NbGainLong=NbGainLong+1
    
    pLongWin=NbGainLong/NBLong
    RatioLong=ABS(GainLong/PertesLong)
    
    KellyLong=(pLongWin-(1-pLongWin)/RatioLong)
    nL=(Capital/(Capital*TauxCouverture)*KellyLong)
    nL=round(nL)
    
    IF KellyLong <=0 Then
    nL=1
    ENDIF
    ENDIF
    
    IF LongLoose Then
    PertesLong=PertesLong+Strategyprofit-Strategyprofit[1]
    pLongWin=NbGainLong/NBLong
    RatioLong=ABS(GainLong/PertesLong)
    
    KellyLong=(pLongWin-(1-pLongWin)/RatioLong)
    nL=(Capital/(Capital*TauxCouverture)*KellyLong)
    nL=round(nL)
    
    IF KellyLong <=0 Then
    nL=1
    ENDIF
    ENDIF
    ENDIF
    
    
    IF NbShort>PEtude Then
    pShortWin=NbGainShort/NBShort
    RatioShort=ABS(GainShort/PertesShort)
    
    KellyShort=(pShortWin-(1-pShortWin)/RatioShort)
    nS=(Capital/(Capital*TauxCouverture)*KellyShort)
    nS=round(nL)
    
    IF KellyShort <=0 Then
    nS=1
    ENDIF
    IF ShortWin Then
    GainShort=GainShort+Strategyprofit-Strategyprofit[1]
    NbGainShort=NbGainShort+1
    ENDIF
    IF ShortLoose Then
    PertesShort=PertesShort+Strategyprofit-Strategyprofit[1]
    ENDIF
    ENDIF
    
    
    // Variables Stratégie
    
    MM=20
    D=1.5
    MML=60
    MMC=7
    
    BollInf = Average[MM](close)-D*std[MM](close)
    BollSup = Average[MM](close)+D*std[MM](close)
    
    // ACHAT
    ca1 = close > average[MML](close)
    ca2 = average[MMC](close) > average[MML](close)
    ca3 = low < BollInf
    
    IF ca1 and ca2 and ca3 THEN
    buy nL shares at market
    ENDIF
    
    cv1 = close > BollSup
    
    IF cv1 THEN
    sell at market
    ENDIF
    
    // SHORT
    ca1s = close < average[MML](close)
    ca2s = close > BollSup
    
    IF ca1s and ca2s THEN
    sellshort nS shares at market
    ENDIF
    
    cv1s = close < BollInf
    
    if cv1s THEN
    EXITSHORT at market
    ENDIF
    
    #113731 quote
    Nicolas
    Keymaster
    Master

    Si il n’y a pas de position qui s’ouvre c’est sans doute parce que les variables calculées nS et nL ont une valeur non correcte pour une taille de position acceptable. Il faudrait commencer par les GRAPH, puis remonter toutes les variables de la même manière pour vérifier où le calcul se bloque. Il s’agit sans aucun doute d’un mauvais copier/coller renommage de variables quand tu as voulu séparer les 2 Kelly criterion.

    #113786 quote
    vindioux
    Participant
    Average

    Merci de votre réponse Nicolas.

    J’ai fais les GRAPH de toutes les variables qui me permettent de calculer le Kelly criterion et tout semble varier correctement pendant la période d’étude. Après la période d’étude mes variables nS (nombre de lots à acheter en short) et nL (nombre de lot à acheter en long) passent à 0 alors que mes variables KellyShort et KellyLong ont bien une valeur normale et que les autres variables qui permettent de déterminer le nombre de lots à acheter ou vendre sont normales aussi.

    C’est comme si il y avait un problème dès que NBShort>PEtude ou NBLong>PEtude. De plus cela ne se produit pas au même moment (sur la même barre) puisque la stratégie peut prendre plusieurs positions short ou long d’affilée et finir sa période d’étude des positions longues avant les short ou l’inverse.

    J’ai fait assez peu de copié/collé dans la rédaction de cette stratégie, cela m’étonnerai que ça vienne de là. Il y a par contre à un endroit nS=round(nL). Il faut corriger par nS=round(nS).

    De plus ce qui est vraiment étonnant c’est qu’il puisse y avoir une (ou plusieurs) erreur qui fait planter les 2 conditions d’entrée en position dès qu’on sort de PEtude.

    #113803 quote
    Nicolas
    Keymaster
    Master

    Si nS et nL passent à 0 à un certain moment durant le backtest, c’est parce qu’on leurs affectent cette valeur. Essaie de supprimer les round pouvoir les valeurs réelles, c’est peut être cette instruction qui arrondi un chiffre très petit à cette valeur.

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

Critère de Kelly


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
vindioux @vindioux Participant
Summary

This topic contains 3 replies,
has 2 voices, and was last updated by Nicolas
6 years, 3 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 11/27/2019
Status: Active
Attachments: No files
Logo Logo
Loading...