Nouvelle martingale.

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #23987 quote
    arcane
    Participant
    Senior

    Bonjour,

    J’ai besoin d’aide pour coder une martingale.

    J’utilise le code suivant.

    
    IF c1 THEN
    
    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize-2
    
    
    if ordersize<1 then
    ordersize=1
    ENDIF
    
    
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = OrderSize +2
    endif
    if ordersize<1 then
    ordersize=1
    ENDIF
    
    
    buy ordersize shares at market
    endif
    
    
    
    IF c2 THEN
    
    
    iF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize-2
    
    
    if ordersize<1 then
    ordersize=1
    ENDIF
    
    
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = OrderSize +2
    ENDIF
    if ordersize<1 then
    ordersize=1
    ENDIF
    
    
    sellshort ordersize shares at market
    endif

    Mais je voudrais ajouter une condition.

    Après 3 gains consécutifs, je voudrais que la position revienne à 1.

    Merci de votre aide.

    J’ai essayé de m’inspirer du guide PRT mais cela ne fonctionne pas.

     

    La Piquemouche
    La Piquemouche est une autre variante de la martingale classique. En cas de perte, on augmente la taille de
    la position par 1 si on a moins de 3 pertes consécutives. Si on a plus de 3 pertes consécutives, on double la
    taille de la position. Un gain réinitialise la position à 1 unité. Ce système de gestion des positions est moins
    dangereux que les deux précédents, car on n’augmente pas la taille de la position de manière exponentielle
    avant 3 pertes successives. Il est nécessaire d’intégrer vos conditions d’entrée et de sortie au code suivant :

     

    //***********Code à insérer au début du système**********//
    ONCE ExitIndex = -2
    ONCE OrderSize = 1
    // On commence avec une position de 1
    ONCE BadTrades = 0
    // On initialise le compteur du nombre de trades perdants successifs
    //*********************//
    //*****Code à insérer juste après les instructions liquidant une position*****//
    ExitIndex = BarIndex
    //***********Code à insérer en fin de système**********//
    IF Barindex = ExitIndex + 1 THEN
    ExitIndex = 0
    IF PositionPerf(1) < 0 THEN
    BadTrades = BadTrades + 1
    IF BadTrades < 3 THEN
    // Si le dernier trade était perdant et que l’on est à moins de 3 pertes
    // successives, alors on incrémente d’une unité la taille de la
    prochaine position.
    OrderSize = OrderSize + 1
    ELSIF BadTrades MOD 3 = 0 THEN
    // Si le dernier trade était perdant et que l’on est à plus de 3 pertes
    // successives, on double la taille de la prochaine position.
    OrderSize = OrderSize * 2
    ENDIF
    ELSIF PositionPerf(1) >= 0 THEN
    // Si le dernier trade était gagnant, alors on revient à une position de taille 1.
    OrderSize = 1
    BadTrades = 0
    ENDIF
    ENDIF
    //*********************//
    REM La taille de la position doit être déterminée par la variable OrderSize pour
    l'intégralité du code
    
    
    #23991 quote
    arcane
    Participant
    Senior

    J’ai essayé cela mais cela ne marche pas à toutes les lignes.

     

    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize=1
    
    
    if ordersize<1 then
    ordersize=1
    ENDIF
    
    
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = OrderSize +1
    endif
    if PositionPerf(1) > 0 and PositionPerf(2) > 0 and PositionPerf(3) > 0 then
    ordersize=1
    ENDIF
    
    
    buy ordersize shares at market
    endif
    #24145 quote
    arcane
    Participant
    Senior

    Bonjour,

    Personne n’a une idée pour revoir la position de la martingale après 3 positions.

    Mon code fonctionne mais ne multiplie plus les positions après 3 gains.

    Si on a une série de 6 gains.

    Je voudrais qu’il recommence à multiplier la 2 série.

    1 contrat = gain

    2 contrats= gain

    4 contrats= gain

    1 contrats= gain

    2 contrats= gain au lieu de 1 contrats

    4 contrats= gain au lieu de 1 contrats.

    Merci de votre aide.

    #24153 quote
    Nicolas
    Keymaster
    Master

    Bon, je n’ai pas lu tout ton code, mais uniquement la demande initiale. Soit pour revenir à l’ordersize du début si 3 gains consécutifs:

    ordersize = 1
    
    if tradingcondition then 
     if positionperf(1)<0 then 
      change = change+1
      if change<3 then 
        mylot = mylot+1
     elsif positionperf(1)>=0 OR change=3
        mylot = ordersize
        change = 0
      endif
     endif
     BUY mylot CONTRACTS AT MARKET 
    endif
    

    Désolé si je n’ai pas repris ton code, mais ce sera ma dernière contribution pour ce soir 🙂

    (je n’ai pas testé ..)

    #24238 quote
    arcane
    Participant
    Senior

    Bonjour Nicolas,

    Bon boulot mais le code ne déclenche aucun ordres.

    J’ai retravaille votre code.Cela fonctionne mieux mais ne donne pas encore le bon résultat.

    si gagnant, j’ai bien les 3 premiers ordres qui augmentent mais si perdant l’ordre ne revient pas à 1.

    Je mets le code en copie si vous pouvez tester.

    Merci d’avoir répondu à mon message.

     

    once mylot = 1
    
    if conditions then
    
    if positionperf(1)>0 then
    change = change+1
    if change<4 then
    mylot = mylot+2
    elsif positionperf(1)<0 OR change=4 then
    mylot=mylot=1
    change = 0
    endif
    endif
    BUY mylot CONTRACTS AT MARKET
    endif
    
    if conditions then
    
    if positionperf(1)>0 then
    change = change+1
    if change<4 then
    mylot = mylot+2
    elsif positionperf(1)< 0 OR change=4 then
    mylot=mylot=1
    change = 0
    endif
    endif
    sellshort mylot CONTRACTS AT MARKET
    endif
    
    #24243 quote
    Nicolas
    Keymaster
    Master

    J’ai corrigé je pense, il y avait des conditions imbriquées qui ne devaient pas l’être… bref.

    Ci-dessous le code côté achat uniquement d’une dummy stratégie:

    defparam cumulateorders=false
    
    conditions = close crosses over supertrend[3,10]
    
    once mylot = 1
    
    if conditions then
    
    if positionperf(1)>0 then
    change = change+1
    if change<4 then
    mylot = mylot+2
    endif
    elsif positionperf(1)<0 OR change=4 then
    mylot=1
    change = 0
    endif
    
    
    BUY mylot CONTRACTS AT MARKET
    endif
    
    set target pprofit 10
    set stop ploss 10
    
    graph change

    En fait, c’est une anti-martingale, les lots augmentent quand on gagne et reste au lot d’origine quand on perd.

    anti-martingale-code.png anti-martingale-code.png
    #24257 quote
    arcane
    Participant
    Senior

    Super c’est presque que cela.

    Une anti martingale.

    Juste un dernier souci.

    Une fois qu’on a fait 3 gains, il ne repart pas de zéro.

    Il garde le nombre de contrats identiques  jusque la prochaine perte.

    Pas évident mais merci quand même.

    #24260 quote
    Nicolas
    Keymaster
    Master

    oui en effet, ci-dessous la correction:

    defparam cumulateorders=false
    
    conditions = close crosses over supertrend[3,10]
    
    once mylot = 1
    
    if conditions then
    
    if positionperf(1)>0 then
    change = change+1
    if change<3 then
    mylot = mylot+2
    endif
    if change=3 then 
    mylot = 1
    endif
    elsif positionperf(1)<0 OR change=3 then
    mylot=1
    change = 0
    endif
    
    
    BUY mylot CONTRACTS AT MARKET
    endif
    
    set target pprofit 10
    set stop ploss 10
    
    graph change
    
    #24324 quote
    arcane
    Participant
    Senior

    Encore merci pour le travail Nicolas.

    A la lecture, le code est correct pour moi mais cela ne fonctionne pas.

    Après 3 gains, il revient bien à un contrat. Mais après il ne multiplie plus les positions.

    1 gain = 1 contrat

    2 gain = 3 contrats

    3 gain= 5 contrats

    4 gain = 1 contrat

    5 gain= 1 contrat au lieu de 3 contrats attendus.

    La série ne redémarre pas après les 3 gains successifs.

    Seule une perte relance la martingale dans le bon sens.

    #24327 quote
    Nicolas
    Keymaster
    Master

    Essai d’ajouter “change=0” entre les lignes 15 et 16 du dernier code.. pour voir ! 🙂

    #24355 quote
    arcane
    Participant
    Senior

    C’est bon. le code fonctionne parfaitement.

    Merci encore nicolas.

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

Nouvelle martingale.


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
arcane @arcane Participant
Summary

This topic contains 10 replies,
has 2 voices, and was last updated by arcane
9 years ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 02/05/2017
Status: Active
Attachments: No files
Logo Logo
Loading...