Je viens de faire un petit script pour détecter les fanions. Je trouve qu’il fonctionne plutôt bien, même s’il retourne pas énormément de valeur. D’ailleurs si vous avez un fanion sous le coude pour tester 🙂
Qu’en pensez-vous ?
TIMEFRAME(daily)
// Paramètres
paramJoursRetourFanion = 5 // Nombre de jours à revenir en arrière pour déterminer le plus haut et bas pour voir si on est toujours dans le fanion
paramPcMargeFanion = 10 // Pourcentage de marge pour voir si une bougie rentre entre les précédentes
paramNbJoursMiniFanion = 4 // Nombre de jours minimum pour constituer le fanion
paramPcGaucheMin = 8 // %age minamale de la partie de gauche
paramVolumeMin = 200000 // Volume moyen minimum
paramMinPcImpulsion = 8 // %age minimum de la bougie d'impulsion
// Initalisation
condFanion = 1
// On parcours les jours en reculant
nJour = 1
bContinue = 1
xMoyenneVolumeFanion = 0
WHILE bContinue
// Détermine le plus haut et bas sur les x derniers jours
xPlusHautPrec = 0
xPlusBasPrec = 999999
FOR i = 1 TO paramJoursRetourFanion DO
xHautTmp = MAX(OPEN[nJour + i], CLOSE[nJour + i])
xBasTmp = MIN(OPEN[nJour + i], CLOSE[nJour + i])
IF (xHautTmp > xPlusHautPrec) THEN
xPlusHautPrec = xHautTmp
ENDIF
IF (xBasTmp < xPlusBasPrec) THEN
xPlusBasPrec = xBasTmp
ENDIF
NEXT
// Si pas assez de données, on affiche pas
IF (xPlusBasPrec = 999999 OR xPlusHautPrec = 0) THEN
condFanion = 0
BREAK
ENDIF
// On applique des marges
xPlusHautPrec = xPlusHautPrec * (1 + (paramPcMargeFanion / 100))
xPlusBasPrec = xPlusBasPrec * (1 - (paramPcMargeFanion / 100))
// On teste si notre bougie du jour entre donc dans ces plus et plus bas
xHaut = MAX(OPEN[nJour], CLOSE[nJour])
xBas = MIN(OPEN[nJour], CLOSE[nJour])
// Si la bougie rentre dans les précédentes
IF (xHaut > xPlusHautPrec OR xBas < xPlusBasPrec) THEN
BREAK
ENDIF
xMoyenneVolumeFanion = xMoyenneVolumeFanion + VOLUME[nJour]
IF (nJour > 20) THEN
condFanion = 0
BREAK
ENDIF
nJour = nJour + 1
WEND
xMoyenneVolumeFanion = xMoyenneVolumeFanion / nJour
// nJour est le n° de jour (en arrière) qui finit le mât
// Si trop peu de jours pour arriver au mât c'est un peu cours comme fanion, on ne prend pas
IF (nJour <= paramNbJoursMiniFanion) THEN
condFanion = 0
ENDIF
// Si toujours OK
IF (condFanion) THEN
// On regarde maintenant que la partie gauche du fanion est bien plus grande que celle de droite
xPcGauche = 0
xAmplGaucheMax = 0
xAmplGaucheMin = 999999
xAmplDroiteMax = 0
xAmplDroiteMin = 999999
nJourDecoupeFanion = ROUND(nJour / 3)
FOR i = 0 TO nJourDecoupeFanion - 1
// Gauche
xHaut = MAX(OPEN[nJour - i], CLOSE[nJour - i])
xBas = MIN(OPEN[nJour - i], CLOSE[nJour - i])
IF (xHaut > xAmplGaucheMax) THEN
xAmplGaucheMax = xHaut
ENDIF
IF (xBas < xAmplGaucheMin) THEN
xAmplGaucheMin = xBas
ENDIF
xPcGauche = xPcGauche + (xHaut * 100 / xBas)
// Droite
xHaut = MAX(OPEN[1 + i], CLOSE[1 + i])
xBas = MIN(OPEN[1 + i], CLOSE[1 + i])
IF (xHaut > xAmplDroiteMax) THEN
xAmplDroiteMax = xHaut
ENDIF
IF (xBas < xAmplDroiteMin) THEN
xAmplDroiteMin = xBas
ENDIF
NEXT
xAmplitudeGauche = xAmplGaucheMax - xAmplGaucheMin
xAmplitudeDroite = xAmplDroiteMax - xAmplDroiteMin
xPcGauche = xPcGauche / nJourDecoupeFanion
xPcGauche = ((xPcGauche / 100) - 1) * 100
// Si pourcentage de gauche est de x% passe
IF (xPcGauche < paramPcGaucheMin) THEN
condFanion = 0
ENDIF
// L'amplitude de droite doit faire au moins 1/3 de celle de gauche
IF (xAmplitudeGauche / 3 < xAmplitudeDroite) THEN
condFanion = 0
ENDIF
ENDIF
// Si toujours OK
IF (condFanion) THEN
// On va ensuite regarder le mât complet
// On regarde le plus bas sur les x derniers jours (x = moitié du fanion)
nJourMat = ROUND(nJour / 2)
xValMin = 999999
nJourMin = 0
nNbTmp = 0
xMoyenneVolumeMat = 0
FOR i = 0 TO nJourMat - 1
IF (OPEN[nJour + i] < xValMin) THEN
xValMin = OPEN[nJour + i]
nJourMin = i
nNbTmp = nNbTmp + 1
xMoyenneVolumeMat = xMoyenneVolumeMat + VOLUME[nJour + i]
ENDIF
NEXT
xMoyenneVolumeMat = xMoyenneVolumeMat / nNbTmp
// Le mat doit faire au moins 3 jours
IF (nJourMin <= 2) THEN
condFanion = 0
ENDIF
// Le mat doit faire au moins 1.5x plus que l'amplitude de gauche
xHauteurMat = MAX(OPEN[nJour], CLOSE[nJour]) - xValMin
IF ((xHauteurMat / xAmplitudeGauche) < 1.5) THEN
condFanion = 0
ENDIF
ENDIF
// Si toujours OK
IF (condFanion) THEN
// Enfin on cherche un bougie verte d'impulsion
IF Variation < paramMinPcImpulsion THEN
condFanion = 0
ENDIF
// Volumes mât doit être > volume moyen fanion
IF (xMoyenneVolumeMat < xMoyenneVolumeFanion) THEN
condFanion = 0
ENDIF
// Volume impulsion doit ête supérieur à la moyenne des deux jours précédents ET supérieur au volume MIN
xVolTmp = (Volume[1] + Volume[2]) / 2
IF (volume < xVolTmp OR volume < paramVolumeMin) THEN
condFanion = 0
ENDIF
ENDIF
SCREENER[condFanion](xHauteurMat)
Désolé pour l’indentation, mais le copier-coller ne fonctionne pas bien on dirait.
Merci beaucoup pour le partage ! Il n’y a pas d’indentation automatique sur le forum pour info.
Il y a peu/pas de résultat actuellement car les marchés ne s’y prêtent pas trop. A voir donc quand ça ira mieux.