Code de l'indicateur Niveaux Symboliques corrigé

Forum d'entraide ProRealTime : prise en main, réglages, indicateurs, programmation ProBuilder et ProOrder, astuces entre utilisateurs de la plateforme.
Avatar du membre
Luc45
Messages : 6
Enregistré le : 10 oct. 2024 20:17

Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par Luc45 »

Bonjour,

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

./download/file.php?id=308091
(1.17 Kio) Téléchargé 343 fois
Avatar du membre
ChristelleP
La Battante
Messages : 69053
Enregistré le : 23 janv. 2018 09:53

Re: Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par ChristelleP »

merci Luc45 :mercichinois:
Avatar du membre
Luc45
Messages : 6
Enregistré le : 10 oct. 2024 20:17

Code de l'indicateur Niveaux Symboliques corrigé V1.1

Message non lu par Luc45 »

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.
./download/file.php?id=308163
(1.28 Kio) Téléchargé 293 fois
Avatar du membre
ChristelleP
La Battante
Messages : 69053
Enregistré le : 23 janv. 2018 09:53

Re: Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par ChristelleP »

La pièce-jointe n'est pas passé. :oops:
Avatar du membre
Amarantine
Modératrice
Messages : 75633
Enregistré le : 16 sept. 2011 19:12

Re: Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par Amarantine »

Luc: mets le code en spoiler comme dans ton 1er message et toujours vérifier que ça passe, sinon il faut corriger immédiatement.
Avatar du membre
Luc45
Messages : 6
Enregistré le : 10 oct. 2024 20:17

Re: Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par Luc45 »

Oh, voici le code et le fichier.
Spoiler:

Code : #

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

./download/file.php?id=308187
(1.28 Kio) Téléchargé 362 fois
Avatar du membre
Amarantine
Modératrice
Messages : 75633
Enregistré le : 16 sept. 2011 19:12

Re: Code de l'indicateur Niveaux Symboliques corrigé

Message non lu par Amarantine »

:top: :mercichinois: