j'essaye prt après avoir fais mes indicateurs sur MT4,MT5,PineScript.
J'avais besoin de l'indicateur pour afficher les niveaux symboliques et je suis passé sur le Gold, boum!, un niveau plus bas que 0 a pas été prévu dans le code. J'ai seulement ajouté les ifs qui conviennent. Je lui ai ajouté une optimisation pour aller chercher que les niveaux des 200 dernières barres quand il se lance pour la première fois (ensuite c'est dynamique).
Voici le code et le fichier .tif pour seulement l'importer.
Spoiler:
Code : #
DEFPARAM CALCULATEONLASTBARS = 200
// --- settings ProRealTime
// active1000=1
// active750=1
// active500=1
// active250=1
// active100=1
// active50=1
// --- end of settings ProRealTime
// -----------------------------------------------------------------------------
// Comments
// -----------------------------------------------------------------------------
// 50
// 100
// 250
// 500
// 750
// 1000
// -----------------------------------------------------------------------------
// Main
// -----------------------------------------------------------------------------
//unset( $ArrayNiv )
IF intradaybarindex=0 THEN
// 1000,250,500,750
symb=1000
base=floor(DOpen(0)/symb)
FOR i = -3 TO 3 DO
// 1000
niv=base*symb+i*symb
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active1000 THEN
DRAWHLINE(niv) COLOURED ("black") STYLE(DOTTEDLINE,2)
$ArrayNiv[niv]=1
ENDIF
ENDIF
// 250
niv=base*symb+i*symb+250
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active250 THEN
DRAWHLINE(niv) COLOURED ("orange") STYLE(DOTTEDLINE,1)
$ArrayNiv[niv]=1
ENDIF
ENDIF
// 500
niv=base*symb+i*symb+500
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active500 THEN
DRAWHLINE(niv)COLOURED ("orange") STYLE(DOTTEDLINE,1)
$ArrayNiv[niv]=1
ENDIF
ENDIF
// 750
niv=base*symb+i*symb+750
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active750 THEN
DRAWHLINE(niv) COLOURED ("orangeRed") STYLE(DOTTEDLINE,1)
$ArrayNiv[niv]=1
ENDIF
ENDIF
NEXT
// 100,50
symb=100
base=floor(DOpen(0)/symb)
FOR i = -7 TO 7 DO
// 100
niv=base*symb+i*symb
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active100 THEN
DRAWHLINE(niv) COLOURED ("grey") STYLE(DOTTEDLINE,1)
$ArrayNiv[niv]=1
ENDIF
ENDIF
// 50
niv=base*symb+i*symb+50
IF niv >= 0 THEN
IF NOT ISSET($ArrayNiv[niv]) AND active50 THEN
DRAWHLINE(niv) COLOURED ("grey") STYLE(DOTTEDLINE,1)
$ArrayNiv[niv]=1
ENDIF
ENDIF
NEXT
ENDIF
RETURN
// -----------------------------------------------------------------------------
// Annexes
// -----------------------------------------------------------------------------
// https://www.andlil.com/forum/indicateur-prt-pour-afficher-tous-les-niveaux-symboliques-t39441-30.html
Maintenant les niveaux fonctionnent aussi pour les pairs, il va s'adapter grâce à un merveilleux logarithme.
Par exemple pour le nasdaq qui est dans les 20000, ou le SP500 qui est dans les 6000 et EURUSD qui est dans les 1.
Voici l'indicateur à importer, le code est lisible.
DEFPARAM CALCULATEONLASTBARS = 200
//defparam drawonlastbaronly = true
// --- settings ProRealTime
// active1000=1
// active750=1
// active500=1
// active250=1
// active100=1
// active50=1
// --- end of settings ProRealTime
// -----------------------------------------------------------------------------
// Comments
// -----------------------------------------------------------------------------
// 50
// 100
// 250
// 500
// 750
// 1000
// -----------------------------------------------------------------------------
// Main
// -----------------------------------------------------------------------------
//unset( $ArrayNiv )
IF intradaybarindex=0 THEN
// nombre de zeros
n=floor(Log(DOpen(0))/Log(10))
// 1000,250,500,750
symb=Pow(10, n-1)
base=floor(DOpen(0)/symb)*symb
FOR i = -3 TO 3 DO
// 1000
niv=base+i*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active1000 THEN
DRAWHLINE(niv) COLOURED ("black") STYLE(DOTTEDLINE,2)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
// 250
niv=base + (i+0.25)*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active250 THEN
DRAWHLINE(niv) COLOURED ("orange") STYLE(DOTTEDLINE,1)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
// 500
niv=base + (i + 0.5)*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active500 THEN
DRAWHLINE(niv)COLOURED ("orange") STYLE(DOTTEDLINE,1)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
// 750
niv=base + (i + 0.75)*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active750 THEN
DRAWHLINE(niv) COLOURED ("orangeRed") STYLE(DOTTEDLINE,1)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
NEXT
// 100,50
symb = symb / 10
base=floor(DOpen(0)/symb) * symb
FOR i = -7 TO 7 DO
// 100
niv=base+i*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active100 THEN
DRAWHLINE(niv) COLOURED ("grey") STYLE(DOTTEDLINE,1)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
// 50
niv=base+(i+0.5)*symb
IF niv >= 0 THEN
nivIdx = niv
IF floor(niv) <> niv THEN
nivIdx = niv * 1000
ENDIF
IF NOT ISSET($ArrayNiv[nivIdx]) AND active50 THEN
DRAWHLINE(niv) COLOURED ("grey") STYLE(DOTTEDLINE,1)
$ArrayNiv[nivIdx]=1
ENDIF
ENDIF
NEXT
ENDIF
RETURN
// -----------------------------------------------------------------------------
// Annexes
// -----------------------------------------------------------------------------
// https://www.andlil.com/forum/indicateur-prt-pour-afficher-tous-les-niveaux-symboliques-t39441-30.html