Calcul de position de type Martingale en fonction des résultats de la veille

Viewing 15 posts - 1 through 15 (of 16 total)
  • Author
    Posts
  • #141166 quote
    jeannord
    Participant
    New

    Bonjour

    Débutant en programmation, et nouvel utilisateur du forum, bien que retraité, j’ai besoin de votre aide

    Je voudrais écrire un code qui utilise le résultat journalier fixe, gain ou perte d’une stratégie pour faire varier à la hausse ou à la baisse le nombre de contrats achetés les jours suivants.

    Dans l’exemple joint : DAX 3 minutes

    • Moyenne mobile 20, achat à la hausse, vente à la baisse.
    • Gain ou perte journalière fixe : 20 €
    • n nombre de contrats (n = 1 le 1er jour)

     

    Je souhaite

    • Si perte, je veux le jour suivant acheter ou vendre n+1 contrats
    • Si gain, je veux le jour suivant acheter ou vendre n-1 contrats jusqu’au moment ou n = 1
    • n ne doit jamais être inférieur à 1

    Exemple :

    Jour 1    n=1         gain

    Jour 2    n=1         gain

    Jour3     n=1         perte

    Jour4     n=2         perte

    Jour5     n=3         gain

    Jour6     n=2         gain

    Jour7     n=1         gain

    Jour8     n=1         ………

    Merci d’avance

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 171500
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Gain et perte journalière (20 avec stoploss)
    MaxDailyprofit= 20//Max daily loss allowed  (in money)
    MaxDailyLoss= 3 //Max daily loss allowed  (in money)
    
    
    // first time we launch the code, the trading is allowed
    once TradeAllowed=1
    // first time we launch the code, the number of contracts is 1
    once n = 1
    // reset the current state of the strateygprofit each new day
    If intradaybarindex=0 then
    MyProfit=STRATEGYPROFIT
    DailyProfit=0
    TradeAllowed=1
    endif
     
    
    //compute live daily profit & automatic takeprofit
    dailyprofit = strategyprofit-myprofit
    autotakeprofit = MaxDailyProfit-dailyprofit
     
    If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
    EXITSHORT AT MARKET
    TradeAllowed=0
    endif
    // Conditions pour ouvrir une position acheteuse
    indicator1 = Average[20](close)
    indicator2 = Average[20](close)
    c1 = (indicator1 > indicator2[1])
    
    IF c1 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    BUY n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position acheteuse
    indicator3 = Average[20](close)
    indicator4 = Average[50](close)
    c2 = (indicator3 <= indicator4[1])
    
    IF c2 THEN
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    indicator5 = Average[20](close)
    indicator6 = Average[20](close)
    c3 = (indicator5 < indicator6[1])
    
    IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    SELLSHORT n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position en vente à découvert
    indicator7 = Average[20](close)
    indicator8 = Average[20](close)
    c4 = (indicator7 >= indicator8[1])
    
    IF c4 THEN
    EXITSHORT AT MARKET
    ENDIF
    // Stops et objectifs
    SET STOP pLOSS 20
    SET TARGET $Profit autotakeprofit
    
    #141180 quote
    robertogozzi
    Moderator
    Master

    Entre les lignes 19 et 20 insérez ces lignes (je ne l'ai pas essayé):

    If StrategyProfit > StrategyProfit[1] Then
       n = max(1,n - 1)
    Elsif StrategyProfit < StrategyProfit[1] Then
       n = n + 1
    Endif
    #141189 quote
    zilliq
    Participant
    Master

    Bonjour,

    Désolé toutes les études statistiques (Et j’ai fit pas mal de Code auto sur ce sujet) montrent que les martingales ne fonctionnent pas notamment car à un moment on est limité par le capital

    Ce qui est important c’est la régularité, plus vite on peut gagner, plus vite on peut perdre

    Très bonne fin de journée

    #141198 quote
    jeannord
    Participant
    New

    Avant tout un grand merci Roberto

    J’ai appliqué la modification, il reste un problème voici le résultat :

    J

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 171500
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Gain et perte journalière (20 avec stoploss)
    MaxDailyprofit= 20//Max daily loss allowed  (in money)
    MaxDailyLoss= 3 //Max daily loss allowed  (in money)
    
    
    // first time we launch the code, the trading is allowed
    once TradeAllowed=1
    // first time we launch the code, the number of contracts is 1
    once n = 1
    
    if strategyprofit>strategyprofit[1] then
    n =max(1, n-1)
    elsif strategyprofit<strategyprofit[1] then
    n =n+1
    endif
    // reset the current state of the strateygprofit each new day
    If intradaybarindex=0 then
    MyProfit=STRATEGYPROFIT
    DailyProfit=0
    TradeAllowed=1
    endif
     
    
    //compute live daily profit & automatic takeprofit
    dailyprofit = strategyprofit-myprofit
    autotakeprofit = MaxDailyProfit-dailyprofit
     
    If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
    EXITSHORT AT MARKET
    TradeAllowed=0
    endif
    // Conditions pour ouvrir une position acheteuse
    indicator1 = Average[20](close)
    indicator2 = Average[20](close)
    c1 = (indicator1 > indicator2[1])
    
    IF c1 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    BUY n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position acheteuse
    indicator3 = Average[20](close)
    indicator4 = Average[50](close)
    c2 = (indicator3 <= indicator4[1])
    
    IF c2 THEN
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    indicator5 = Average[20](close)
    indicator6 = Average[20](close)
    c3 = (indicator5 < indicator6[1])
    
    IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    SELLSHORT n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position en vente à découvert
    indicator7 = Average[20](close)
    indicator8 = Average[20](close)
    c4 = (indicator7 >= indicator8[1])
    
    IF c4 THEN
    EXITSHORT AT MARKET
    ENDIF
    // Stops et objectifs
    SET STOP pLOSS 20
    SET TARGET $Profit autotakeprofit
    

     

    our 1    n=1         perte       20

    Jour 2    n= 2        perte       40

    Jour3     n =1        gain        20           ici n aurait dû être égal à 3 et le gain de 60.

     

    Je vous joins le code corrigé et le tableau des résultats.

    Bien cordialement

    Jean

    tableau.pdf
    #141201 quote
    jeannord
    Participant
    New

    Merci Zilliq pour ta mise en garde

    Bien cordialement

    jean

    #141213 quote
    robertogozzi
    Moderator
    Master

    Je ne sais pas comment se fait le calcul PERF.ABS.

    #141216 quote
    jeannord
    Participant
    New

    Excuse moi Roberto, je n’ai pas ta pratique et le terme PERF.ABS ne me parle pas.

    Avec la correction que tu m’as indiquée, que j’ai incluse dans le dernier code ci-dessus, voici le résultat : (Résultats du tableau joins plus haut dans mon dernier message pour la période du 9 juillet au 7 août)

    Pour un strategyprofit journalier de 20€ :

    Avec la correction que tu m’as indiquée, que j’ai incluse dans le dernier code ci-dessus, voici le résultat :

    Pour un strategyprofit journalier de 20€ :

    9  Juillet                 perte       n=1         -20          ok

    10 Juillet               perte       n=2         -40          ok

    13 Juillet               gain        n=1         +20         problème pour le jour 3, n devrait être égal à 3 et donner un profit de 60, ce n’est pas le cas.

    14 Juillet               gain        n =1        +20 ……

    Bien cordialement

    #141218 quote
    Nicolas
    Keymaster
    Master

    Le code qu’a donné Roberto doit être placé juste avant de lancer les ordres (dans le même bloc conditionnel), sinon à chaque lecture du code, la variable n sera recalculé et la taille de position ajustée, même si on ne rentre pas au marché (pas de conditions pour).

    #141222 quote
    robertogozzi
    Moderator
    Master

    Le code est bien tel quel, le 13 juillet est court avec 3 contrats.

    Encore une fois, je ne sais pas comment PERF.ABS (vous l’avez joint vous-même) est calculé.

    x-3.jpg x-3.jpg y.jpg y.jpg
    #141232 quote
    jeannord
    Participant
    New

    Roberto, Nicolas,

    Merci pour votre implication.

    Roberto, en vérifiant, je vois que le code fonctionne au niveau de l’augmentation et de la diminution du nombre de contrats.

    Je pense que si l’évolution du nombre de contrats est résolue, il doit rester un problème au niveau du stratégyprofit en fonction de l’évolution de n.

    Car le Perf Abs ne semble pas refléter le nombre de contrats n.

     

     

    Nicolas j’ai déplacé le code de Roberto, mais cela ne change rien.

     

    Je continue à travailler sur le code.

    Je joins le dernier code en vigueur.

     

    Bien Cordialement

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 171500
     
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    // Gain et perte journalière (20 avec stoploss)
    MaxDailyprofit= 20//Max daily loss allowed  (in money)
    MaxDailyLoss= 3 //Max daily loss allowed  (in money)
     
     
    // first time we launch the code, the trading is allowed
    once TradeAllowed=1
    // first time we launch the code, the number of contracts is 1
    once n = 1
     
    
    // reset the current state of the strateygprofit each new day
    If intradaybarindex=0 then
    MyProfit=STRATEGYPROFIT
    DailyProfit=0
    TradeAllowed=1
    endif
     
     
    //compute live daily profit & automatic takeprofit
    dailyprofit = strategyprofit-myprofit
    autotakeprofit = MaxDailyProfit-dailyprofit
     
    If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
    EXITSHORT AT MARKET
    TradeAllowed=0
    endif
    // Conditions pour ouvrir une position acheteuse
    indicator1 = Average[20](close)
    indicator2 = Average[20](close)
    c1 = (indicator1 > indicator2[1])
    if strategyprofit>strategyprofit[1] then
    n =max(1, n-1)
    elsif strategyprofit<strategyprofit[1] then
    n =n+1
    endif
    IF c1 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    BUY n CONTRACT AT MARKET
    ENDIF
     
    // Conditions pour fermer une position acheteuse
    indicator3 = Average[20](close)
    indicator4 = Average[50](close)
    c2 = (indicator3 <= indicator4[1])
     
    IF c2 THEN
    SELL AT MARKET
    ENDIF
     
    // Conditions pour ouvrir une position en vente à découvert
    indicator5 = Average[20](close)
    indicator6 = Average[20](close)
    c3 = (indicator5 < indicator6[1])
    
    IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    SELLSHORT n CONTRACT AT MARKET
    ENDIF
     
    // Conditions pour fermer une position en vente à découvert
    indicator7 = Average[20](close)
    indicator8 = Average[20](close)
    c4 = (indicator7 >= indicator8[1])
     
    IF c4 THEN
    EXITSHORT AT MARKET
    ENDIF
    // Stops et objectifs
    SET STOP pLOSS 20
    SET TARGET $Profit autotakeprofit
    
    #141236 quote
    Nicolas
    Keymaster
    Master

    Tu n’as pas compris,  le calcul de taille de position doit être placé juste avant la ligne BUY et aussi celle avant le SELLSHORT, car c’est à ces moments précis où tu dois choisir ta taille de lot et pas à chaque lecture du code.

    Je n’ai pas pu tester mais c’est la première chose à laquelle je pense,  il y a peut-être autre chose à vérifier.

    #141263 quote
    robertogozzi
    Moderator
    Master

    Ajoutez ces lignes à la fin du code pour voir la valeur que les variables ont à chaque barre:

    Graph n
    Graph autotakeprofit
    Graph StrategyProfit
    graph DailyProfit

    Cependant, le problème est que vous avec

     $Profit

    vous avez limité le bénéfice à 20 €, que ce soit 1 contrat ou 3 contrats. Remplacez-le par:

    pProfit

    et vous verrez que cela fonctionne comme vous le souhaitez.

    Nicolas thanked this post
    y1.jpg y1.jpg y3.jpg y3.jpg y4.jpg y4.jpg y5.jpg y5.jpg
    #141269 quote
    robertogozzi
    Moderator
    Master

    Essayez-le aussi avec:

    SET TARGET $Profit autotakeprofit * n
    #141292 quote
    jeannord
    Participant
    New

    Bonjour Nicolas

    J’avais fait l’essai en déplaçant le code de Roberto, mais le résultat était moins bon, n restait à la valeur 1, maintenant j’ai peut-être mal placé le code, je joins le code.

    Le problème vient du Perf Abs car avec le code de Roberto positionné entre les lignes 19 et 20, on obtient bien le résultat souhaité au niveau des contrats, lors d’une perte n augmente, lors d’un gain n diminue.

    Comme me l’a fait remarquer Roberto dans sa pièce jointe du 08 09 à 4 pm, n varie bien, mais la variation du Perf Abs pose problème

    Le 9 juillet             1 contrat                perte                    Perf Abs  -20 €        ok

    Le 10 juillet            2 contrats              perte                   Perf Abs – 40€         ok

    Le 13 juillet           3 contrats              gain                       Perf Abs +20,1€     Problème, le Perf Abs aurait du être de 60 €

    Le 14 juillet           2 contrats              gain                       Perf Abs +20€         Problème, le Perf Abs aurait du être de 40 €

    Est-ce que le Strategyprofit est la bonne référence ???

    Bien cordialement

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 171500
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Gain et perte journalière (20 avec stoploss)
    MaxDailyprofit= 20//Max daily loss allowed  (in money)
    MaxDailyLoss= 3 //Max daily loss allowed  (in money)
    
    
    // first time we launch the code, the trading is allowed
    once TradeAllowed=1
    // first time we launch the code, the number of contracts is 1
    once n = 1
    
    
    // reset the current state of the strateygprofit each new day
    If intradaybarindex=0 then
    MyProfit=STRATEGYPROFIT
    DailyProfit=0
    TradeAllowed=1
    endif
     
    
    //compute live daily profit & automatic takeprofit
    dailyprofit = strategyprofit-myprofit
    autotakeprofit = MaxDailyProfit-dailyprofit
     
    If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
    EXITSHORT AT MARKET
    TradeAllowed=0
    endif
    // Conditions pour ouvrir une position acheteuse
    indicator1 = Average[20](close)
    indicator2 = Average[20](close)
    c1 = (indicator1 > indicator2[1])
    
    IF c1 AND not daysForbiddenEntry and tradeallowed = 1 then
    if strategyprofit>strategyprofit[1] then
    n =max(1, n-1)
    elsif strategyprofit<strategyprofit[1] then
    n =n+1
    endif
    BUY n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position acheteuse
    indicator3 = Average[20](close)
    indicator4 = Average[50](close)
    c2 = (indicator3 <= indicator4[1])
    
    IF c2 THEN
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    indicator5 = Average[20](close)
    indicator6 = Average[20](close)
    c3 = (indicator5 < indicator6[1])
    
    IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THEN
    if strategyprofit>strategyprofit[1] then
    n =max(1, n-1)
    elsif strategyprofit<strategyprofit[1] then
    n =n+1
    endif
    SELLSHORT n CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour fermer une position en vente à découvert
    indicator7 = Average[20](close)
    indicator8 = Average[20](close)
    c4 = (indicator7 >= indicator8[1])
    
    IF c4 THEN
    EXITSHORT AT MARKET
    ENDIF
    // Stops et objectifs
    SET STOP pLOSS 20
    SET TARGET $Profit autotakeprofit
    
    #141294 quote
    Nicolas
    Keymaster
    Master

    Pour être clair, on doit garder la même taille de contrat toute la journée ? La taille varie donc une seule fois par jour en fonction des gains/pertes de la veille ? Ai-je bien compris ? 🙂

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

Calcul de position de type Martingale en fonction des résultats de la veille


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
jeannord @claisse Participant
Summary

This topic contains 15 replies,
has 4 voices, and was last updated by jeannord
5 years, 7 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 08/08/2020
Status: Active
Attachments: 7 files
Logo Logo
Loading...