Bonjour,
J’ai écrit ce code pour dessiner des lignes horizontales sur les principaux supports plats / résistances d’Ichimoku Kijun et SSPB. Malheureusement, le code est très lent…
Comment vous y prendriez-vous pour detecter des plats ? Pro real code dispose-t-il d’une fonction pour calculer une dérivée ?
Merci d’avance
DefParam DrawOnLastBarOnly = true
//Tenkan = (highest[TenkPeriod](high)+lowest[TenkPeriod](low))/2
Kijun = (highest[KijPeriod](high)+lowest[KijPeriod](low))/2
//SpanA = (tenkan[KijPeriod]+kijun[KijPeriod])/2
//SSpanB = (highest[SSpanBPeriod](high[KijPeriod])+lowest[SSpanBPeriod](low[KijPeriod]))/2
//SSpanAFuture = (tenkan+kijun)/2
SSpanBFuture = (highest[SSpanBPeriod](high)+lowest[SSpanBPeriod](low))/2
//Chikou = close
MemoryKJ=-1
for i = 0 to NdOfCandlesBefore do
AlignedKJ=1
for j = 1 to durationCriteria do
if AlignedKJ=1 and MemoryKJ <> Kijun[i+j] and (Kijun[i+j] <= (1+VertTolerance)*Kijun[i] and Kijun[i+j] >= (1-VertTolerance)*Kijun[i]) then
AlignedKJ=1
else
AlignedKJ=0
endif
next
if AlignedKJ=1 then
drawhline(Kijun[i]) coloured(0,153,0)
MemoryKJ=Kijun[i]
i=i+durationCriteria-1
//BLEU 64,192,255
endif
next
MemorySSB=-1
for i = 0 to NdOfCandlesBefore+26 do
AlignedSSB=1
for j = 1 to durationCriteria do
if AlignedSSB=1 and MemorySSB <> SSpanBFuture[i+j] and (SSpanBFuture[i+j] <= (1+VertTolerance)*SSpanBFuture[i] and SSpanBFuture[i+j] >= (1-VertTolerance)*SSpanBFuture[i]) then
AlignedSSB=1
else
AlignedSSB=0
endif
next
if AlignedSSB=1 then
drawhline(SSpanBFuture[i]) coloured(255,51,51)
MemorySSB=SSpanBFuture[i]
i=i+durationCriteria-1
//BLEU 64,192,255
endif
next
return
Les boucles imbriqués dans l’historique ont cet effet. C’est beaucoup plus rapide avec les tableaux de données en version 11.
Avant d’aller plus loin, ce sujet m’en rappelle d’autres, sur la détection des plats ichimoku :
Paliers Ichimoku
Plat SSB et plat Kijun
Si tu pouvais m’indiquer en terme logique ce que tu considères êtres un support / resistance selon l’indicateur Ichimoku, alors je pourrai le coder, merci.
Merci Nicolas
Perso je souhaiterais detecter les plat de Kijun et SSpanB dont le formules sont les suivantes:
- Kijun = (highest[26](high)+lowest[26](low))/2
- SSpanB = (highest[52](high)+lowest[52](low))/2
On pourrait par ex détecter les supports/résistances plats (donc sur Kijun et SSpanB), d’au moins 5 périodes , parfaitement alignées ou à +/- 0.0001% par ex. (le nombre de périodes et la tolérance pourraient être des variables d’entrée)
Est-ce suffisamment clair ?
Merci.
Bien compris, voilà le code qui te permet de détecter les plats Kijun et SspanB et les tracer. J’ai ajouté les critères modifiables en tête de code comme tu le voulais.
flatPeriod = 5
maxPercent = 0.0001 //percent difference
// ----------
maxPercent = maxPercent / 100
Kijun = (highest[26](high)+lowest[26](low))/2
isKijunFlat = summation[flatPeriod](kijun=kijun[1] or (kijun/kijun[1]<=1+maxPercent and kijun/kijun[1]>=1-maxPercent))=flatPeriod
if isKijunFlat then
drawhline(kijun) coloured(200,200,0)
endif
SSpanB = (highest[52](high)+lowest[52](low))/2
isSSpanBFlat = summation[flatPeriod](sspanb=sspanb[1] or (sspanb/sspanb[1]<=1+maxPercent and sspanb/sspanb[1]>=1-maxPercent))=flatPeriod
if isSSpanBFlat then
drawhline(sspanb) coloured(0,200,200)
endif
return
Les plats Kijun sont jaune orangés et les plats SSpanB sont en bleu ciel.
EXCELLENT !
Thank you very much Nicolas, the time needed to compute is now extremely reduced… the difference is impressive.
I forgot 1 point : Is it possible to limit the analysis to the last 200 periods for example ? (a lot of lines are drawn, I guess it goes far away in the past)
Thanks again !!
Oui pardon… donc en Français…
Merci beaucoup, la différence de temps de calcul est impressionnante !
Est-il possible de limiter les calcul sur les 200 dernières perdioes par ex ? j’ai l’impession qu’il remonte loin (le résultat comprend a beaucoup de lignes)
Merci encore Nicolas
C’est plus rapide car il n’y a aucune boucle ! On teste à la volée en lisant l’historique, puis le temps réel, les conditions pour trouver tes plats.
Pour limiter les calculs à X bougies seulement, tu peux ajouter cette ligne en tête de code :
defparam calculateonlastbars=200
Franchement génial merci beaucoup Nicolas. Le code est beaucoup plus élégant également…
Dernière question (normalement) : y a-t-il un moyen à ce que les lignes horizontales tracees avec drawhline soient représentées sur toutes les unités de temps ?
Merci.
On peut le faire sous v11 uniquement avec le support MTF des indicateurs.
Par contre, puisque l’indicateur Ichimoku n’est que des plus hauts / plus bas sur les x dernières périodes (pour schématiser), tu peux multiplier les périodes pour obtenir les seuils d’autres UT.
OK super compris. Merci encore Nicolas. Super aide.