hello voici le script
Pine Script®
// @version= 6
indicateur ( “Offre et demande MTF x3 (TF d’entrée)” , superposition = vrai , nombre_max_de_boîtes = 300 )
//──────────────────────────────
// CONSTANTES
//──────────────────────────────
OFFRE = 1
DEMANDE = -1
//──────────────────────────────
// PARAMÈTRES COMMUNS
//──────────────────────────────
groupe_commun = “Paramètres communs”
leftBars = input.int ( 9 , “Swing left bars” , minval = 2 , group = group_common )
rightBars = input.int ( 9 , “Faire pivoter les barres vers la droite” , minval = 2 , group = group_common )
minZoneSize = input.float ( 0.01 , “Taille minimale de la zone %” , minval = 0.01 , step = 0.01 , group = group_common )
maxSupplyZones = input.int ( 1 , “Max Supply Zones” , minval = 1 , group = group_common )
maxDemandZones = input.int ( 1 , “Zones de demande maximale” , minval = 1 , group = group_common )
//──────────────────────────────
// FONCTIONS
//──────────────────────────────
f_zoneSizePct ( haut , bas ) =>
( haut – bot ) / (( haut + bot ) / 2 ) * 100
f_drawBox ( leftTime , top , bot , fillCol , borderCol , borderW ) =>
boîte.nouvelle (
gauche = tempsgauche ,
droit = temps ,
haut = haut ,
bas = bot ,
xloc = xloc.bar_time ,
couleur_fond = remplirColonne ,
couleur_bordure = couleur_bordure ,
largeur_bordure = largeur_bordure
)
f_updateBoxes ( arr , zoneType ) =>
si array.size ( arr ) > 0
b = tableau.last ( arr )
boîte.set_right ( b , temps )
si ( zoneType == SUPPLY et close > box.get_top ( b )) ou
( zoneType == DEMANDE et close
[ ph , phTime ] = requête.sécurité (
syminfo.tickerid ,
tf ,
[ ta.pivothigh ( haut , barres de gauche , barres de droite ) , temps [ barres de droite ]]
)
[ pl , plTime ] = requête.sécurité (
syminfo.tickerid ,
tf ,
[ ta.pivotlow ( low , leftBars , rightBars ) , heure [ rightBars ]
)
si showS et non na ( ph )
haut = ph
bot = math.max (
requête.sécurité ( syminfo.tickerid , tf , ouvrir [ rightBars ]) ,
requête.sécurité ( syminfo.tickerid , tf , fermer [ rightBars ])
)
si f_zoneSizePct ( haut , bas ) >= minZoneSize
b = f_drawBox ( phTime , top , bot , sFill , sBorder , bw )
tableau.push ( sArr , b )
tant que la taille du tableau ( sArr ) > maxSupplyZones
boîte.supprimer ( tableau.décalage ( sArr ))
si showD et non sur ( pl )
bot = pl
haut = math.min (
requête.sécurité ( syminfo.tickerid , tf , ouvrir [ rightBars ]) ,
requête.sécurité ( syminfo.tickerid , tf , fermer [ rightBars ])
)
si f_zoneSizePct ( haut , bas ) >= minZoneSize
b = f_drawBox ( plTime , top , bot , dFill , dBorder , bw )
tableau.push ( dArr , b )
tant que la taille du tableau ( dArr ) > maxDemandZones
boîte.supprimer ( tableau.décalage ( dArr ))
f_updateBoxes ( sArr , SUPPLY )
f_updateBoxes ( dArr , DEMANDE )
//──────────────────────────────
// EXÉCUTION
//──────────────────────────────
f_processTF ( tf1 , showS1 , showD1 , sFill1 , sBorder1 , dFill1 , dBorder1 , bw1 , supply1 , demand1 )
f_processTF ( tf2 , showS2 , showD2 , sFill2 , sBorder2 , dFill2 , dBorder2 , bw2 , supply2 , demand2 )
f_processTF ( tf3 , showS3 , showD3 , sFill3 , sBorder3 , dFill3 , dBorder3 , bw3 , supply3 , demand3 )