bonjour a tous, j ai visionné la video jointe de Flux Charts et j ai commencé le travail pour créer l indicateur compatible chez nous. Mais je ne parviens pas a terminer. Je joins mon travail si un passionné veux aider, cordialement. https://www.youtube.com/watch?v=8XpPaTWhnLA&t=129s
// Wick to Body Ratio Trend Forecast
// Traduit et adapté pour ProRealTime par Grok (basé sur Flux Charts)
// Version 1.8.2 – 10:45 AM CEST, 11 Oct 2025 – Correction ligne 137
// PARAMÈTRES
maxMatches = 9 // Nombre max de matchs (fixe à 9 pour tester)
loopbackPeriod = 200 // Réduit pour éviter surcharge
toleranceRatio = 0.1 // Tolérance pour les matchs de ratio
forecastLength = 15 // Nombre de bougies futures à prévoir
// Variables globales
ratioActuel = 0
matchRatio0 = 0
matchRatio1 = 0
matchRatio2 = 0
matchRatio3 = 0
matchRatio4 = 0
matchRatio5 = 0
matchRatio6 = 0
matchRatio7 = 0
matchRatio8 = 0 // 9 variables
matchDebut0 = 0
matchDebut1 = 0
matchDebut2 = 0
matchDebut3 = 0
matchDebut4 = 0
matchDebut5 = 0
matchDebut6 = 0
matchDebut7 = 0
matchDebut8 = 0 // 9 variables
nombreMatches = 0
deviationMouv = 0
couleurLigne = 0 // 0 pour rouge (faible dev), 1 pour bleu (haute dev)
// CALCUL DU RATIO WICK-TO-BODY
bodyCandle = abs(Close – Open)
totalWick = (High – Low) – bodyCandle
IF bodyCandle > 0 THEN
ratioActuel = totalWick / bodyCandle
ELSE
ratioActuel = 0 // Éviter division par zéro (doji)
ENDIF
// RECHERCHE DE MATCHS HISTORIQUES (sur la dernière barre close)
IF BarIndex > loopbackPeriod THEN
nombreMatches = 0
FOR i = 1 TO loopbackPeriod DO
IF i < BarIndex THEN
bodyHist = abs(Close[i] – Open[i])
totalWickHist = (High[i] – Low[i]) – bodyHist
IF bodyHist > 0 THEN
ratioHist = totalWickHist / bodyHist
tolAdapt = toleranceRatio
IF nombreMatches < 3 AND toleranceRatio < 0.3 THEN
tolAdapt = toleranceRatio + 0.05
ENDIF
IF abs(ratioHist – ratioActuel) <= tolAdapt AND nombreMatches < maxMatches THEN
IF nombreMatches = 0 THEN
matchRatio0 = ratioHist
ELSE
IF nombreMatches = 1 THEN
matchRatio1 = ratioHist
ELSE
IF nombreMatches = 2 THEN
matchRatio2 = ratioHist
ELSE
IF nombreMatches = 3 THEN
matchRatio3 = ratioHist
ELSE
IF nombreMatches = 4 THEN
matchRatio4 = ratioHist
ELSE
IF nombreMatches = 5 THEN
matchRatio5 = ratioHist
ELSE
IF nombreMatches = 6 THEN
matchRatio6 = ratioHist
ELSE
IF nombreMatches = 7 THEN
matchRatio7 = ratioHist
ELSE
IF nombreMatches = 8 THEN
matchRatio8 = ratioHist
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF nombreMatches = 0 THEN
matchDebut0 = Close[i]
ELSE
IF nombreMatches = 1 THEN
matchDebut1 = Close[i]
ELSE
IF nombreMatches = 2 THEN
matchDebut2 = Close[i]
ELSE
IF nombreMatches = 3 THEN
matchDebut3 = Close[i]
ELSE
IF nombreMatches = 4 THEN
matchDebut4 = Close[i]
ELSE
IF nombreMatches = 5 THEN
matchDebut5 = Close[i]
ELSE
IF nombreMatches = 6 THEN
matchDebut6 = Close[i]
ELSE
IF nombreMatches = 7 THEN
matchDebut7 = Close[i]
ELSE
IF nombreMatches = 8 THEN
matchDebut8 = Close[i]
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
nombreMatches = nombreMatches + 1
ENDIF
ENDIF // Fermeture IF bodyHist > 0
ENDIF
NEXT
// Calcul de la prévision si assez de matchs
IF nombreMatches >= 3 THEN
DIM forecastValues(0 TO 14) // Taille fixe à 15 éléments (0 à 14)
FOR offset = 1 TO forecastLength DO
sommeMouvs = 0
FOR j = 0 TO nombreMatches – 1 DO
IF BarIndex – i – offset > 0 THEN
IF j = 0 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 1 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 2 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 3 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 4 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 5 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 6 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 7 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ELSE
IF j = 8 THEN
mouvement = (Close[i + offset] – Close[i]) / Close[i] * 100
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
sommeMouvs = sommeMouvs + mouvement
ENDIF
NEXT
IF nombreMatches > 0 THEN
forecastValues[offset-1] = Close + (sommeMouvs / nombreMatches) * Close / 100
ENDIF
NEXT
// Approximation simple de la déviation
deviationMouv = 0
FOR j = 0 TO nombreMatches – 1 DO
IF j = 0 THEN
mouvement = (Close[BarIndex – 1] – matchDebut0) / matchDebut0 * 100
ELSE
IF j = 1 THEN
mouvement = (Close[BarIndex – 1] – matchDebut1) / matchDebut1 * 100
ELSE
IF j = 2 THEN
mouvement = (Close[BarIndex – 1] – matchDebut2) / matchDebut2 * 100
ELSE
IF j = 3 THEN
mouvement = (Close[BarIndex – 1] – matchDebut3) / matchDebut3 * 100
ELSE
IF j = 4 THEN
mouvement = (Close[BarIndex – 1] – matchDebut4) / matchDebut4 * 100
ELSE
IF j = 5 THEN
mouvement = (Close[BarIndex – 1] – matchDebut5) / matchDebut5 * 100
ELSE
IF j = 6 THEN
mouvement = (Close[BarIndex – 1] – matchDebut6) / matchDebut6 * 100
ELSE
IF j = 7 THEN
mouvement = (Close[BarIndex – 1] – matchDebut7) / matchDebut7 * 100
ELSE
IF j = 8 THEN
mouvement = (Close[BarIndex – 1] – matchDebut8) / matchDebut8 * 100
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
deviationMouv = deviationMouv + abs(mouvement – (sommeMouvs / nombreMatches))
NEXT
IF nombreMatches > 0 THEN
deviationMouv = deviationMouv / nombreMatches
ENDIF
// Couleur : faible dev -> rouge, haute -> bleu
IF deviationMouv < 2 THEN
couleurLigne = 0 // Rouge
ELSE
couleurLigne = 1 // Bleu
ENDIF
// TRACÉ DE LA LIGNE DE PRÉVISION
FOR k = 1 TO forecastLength DO
IF Time > LastBarTime THEN
IF couleurLigne = 0 THEN
DRAWLINE(LastBarIndex + k, forecastValues[k-1], LastBarIndex + forecastLength, forecastValues[forecastLength-1]) COLOURED(RGB(255,0,0)) STYLE(line)
ELSE
DRAWLINE(LastBarIndex + k, forecastValues[k-1], LastBarIndex + forecastLength, forecastValues[forecastLength-1]) COLOURED(RGB(0,0,255)) STYLE(line)
ENDIF
ENDIF
NEXT
ENDIF // Fermeture IF nombreMatches >= 3
ENDIF // Fermeture IF BarIndex > loopbackPeriod
// Affichage du ratio actuel
RETURN ratioActuel AS “WBR Ratio”