Je souhaite savoir s’il est possible, dans un indicateur, de limiter le nombre de signaux. Soit n’autoriser l’indicateur à donner un signal achat que si le dernier signal était en sens inverse… Donc alterner systématiquement le sens des signaux…
Soit limiter le nombre de signaux consécutifs dans un même sens (Maximum 3 signaux dans le même sens).
Je poste un code exemple. Les signaux sont données par un +1 à l’achat et un -1 à la vente.
// HORAIRES DE TRADING
signal=0
IF time < 080000 or time > 200000 THEN
backgroundcolor(210,210,210)
ENDIF
// Affichage des EMA 8 & 21
EMA8 = ExponentialAverage[8](close)
EMA21 = ExponentialAverage[21](close)
// Affichage des FLECHES (TIMEFRAME M1)
CondLong = Close > Close[1] And Close[1] > Close[2] And (Close > High[2] And Close[1] > High[2]) and EMA8>EMA21
CondShort= Close < Close[1] And Close[1] < Close[2] And (Close < Low[2] And Close[1] <Low[2])and EMA8<EMA21
If CondLong THEN
signal=1
ELSIF CondShort THEN
signal=-1
ENDIF
RETURN signal
Pourquoi penses-tu que cela ne soit pas possible ? 🙂
1/ Exemple: quand ton signal est haussier, enregistre cette information dans une variable, à la prochaine détection d’un signal, ajoute un test pour savoir si le signal est le même que cette variable ou pas .. basique !
2/ Exemple : quand ton signal est haussier, incrémente une variable (mavariable = mavariable + 1), et ajoute un test pour savoir quelle est cette quantité au prochain signal .. simple !
😉
Je me doutais bien que c’était possible, voire basique. Je crains juste la mise en oeuvre avec mes connaissances limitées… même si c’est “Simple!” 😉
Je vais essayer.
Alors voici une première tentative qui ne marche pas sur la base de la deuxième proposition que tu formules.
je précise au début mavariable=0
Puis quand il y a signal achat, If….. : mavariable = mavariable + 1
et signal de vente, if….. : mavariable = mavariable -1
Et pour compter, je mets dans ma condition achat et vente “if mavariable <3 ou >-3″….
// HORAIRES DE TRADING
signal=0
mavariable=0
IF time < 080000 or time > 200000 THEN
backgroundcolor(210,210,210)
ENDIF
// Affichage des EMA 8 & 21
EMA8 = ExponentialAverage[8](close)
EMA21 = ExponentialAverage[21](close)
// Affichage des FLECHES (TIMEFRAME M1)
CondLong = Close > Close[1] And Close[1] > Close[2] And (Close > High[2] And Close[1] > High[2]) and EMA8>EMA21
CondShort= Close < Close[1] And Close[1] < Close[2] And (Close < Low[2] And Close[1] <Low[2])and EMA8<EMA21
If CondLong and mavariable<3 THEN
signal=1
mavariable = mavariable + 1
ELSIF CondShort and mavariable>-3 THEN
signal=-1
mavariable = mavariable -1
ENDIF
RETURN signal
Bien tenté, mais puisque tu remets “mavariable” à 0 à chaque lecture de ton code, alors tu n’auras jamais aucun compte ! Par ailleurs 3 – (-3) = 6, et donc tu pourras avoir jusqu’à 6 fois le même signal ici.
Non testé :
// HORAIRES DE TRADING
signal=0
IF time < 080000 or time > 200000 THEN
backgroundcolor(210,210,210)
ENDIF
// Affichage des EMA 8 & 21
EMA8 = ExponentialAverage[8](close)
EMA21 = ExponentialAverage[21](close)
// Affichage des FLECHES (TIMEFRAME M1)
CondLong = Close > Close[1] And Close[1] > Close[2] And (Close > High[2] And Close[1] > High[2]) and EMA8>EMA21
CondShort= Close < Close[1] And Close[1] < Close[2] And (Close < Low[2] And Close[1] <Low[2])and EMA8<EMA21
If CondLong and upvariable<3 THEN
signal=1
upvariable = upvariable + 1
dnvariable = 0
ELSIF CondShort and dnvariable<3 THEN
signal=-1
dnvariable = dnvariable + 1
upvariable = 0
ENDIF
RETURN signal
J’ai scindé les signaux haussiers et baissiers (upvariable et dnvariable).
Merci beaucoup c’est très clair.
Une demande complémentaire. L’indicateur fonctionne bien mais j’aimerais qu’il soit remis à 0 en fin de session.
Je m’explique : si je prévois de faire fonctionner les signaux de 9h à 17h par exemple… si ledernier signal est acheteur… il faut qu’à 17h00 tout soit remis à 0 et que le premier signal puisse être acheteur aussi le lendemain.
Actuellement, si un signal acheteur survient à 16h… et que le lendemain toutes les conditions sont réunies pour un achat à 9h00 mais que le nombre de signaux dans le même sens mentionné et atteind, le signal n’apparaît pas.
Je sais pas si je suis bien clair. Enfin j’espère Nicolas.
Dans ce cas la, tu fais une condition pour tester la fin de la session et si cette condition est vrai, alors tu remets les variables à zéro.
J’ai tenté le code suivant qui semble ne pas donner le résultat souhaité.
if time = 1200000 then
dnvariable=0 and upvariable=0
Si fin de session à 12h00 remise à 0 des variables
Je pense que tu as mis un 0 de trop à 12:00:00 (4 zéros et non 5).
Si Time ne fonctionne pas, essai OpenTime qui l’heure de l’ouverture de la bougie.