Bonjour, j’essaye de coder un indicateur qui affiche sur le graphe des prix une flêche lorsque le dernier chandelier en clôture dépasse la bande de bollinger haute (flêche verte) et en reverse sous la bande de bollinger basse (flêche rouge).
Comment modifier ce code pour n’afficher qu’une seule flêche au premier dépassement des BB (achat ou vente) et non pas plusieurs flêches à chaque dépassement des BB à l’achat ou à la vente ? En vous remerciant pour votre aide.
b=close>BollingerUp[20]
s=close<BollingerDown[20]
if b then
drawarrowup(barindex,lowest[3](low)) coloured(0,255,0)
endif
if s then
drawarrowdown(barindex,highest[3](high)) coloured(255,0,0)
endif
return b as "buy", s as "sell"
Il faut utiliser CROSSES OVER et CROSSES UNDER plutôt que de vérifier en continu si le Close est supérieur à la bande haute ou inférieur à la bande basse.
Ces instructions servent à vérifier une condition de croisement entre 2 valeurs.
Nicolas, j’ai essayé de modifier mon indicateur en tenant compte de ton conseil mais j’obtiens (hélas) le même résultat qu’avec le code précédent. La première image jointe montre le défaut et la seconde le résultat souhaité. Si des fois t’avais une idée pour solutionner celà. Merci d’avance.
b = close CROSSES OVER BollingerUp[20](close)
s = close CROSSES UNDER BollingerDown[20](close)
signal = 0
if b THEN
signal = 1
drawarrowup(barindex,lowest[3](low)) coloured(0,255,0)
ELSE
signal = 0
ENDIF
if s THEN
signal = -1
drawarrowdown(barindex,highest[3](high)) coloured(255,0,0)
ELSE
signal = 0
ENDIF
RETURN (signal)
Je comprends bien mieux ta demande maintenant, tu souhaites alterner les signaux. Dans ce cas il faut tester si le dernier signal est un signal contraire avant d’en lancer un nouveau (j’ai ajouté une nouvelle variable “lastsignal”):
b = close CROSSES OVER BollingerUp[20](close)
s = close CROSSES UNDER BollingerDown[20](close)
signal = 0
if b and lastsignal<=0 THEN
signal = 1
drawarrowup(barindex,lowest[3](low)) coloured(0,255,0)
lastsignal=1
ELSE
signal = 0
ENDIF
if s and lastsignal>=0 THEN
signal = -1
drawarrowdown(barindex,highest[3](high)) coloured(255,0,0)
lastsignal=-1
ELSE
signal = 0
ENDIF
RETURN (signal)
Bonjour Kynio
J’ai essayé avec : DefParam DrawOnLastBarOnly = true en début de code mais ça ne marche pas ?!
J’ai modifié ton code pour avoir des variables sur la periode et l’écart type : p et EC
BB CROSS UP and DOWN”
med1 = Average[p](close)
dst1 = STD[p](close)
bes1 = med1 + (EC * dst1)
/////////////////////////////////
med = Average[p](close)
dst = STD[p](close)
bei = med - (EC * dst)
/////////////////////////////////
b = close CROSSES OVER bes1
s = close CROSSES UNDER bei
signal = 0
if b THEN
signal = 1
drawarrowup(barindex,lowest[1](low)) coloured(0,255,0)
ELSE
signal = 0
ENDIF
if s THEN
signal = -1
drawarrowdown(barindex,highest[1](high)) coloured(255,0,0)
ELSE
signal = 0
ENDIF
RETURN customclose as " customclose " , signal as " signal ", bei as " bei " , bes1 as " bes1 "
// Variables :
// p = 20 entier
// EC = 2 decimal
Génial, mon indicateur fonctionne parfaitement maintenant. Merci à vous deux pour votre aide inestimable…
Bonsoir Kynio
Peux tu nous mettre en ligne le code que tu utilises ?
bonne soirée
Salut supertiti, c’est celui que Nicolas donne plus haut après modification. Bon we !