Top !
Top !
Code : #
defparam calculateonlastbars = 500 // à commenter pour avoir historique
Defparam DrawOnLastBarOnly = true // à commenter pour avoir historique
setclosehour = 220000
setopenhour = 153000
setoffset = 10
//vertical offset to draw text corectly over horizontal LINE
voffset = setoffset* pipsize
//Calculation min and max full day (between SetOpenHour and SetCloseHour)
//reset values each days
If IntraDayBarIndex = 0 then
HighestH = 0
LowestL = 99999
endif
//loop to test highest and lowest at each candle during open hours
if time > SetOpenHour and time <= SetCloseHour then
HighestH = max(high,HighestH)
LowestL = min(low,LowestL)
endif
//to keep the highest and lowest of the open hours
IF time = SetCloseHour THEN
lasthighestH = HighestH
lastlowestL = LowestL
ENDIF
//when new day start (same open hours), live highest and lowest
if time > SetOpenHour and time <= SetCloseHour then
actualdayhighest = max(high,HighestH)
actualdaylowest = min(low,LowestL)
endif
//actual high and low
Actualhigh = High
Actuallow = Low
//variation max-min for the day before
varDayBefore = lasthighestH - lastlowestL
//lines calculation and drawing
Line50 = actualDaylowest + varDayBefore/2
Diffline50 = Line50 - Actualhigh //difference actual high and line price
DRAWRAY(barindex-10, Line50 , Line50 , Line50 ) coloured(0,255,255) STYLE(line,1)
DRAWTEXT("#Diffline50# Line50 #Line50#", barindex-5, Line50+voffset ) coloured(0,255,255)
LinePos1 = actualDaylowest + varDayBefore + 8
Difflinepos1 = LinePos1 - Actualhigh //difference actual high and line price
DRAWRAY(barindex-10, LinePos1 , LinePos1 , LinePos1 ) coloured(0,255,255) STYLE(line,1)
DRAWTEXT("#Difflinepos1# Line+1 #LinePos1#", barindex-5, LinePos1+voffset ) coloured(0,255,255)
LinePos2 = actualDaylowest + varDayBefore + varDayBefore/2 + 8
Difflinepos2 = LinePos2 - Actualhigh //difference actual high and line price
DRAWRAY(barindex-10, LinePos2 , LinePos2 , LinePos2 ) coloured(0,255,255) STYLE(DOTTEDLINE,1)
DRAWTEXT("#Difflinepos2# Line+2 #LinePos2#", barindex-5, LinePos2+voffset ) coloured(0,255,255)
LineNeg1 = actualdayhighest - varDayBefore - 8
Difflineneg1 = LineNeg1 - Actuallow //difference actual low and line price
DRAWRAY(barindex-10, Lineneg1 , LineNeg1 , LineNeg1 ) coloured(0,255,255) STYLE(line,1)
DRAWTEXT("#Difflineneg1# Line-1 #LineNeg1#", barindex-5, LineNeg1+voffset ) coloured(0,255,255)
LineNeg2 = actualdayhighest - varDayBefore - varDayBefore/2 - 8
Difflineneg2 = LineNeg2 - Actuallow //difference actual low and line price
DRAWRAY(barindex-10, Lineneg2 , LineNeg2 , LineNeg2 ) coloured(0,255,255) STYLE(DOTTEDLINE ,1)
DRAWTEXT("#Difflineneg2# Line-2 #LineNeg2#", barindex-5, LineNeg2+voffset ) coloured(0,255,255)
//pour avoir l'historique enlever les commentaire après "return" et commenter les deparam du haut
return //Line50 , LinePos1 , LinePos2 , LineNeg1 , LineNeg2
Code : #
// =============================================
// Amplitude veille et report en live
// =============================================
// https://www.andlil.com/forum/viewtopic.php?f=65&t=62740&start=0
// Andlil Community Sharing
// Version: 2026-02-08
// Platform: ProRealTime
// Timeframe : 1, 2, 3, 5, 10, 15, 30 minutes
// =============================================
// === PARAMETERS ===
DEFPARAM CALCULATEONLASTBARS = 2500
DEFPARAM DRAWONLASTBARONLY = true
ONCE SetOpenHour = 153000
ONCE SetCloseHour = 220000
ONCE YOFFSET = 20 * POINTSIZE // vertical offset to draw text correctly over horizontal LINE
ONCE IsMoreThanOneDay = 0 // True=1,False=0 Si les barres couvrent plus d'une journée, alors la variable passe à 1
ONCE TodayHighestH = 0 // Valeur Initiale
ONCE TodayLowestL = 99999 // Valeur Initiale - Fonction MIN() nécessite une valeur supérieur au cours.
ONCE YesterdayHighestH = 0 // Valeur Initiale
ONCE YesterdayLowestL = 0 // Valeur Initiale
ONCE varDayBefore = 0 // Valeur Initiale
ONCE IsFirstExecutionOfOpenMarket = 1
ONCE IsOpenMarketCorrectlyExecuted = 0
ONCE YesterdayCloseMarketIndex = -1
ONCE TodayCloseMarketIndex = -1
// Is regular trading hours
IF time > SetOpenHour AND time <= SetCloseHour THEN
// Attention, pile sur la seconde de cloture, PRT prend les valeurs de la bougie précédante.
// Exemple sur UT 5min, à 15h30m00s il prend la bougie de 15h25-15h30 pour les valeurs high/low/close/open.
// donc pour avoir la bougie de 15h30 on fait time > SetOpenHour (et pas = SetOpenHour)
IsMarketOpenHours = 1
ELSE
IsMarketOpenHours = 0
ENDIF
// === NOUVELLE JOURNEE ===
// On sauvegarde les valeurs de la veille
IF IntraDayBarIndex = 0 then
IF IsOpenMarketCorrectlyExecuted THEN
// Sauvegarde l'index de cloture pour afficher l'amplitude de la veille à cette endroit si le marché est ouvert
YesterdayCloseMarketIndex = TodayCloseMarketIndex
// On sauvegarde l'amplitude comme amplitude de la veille
YesterdayHighestH = TodayHighestH
YesterdayLowestL = TodayLowestL
// On calcule la valeur de variation de la veille
YesterdayVariation = YesterdayHighestH - YesterdayLowestL
ENDIF
// Reset values each days
IsFirstExecutionOfOpenMarket = 1 // Reset à 1 car la prochaine exécution ci-dessous sera sur la 1er bougie d'ouverture.
ENDIF
// === OUVERTURE DU MARCHE ===
// Loop to test highest and lowest at each candle during open hours
IF IsMarketOpenHours THEN
// === Debut d'une nouvelle journée, Bougie d'ouverture ===
// When new day start (same open hours)
//IsFirstOpenMarketCandle = SetOpenHour >= OpenTime AND CurrentTime <= SetOpenHour+(GetTimeFrame*60*100)
IsFirstOpenMarketCandle = (OpenTime = SetOpenHour)
IF IsFirstExecutionOfOpenMarket = 1 AND IsFirstOpenMarketCandle = 1 THEN
IsFirstExecutionOfOpenMarket = 0
// On reset la valeur +haut/+bas de la nouvelle journée
TodayHighestH = high
TodayLowestL = low
ENDIF
// === Fin de la journée, après la cloture ===
IF Time = SetCloseHour THEN
// Sauvegarde l'index de cloture actuelle pour afficher l'amplitude de la journée à cette endroit si le marché est fermé
TodayCloseMarketIndex = BarIndex
IF NOT IsFirstExecutionOfOpenMarket THEN
IsOpenMarketCorrectlyExecuted = 1 // Toutes les bougies de la journée ont été vues
ELSE
// Si la journée se termine sans avoir vu la bougie d'ouverture, alors nous n'avons pas analysé toutes les bougies de la journée.
// Dans ce cas on a une erreur d'exécution sur la journée par manque de bougies.
IsOpenMarketCorrectlyExecuted = 0
ENDIF
ENDIF
// === Pendant la journée ===
// Market Open Hours : On re-calcule à chaque bougie les plus hauts/bas de la journée
TodayHighestH = max(high,TodayHighestH)
TodayLowestL = min(low,TodayLowestL)
ENDIF
// === Vérification des erreurs avant affichage ===
// Si le calcule n'est pas possible à cause de l'unitée de temps, on affiche un avertissement :
IF IsLastBarUpdate AND ((1800 / GetTimeFrame) <> ROUND(1800 / GetTimeFrame) OR GetTimeFrame < 60) THEN // 1800 secondes = 30 minutes
//IF IsLastBarUpdate AND (1800 MOD GetTimeFrame) <> 0 THEN // 1800 secondes = 30 minutes
// /!\ BUG en replay : Le Modulo engendre une erreur d'exécution.
// Pour éviter les erreurs, les calcules doivent se faire sur des bougies de 30 minutes maximum
// L'unitée de temps doit être un diviseur de 30 minutes d'où le Modulo du IF
DRAWTEXT("Unitée de temps non compatible\nUtilisez 1,2,3,5,10,15,30 minutes.", BarIndex , YOFFSET*2 + high, Serif, Bold , 16) coloured("RED")
// Si le calcule n'est pas possible à cause des variables non calculées, on affiche un avertissement :
ELSIF IsLastBarUpdate AND (YesterdayVariation = 0 OR YesterdayCloseMarketIndex = -1) THEN
LinePos1 = TodayLowestL + YesterdayVariation + 8
Difflinepos1 = LinePos1 - high //difference actual high and line price
DRAWTEXT("Pas assez de bougies pour calculer l'amplitude de la veille\nVeuillez augmenter le nombre de bougies affichées", BarIndex , YOFFSET*2 + high, Serif, Bold , 16) coloured("RED")
// Les variables sont OK, on exécute le calcule et l'affichage :
ELSIF IsLastBarUpdate THEN
//YOFFSET = AverageTrueRange[14]
// === Affichage de l'Amplitude de la veille sur la bougie de cloture du marché ===
IF IsMarketOpenHours THEN
// Affichage de l'amplitude de la veille
DRAWTEXT("+haut= #YesterdayHighestH#\n+bas= #YesterdayLowestL#\nAmplitude=#YesterdayVariation#", YesterdayCloseMarketIndex, YOFFSET*5 + YesterdayHighestH) COLOURED(255,0,255)
ELSE
// Affichage de l'amplitude de la veille
DRAWTEXT("+haut= #YesterdayHighestH#\n+bas= #YesterdayLowestL#\nAmplitude=#YesterdayVariation#", YesterdayCloseMarketIndex, YOFFSET*5 + YesterdayHighestH) COLOURED(255,0,255)
// Affichage de l'amplitude d'aujourd'hui
IF TodayCloseMarketIndex <> YesterdayCloseMarketIndex THEN
TodayVariation = TodayHighestH - TodayLowestL
DRAWTEXT("+haut= #TodayHighestH#\n+bas= #TodayLowestL#\nAmplitude=#TodayVariation#", TodayCloseMarketIndex, YOFFSET*5 + High ) COLOURED(255,0,255)
ENDIF
ENDIF
// === Calcule et Affichage des lignes ===
IF NOT IsMarketOpenHours AND (TodayCloseMarketIndex = YesterdayCloseMarketIndex) THEN
// Si c'est le matin avant l'ouverture, on n'affiche rien
ELSE // Si c'est le soir après la fermeture ou lorsque le marché est ouvert, on affiche les lignes
// Lines calculation and drawing
YesterdayVariationRounded = ROUND(YesterdayVariation) // Pas de décimale, uniquement des entiers arrondis pour le calcule des lignes
LinePos1 = TodayLowestL + YesterdayVariationRounded + 8
LinePos1 = ROUND(LinePos1) // La ligne n'a pas de décimal
Difflinepos1 = LinePos1 - high //difference actual high and line price
DRAWRAY(barindex-10, LinePos1 , LinePos1 , LinePos1 ) coloured(0,0,255) STYLE(line,1)
DRAWTEXT("Line+1 #LinePos1#", barindex-5, LinePos1+YOFFSET ) coloured(0,0,255)
LinePos2 = TodayLowestL + YesterdayVariationRounded*1.5 + 8
LinePos2 = ROUND(LinePos2) // La ligne n'a pas de décimale
Difflinepos2 = LinePos2 - high //difference actual high and line price
DRAWRAY(barindex-10, LinePos2 , LinePos2 , LinePos2 ) coloured(0,0,255) STYLE(DOTTEDLINE,1)
DRAWTEXT("Line+2 #LinePos2#", barindex-5, LinePos2+YOFFSET ) coloured(0,0,255)
LineNeg1 = TodayHighestH - YesterdayVariationRounded - 8
LineNeg1 = ROUND(LineNeg1) // La ligne n'a pas de décimale
Difflineneg1 = LineNeg1 - low //difference actual low and line price
DRAWRAY(barindex-10, Lineneg1 , LineNeg1 , LineNeg1 ) coloured(0,0,255) STYLE(line,1)
DRAWTEXT("Line-1 #LineNeg1#", barindex-5, LineNeg1+YOFFSET ) coloured(0,0,255)
LineNeg2 = TodayHighestH - YesterdayVariationRounded*1.5 - 8
LineNeg2 = ROUND(LineNeg2) // La ligne n'a pas de décimale
Difflineneg2 = LineNeg2 - low //difference actual low and line price
DRAWRAY(barindex-10, Lineneg2 , LineNeg2 , LineNeg2 ) coloured(0,0,255) STYLE(DOTTEDLINE ,1)
DRAWTEXT("Line-2 #LineNeg2#", barindex-5, LineNeg2+YOFFSET ) coloured(0,0,255)
ENDIF
ENDIF
// === OUTPUT ===
RETURN // YesterdayVariation