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
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
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.
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é ..)
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
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.
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.
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
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.
Essai d’ajouter “change=0” entre les lignes 15 et 16 du dernier code.. pour voir ! 🙂
C’est bon. le code fonctionne parfaitement.
Merci encore nicolas.