Créer un indicateur zigzag avec des + haut et bas du MACD
Forums › ProRealTime forum Français › Support ProBuilder › Créer un indicateur zigzag avec des + haut et bas du MACD
- This topic has 9 replies, 3 voices, and was last updated 9 months ago by Bodaris.
-
-
03/03/2024 at 4:54 PM #229148
Bonjour,
J’ai fait une capture d’écran du rendu de ce que j’aimerai arriver à faire. Mais là, je sais pas par où commencer. Je crois que c’est trop compliqué pour moi. Je veux bien des pistes pour débuter le code.
Je voudrais avoir l’équivalent d’un indicateur zigzag mais les + haut et les + bas seront déterminés à partir des + hauts et des + bas des cycles MACD. J’espère que mon exemple est assez explicite.
Merci d’avance pour votre lecture et votre aide
03/03/2024 at 6:55 PM #229157Si je vais au bout de mon idée, ça donne ça avec un signal. Bien entendu la MACD aurait besoin d’être lissé, les faux signaux peuvent perturber les bons niveaux de plus bas.
HH = higherHigh
LH = LowerHigh
LL = LowerLow
HL = HigherLow
Les signaux sont :
Si HH puis LL puis LH alors au prochain croisement de la MACD sous 0 = vente en espérant faire un LL
Si LL puis HH puis HL alors au prochain croisement de la MACD au dessus de 0 = achat en espérant avoir un HH
Pour moi là c’est trop compliqué :/ faisable ?
03/04/2024 at 10:17 AM #229169Hola Aquí a une première approximation.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071// % zigzagporcentaje=3///Picosif ultimopunto <=0 thenhigher = max(higher,close)if higher<>higher[1] thenhighbar = barindexendifpicoporcentaje = (higher-close)/highernuevopico = picoporcentaje >= porcentaje/100if nuevopico thenif higher > ultimohigher thenulthh = hh[1]hh=1hl=0drawtext("HH",highbar,higher+0.25*tr)COLOURED("RED")ELSEulthh = hh[1]hh=0hl=1drawtext("HL",highbar,higher+0.25*tr)coloured("red")endifdrawsegment(ultimolowerbar,ultimolower,highbar,higher)coloured(200,0,200)DRAWPOINT(highbar, higher, 2)coloured(255,0,0)ultimohighbar = highbar //coordenada Xultimohigher = higher//coordenada yhigher=0ultimopunto = 1endifendif///vallesif ultimopunto >= 0 thenonce lower=closelower = min(lower,close)if lower <>lower[1] thenlowerbar = barindexendifvalleporciento = (close-lower)/lowernuevovalle = valleporciento >= porcentaje/100if nuevovalle thenif lower < ultimolower thenultll=ll[1]ll=1lh=0drawtext("LL",lowerbar,lower-0.25*tr)coloured("red")elseultll=ll[1]ll=0lh=1drawtext("LH",lowerbar,lower-0.25*tr)coloured("red")endifdrawsegment(ultimohighbar,ultimohigher,lowerbar,lower)coloured(0,255,255)DRAWPOINT(lowerbar,lower,2)coloured(0,0,255)ultimolowerbar = lowerbar//coordenada Xultimolower = lower//coordenada ylower=close*100ultimopunto = -1endifendif/////macdema12 = average[12,1](close)ema26 = average[26,1](close)miMACD = ema12-ema26//////if hl and miMACD crosses over 0 thendrawarrowup(barindex,low-0.25*tr)coloured("green")elsif lh and miMACD crosses under 0 thendrawarrowdown(barindex,high+0.25*tr)coloured("red")endifreturn1 user thanked author for this post.
03/05/2024 at 9:46 AM #229217Bonjour Ivan,
Un grand merci pour votre temps et votre aide, c’est vraiment appréciable. En jouant sur le pourcentage de la pente, j’arrive à faire correspondre les points bas du MACD avec ceux du zigzag. Ensuite, c’est top, grâce à vous je sais comment coder les signaux et marquer HH, LL … Donc, je peux déjà avoir une idée du rendu.
Je suis têtu. Donc, j’ai essayé de coder quelque chose réellement lié avec les valeurs de la MACD. J’ai réussi à faire ça. Mais j’ai un problème. Vu que j’enregistre une valeur de plus haut au croisement de la MACD et qu’ensuite j’enregistre des nouveaux “peak”. On voit que quand il y a un seul peak au moment du croisement et pas d’autres peak, du coup, mes coordonnées ne sont pas enregistrées pour tracer. Je n’arrive pas à le faire marcher correctement.
Si j’ai été compréhensible, avez vous une idée ?
Merci d’avance.
Voici mon code et en fichier joint le rendu de mon codage sur graphique.
12345678910111213141516171819202122232425262728293031323334353637383940// l'indicateurmymacd=MACD[12,26,9](close)//cycle haussier pour les peaksif mymacd crosses over 0 thenhigher = DHigh(0)sens = 1DRAWPOINT(barindex, high, 2) COLOURED("red")ENDIFif mymacd>0 and DHigh(0) > higher THENhigher = DHigh(0)highbar=barindexlasthighbar = highbarlasthigher = higherlastpoint=1DRAWPOINT(barindex, high, 2) COLOURED("red")ENDIF//calcul des points basIf mymacd crosses under 0 THENlower = DLow(0)sens = -1DRAWPOINT(barindex, low, 2)COLOURED("green")ENDIFif mymacd<0 and DLow(0) < lower THENlower = DLow(0)lowbar = BarIndexlastlowbar = lowbarlastlower = lowerDRAWPOINT(barindex, low, 2) COLOURED("green")endifif mymacd crosses under 0 thenDRAWSEGMENT(lastlowbar, lastlower, lasthighbar, lasthigher)endifif mymacd crosses over 0 thenDRAWSEGMENT(lastlowbar, lastlower, lasthighbar, lasthigher)endifreturn03/05/2024 at 10:33 AM #22922603/05/2024 at 11:50 AM #22923703/05/2024 at 2:10 PM #229252Bon, j’ai besoin d’aide encore je crois. Sur les unités de temps longues à partir de H1 et + H4, daily etc… ça a l’air de bien fonctionner. Mais sur les unités de temps plus petites, ça plante. Ou c’est mon code qui n’est pas bon :p.
Voici mon code et une illustration du bug en image.
Qu’en pensez vous ?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182// l'indicateurmymacd=MACD[12,26,9](close)//higher = peakif mymacd crosses over 0 thenhigher = DHigh(0)highbar=barindexlasthighbar = highbarlasthigher = highersens = 1//DRAWPOINT(barindex, high, 2) COLOURED("red")ENDIFif mymacd>0 and DHigh(0) > higher THENhigher = DHigh(0)highbar=barindexlasthighbar = highbarlasthigher = higherlastpoint=1//DRAWPOINT(barindex, high, 2) COLOURED("red")ENDIFif mymacd crosses under 0 thennewpeak = lasthigherif newpeak[1]<lasthigher THEN//Ulthh= hh[1]HH=1LH=0DRAWTEXT("HH", lasthighbar, lasthigher+0.25*tr)COLOURED("black")ENDIFif newpeak[1]>lasthigher thenhh=0lh=1DRAWTEXT("LH", lasthighbar, lasthigher+0.25*tr) COLOURED("black")endifendif//calcul des points basIf mymacd crosses under 0 THENlower = DLow(0)lowbar = BarIndexlastlowbar = lowbarlastlower = lowersens = -1//DRAWPOINT(barindex, low, 2)COLOURED("green")ENDIFif mymacd<0 and DLow(0) < lower THENlower = DLow(0)lowbar = BarIndexlastlowbar = lowbarlastlower = lower//DRAWPOINT(barindex, low, 2) COLOURED("green")endifif mymacd crosses over 0 THENnewcreux = lastlowerif lastlower<newcreux[1] THENLL=1HL=0DRAWTEXT("LL", lastlowbar, lastlower-0.25*tr)ENDIFif lastlower>newcreux[1] THENLL=0Hl=1DRAWTEXT("HL", lastlowbar, lastlower-0.25*tr)endifendifif mymacd crosses over 0 thenDRAWSEGMENT(lasthighbar[1], lasthigher[1], lastlowbar[1], lastlower[1])endifif mymacd crosses under 0 thenDRAWSEGMENT(lastlowbar[1], lastlower[1], lasthighbar[1], lasthigher[1])endif//////Les signauxif ((HH[1] and hl) or( LH[1] and HL)) and myMACD crosses over 0 thendrawarrowup(barindex,low-0.25*tr)coloured("green")elsif ((LL[1] and LH) or (HL[1] and LH)) and myMACD crosses under 0 thendrawarrowdown(barindex,high+0.25*tr)coloured("red")endifreturn03/05/2024 at 2:50 PM #229258Bonjour Vous devrez peut-être saisir l'option updateonclose pour qu'elle fasse le calcul à la fin de la barre (quotidiennement dans votre cas). Si vous souhaitez que les calculs soient effectués quotidiennement, entrez une ligne de code qui correspond à
timeframe(daily,updateonclose)
1 user thanked author for this post.
03/06/2024 at 9:50 AM #229309Voici une autre façon de marquer les points hauts et bas selon la position du MACD vis à vis de sa ligne 0 :
123456789101112131415161718192021222324252627282930313233343536373839defparam drawonlastbaronly=truei = MACD[12,26,9](close)if i crosses over 0 thenhhbar=barindexj=j+1elsif i crosses under 0 thenllbar=barindexj=j+1endifif i > 0 thenhhperiod=max(1,barindex-hhbar)$hhbar[j]=barindex[highestBars[hhperiod]]$hh[j]=highest[hhperiod](high)$dir[j]=1endifif i < 0 thenllperiod=max(1,barindex-llbar)$llbar[j]=barindex[lowestBars[llperiod]]$ll[j]=lowest[llperiod](low)$dir[j]=-1endifif islastbarupdate thenfor x=0 to j doif $dir[x] = 1 thendrawtext($hh[x],$hhbar[x],$hh[x],dialog,bold, 12)drawarrowdown($hhbar[x],$hh[x]) coloured("red")endifif $dir[x] = -1 thendrawtext($ll[x],$llbar[x],$ll[x],dialog,bold, 12)drawarrowup($llbar[x],$ll[x]) coloured("green")endifnextendifreturn03/06/2024 at 1:45 PM #229340 -
AuthorPosts
Find exclusive trading pro-tools on