Bonjour,
j’essaie de programmer un indicateur repérant les franchissements de DonInf en les conditionnant à un franchissement de DonSup antérieur. Je l’ai écrit ainsi:
REM : franchissement du doninf par les bougies [0] ou [1] en configuration de retournement haussier
IF open[1]>=close[1]+close/5000 AND close>=open+close/5000 AND close>=open[1]+close/5000 AND ((low[1]-close/10000<=min(low[2],min(low[3],min(low[4],min(low[5],min(low[6],min (low[7],min(low[8],low[9]))))))) AND high[1]>=min(low[2],min(low[3],min(low[4],min(low[5],min(low[6],min (low[7],min(low[8],low[9])))))))) OR (low-close/10000<=DonchianChannelDown[8] AND high>=DonchianChannelDown[8])) AND low[16]-close/10000<=low[8] AND low[15]-close/10000<=low[7] AND low[14]-close/10000<=low[6] AND low[13]-close/10000<=low[5] AND low[12]-close/10000<=low[4] AND low[11]-close/10000<=low[3] AND low[10]-close/10000<=low[2] AND min(low[2],min(low[3],min(low[4],min(low[5],min(low[6],min(low[7],min(low[8],low[9])))))))+close/10000>=min(low[9],min(low[10],min(low[11],min(low[12],min(low[13],min(low[14],min(low[15],low[16]))))))) THEN
REM on teste à partir de la bougie [2]
FOR n=2 to n=30 DO
REM cas1: si on est en franchissement du doninf on passe à la bougie précédente
IF low[n]-close/5000<=min(low[n-1],min(low[n-2],min(low[n-3],min(low[n-4],min(low[n-5],min(low[n-6],min(low[n-7],low[n-8]))))))) THEN
CONTINUE
REM cas2: si on est strictement dans le canal…
ELSIF
low[n]>min(low[n-1],min(low[n-2],min(low[n-3],min(low[n-4],min(low[n-5],min(low[n-6],min(low[n-7],low[n-8]))))))) AND high[n]+close/5000<max(high[n-1],max(high[n-2],max(high[n-3],max(high[n-4],max(high[n-5],max(high[n-6],max(high[n-7],high[n-8]))))))) THEN
REM cas 2a: alors si la bougie précédente est en franchissement du doninf on s’arrête et result=0
IF low[n-1]-close/5000<=min(low[n-2],min(low[n-3],min(low[n-4],min(low[n-5],min(low[n-6],min(low[n-7],min(low[n-8],low[n-9]))))))) THEN
result=0
BREAK
REM cas 2b: sinon on continue
ELSIF low[n-1]-close/5000>min(low[n-2],min(low[n-3],min(low[n-4],min(low[n-5],min(low[n-6],min(low[n-7],min(low[n-8],low[n-9]))))))) THEN
CONTINUE
ENDIF
REM cas3: si on est sous le doninf result=0 et on s’arrête
ELSIF
high[n]<=min(low[n-1],min(low[n-2],min(low[n-3],min(low[n-4],min(low[n-5],min(low[n-6],min(low[n-7],low[n-8]))))))) THEN
RESULT=0
BREAK
REM cas 4: si on touche le donsup result=5 et on s’arrête
ELSIF
high[n]+close/5000>=max(high[n-1],max(high[n-2],max(high[n-3],max(high[n-4],max(high[n-5],max(high[n-6],max(high[n-7],high[n-8]))))))) THEN
RESULT=5
BREAK
ENDIF
NEXT
ENDIF
RETURN result COLOURED ("orange")
La plateforme l’accepte mais ne me donne aucun résultat positif (codé ici 5) alors que si je teste sur un cas précis de manière simple (franchissement de DonInf en [1] et franchissement de DonSup en [9] par ex.) ça marche. J’avoue que j’ai du mal avec la syntaxe des IF emboîtés et surtout des FOR TO DO CONTINUE BREAK NEXT.
Une âme charitable pour m’aider à repérer le problème ? Merci !