gbzhParticipant
Junior
Bonjour,
j’aimerai déterminer deux points, l’un étant le “a” plus bas d’une section et l’autre le plus haut “b” d’une section suivante.
La 1ère période commence lorsque tenkan croise à la baisse kijun et se termine lorsque tenkan re-croise kijun à la hausse juste après. Puis la 2e période commence avec ce même croisement puis se termine par le croisement de tenkan à la baisse de kijun.
le point a est le plus bas de la 1ère période et b le plus haut de la 2e période.
mon code ne donne rien. merci de votre aide.
voici une image en pièce jointe
ligne bleue tenkan, rouge kijun. fleche verte point a, fleche rouge point b. 1ere fleche noire, le premier croisement à la baisse de kijun par tenkan. 2e fleche le croise de tenkan à la hausse de kijun. 3e fleche, le croisement de tenkan à la baisse de kijun.
// === Paramètres Ichimoku ===
tenkanPeriod = 9
kijunPeriod = 26
n = 500 // profondeur de recherche
TimeFrame(5minute)
// === Ichimoku ===
Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
// === Recherche du 1er croisement baissier (Tenkan < Kijun)
croisementBas1 = -1
FOR i = n DOWNTO 1 DO
IF Tenkan[i] < Kijun[i] AND Tenkan[i-1] >= Kijun[i-1] THEN
croisementBas1 = i
BREAK
ENDIF
NEXT
// === Recherche du croisement haussier suivant (Tenkan > Kijun)
croisementHaut = -1
IF croisementBas1 > 0 THEN
FOR i = croisementBas1 - 1 DOWNTO 1 DO
IF Tenkan[i] > Kijun[i] AND Tenkan[i-1] <= Kijun[i-1] THEN
croisementHaut = i
BREAK
ENDIF
NEXT
ENDIF
// === Recherche du 2e croisement baissier (Tenkan < Kijun)
croisementBas2 = -1
IF croisementHaut > 0 THEN
FOR i = croisementHaut - 1 DOWNTO 1 DO
IF Tenkan[i] < Kijun[i] AND Tenkan[i-1] >= Kijun[i-1] THEN
croisementBas2 = i
BREAK
ENDIF
NEXT
ENDIF
// === Point A : plus bas entre croisementBas1 et croisementHaut
pointA = -1
valA = high
IF croisementBas1 > 0 AND croisementHaut > 0 THEN
FOR i = croisementBas1 DOWNTO croisementHaut DO
IF Low[i] < valA THEN
valA = Low[i]
pointA = BarIndex - i
ENDIF
NEXT
ENDIF
// === Point B : plus haut entre croisementHaut et croisementBas2
pointB = -1
valB = low
IF croisementHaut > 0 AND croisementBas2 > 0 THEN
FOR i = croisementHaut DOWNTO croisementBas2 DO
IF High[i] > valB THEN
valB = High[i]
pointB = BarIndex - i
ENDIF
NEXT
ENDIF
// === Affichage flèches
IF pointA > 0 THEN
DRAWARROWUP(pointA, valA - AverageTrueRange[5](Close)) COLOURED("green")
ENDIF
IF pointB > 0 THEN
DRAWARROWDOWN(pointB, valB + AverageTrueRange[5](Close)) COLOURED("red")
ENDIF
RETURN 0
Bonsoir,
Les boucles rallongent les temps de calcul, on peut développer une logique différente sans boucle de la façon suivante, l’exécution sera plus rapide, tout en tournant sur l’intégralité de l’historique sans se limiter à une profondeur de recherche de 500. On peut avoir ainsi tous les A et B successifs au lieu des 2 derniers. A tester:
once barreA=0
once barreB=0
// === Ichimoku ===
tenkanPeriod = 9
kijunPeriod = 26
Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
// Periode 1
if tenkan crosses under kijun then
barreA=barindex
valA=low
DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red")
endif
if tenkan<kijun then
if low<ValA then
barreA=barindex
ValA=low
endif
endif
// Periode 2
if tenkan crosses over kijun then
barreB=barindex
valB=high
DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green")
endif
if tenkan>kijun then
if high>ValB then
barreB=barindex
ValB=high
endif
endif
return
gbzhParticipant
Junior
et maintenant j’essaye de mettre des extensions fibonacci en me basant sur ces deux points, mais encore une fois, mon résultat n’est pas satisfaisant. meme la largeur voulue du segment entre les deux points, je n’y arrive pas.
si vous pouviez m’aider encore une fois 🙂
// === Initialisations persistantes ===
ONCE barreA = 0
ONCE barreB = 0
ONCE valA = 0
ONCE valB = 0
// === Ichimoku ===
tenkanPeriod = 9
kijunPeriod = 26
Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
// === Période 1 : point A (croisement baissier)
if Tenkan crosses under Kijun then
barreA = barindex
valA = Low // ← bas absolu de la bougie A
DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red")
endif
if Tenkan < Kijun and Low < valA then
barreA = barindex
valA = Low
endif
// === Période 2 : point B (croisement haussier)
if Tenkan crosses over Kijun then
barreB = barindex
valB = High // ← haut absolu de la bougie B
DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green")
// === Extensions de Fibonacci à partir de A → B
ecart = valB - valA
largeur = barreB - barreA
fib127 = valA + ecart * 1.27
fib161 = valA + ecart * 1.618
fib261 = valA + ecart * 2.618
finFib = barreB + largeur
DRAWSEGMENT(barreB, fib127, finFib, fib127) COLOURED("gray")
DRAWSEGMENT(barreB, fib161, finFib, fib161) COLOURED("gray")
DRAWSEGMENT(barreB, fib261, finFib, fib261) COLOURED("gray")
endif
if Tenkan > Kijun and High > valB then
barreB = barindex
valB = High
endif
return
Si je comprends ce que tu veux faire, verticalement c’est l’écart entre A et B pour calculer les niveaux, ça ok… mais horizontalement tu veux les tracés de où à où? A priori tu veux tracer à partir du point B des segments vers la droite, mais si tu dis que tu n’arrives pas à avoir “la largeur voulue”, alors je ne peux pas partir de la largeur telle que codée pour en déduire sa valeur, tu veux un report à droite de la largeur AB? Une largeur fixe choisie d’avance? Autre?
gbzhParticipant
Junior
ca serait une extension verticale, large de la largeur du segment entre les points a et b, placée au dessus de ceux ci.
Ok, dans ce cas je modifierais ainsi calcul et tracé des extensions. J’ai rajouté des commentaires pour mieux comprendre le rôle de chaque IF dans les calculs de valA et valB, ce qui permet aussi de mieux comprendre pourquoi je trace les extensions dans le IF de l’autre cross. A tester:
ONCE barreA = 0
ONCE barreB = 0
ONCE valA = 0
ONCE valB = 0
// === Ichimoku ===
tenkanPeriod = 9
kijunPeriod = 26
Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
// === Période 1 : point A (croisement baissier)
if Tenkan crosses under Kijun then
barreA = barindex
valA = Low // ← Initialisation bas absolu de la bougie A en début de période 1
DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red") // Tracé de B en fin de période 2 (puisqu'on est en début de période 1)
// === Extensions de Fibonacci à partir de A → B
ecart = valB - valA[1]
//largeur = barreB - barreA[1]
fib127 = valA + ecart * 1.27
fib161 = valA + ecart * 1.618
fib261 = valA + ecart * 2.618
//finFib = barreB + largeur
DRAWSEGMENT(barreA[1], fib127, barreB, fib127) COLOURED("gray")
DRAWSEGMENT(barreA[1], fib161, barreB, fib161) COLOURED("gray")
DRAWSEGMENT(barreA[1], fib261, barreB, fib261) COLOURED("gray")
endif
if Tenkan < Kijun and Low < valA then
barreA = barindex
valA = Low // ← Mise à jour bas absolu de la bougie A en cours de période 1
endif
// === Période 2 : point B (croisement haussier)
if Tenkan crosses over Kijun then
barreB = barindex
valB = High // ← Initialisation haut absolu de la bougie B en début de période 2
DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green") // Tracé de A en fin de période 1 (puisqu'on est en début de période 2)
endif
if Tenkan > Kijun and High > valB then
barreB = barindex
valB = High // ← Mise à jour bas absolu de la bougie B en cours de période 2
endif
return