Buonasera,
mi servirebbe un aiuto per riportare su grafico un’idea al verificarsi di una condizione.
Mi spiego meglio:
- Sulla candela in cui si verifica la mia condizione mi serve far apparire una linea orizzontale che parta dal massimo della candela e vada avanti per 40 candele successive (figura 1)
- Se nell’arco di queste 40 candele successive a quella iniziale il prezzo “chiude” (quindi in chiusura candela) sopra tale linea mi deve apparire un rettangolo che andra ad avanzare col prezzo e che abbia dimensione di 100 pip sopra e 100 pip sotto dal livello della chiusura della candela che ha chiuso sopra la linea. Il rettangolo deve avanzare col prezzo e fermarsi quando il prezzo tocca i 100 pip sopra o i 100 pip sotto (figura 2)
Grazie anticipatamente
Questo è il codice, nella foto allegata ho dovuto mettere parametri diversi (50 barre e soli 20 pips sopra/sotto la rottura) per ottenere una linea ed un rettangolo da mostrare:
DEFPARAM DrawOnLastBarOnly = true
//
// inizializzazione delle variabili
//
IF BarIndex = 0 THEN
Pips = 100 * pipsize //100 pips oltre/sotto la chiusura
MaxBarre = 40 //40 barre di durate della linea dal segnale
Media = 0
Conto = 0
Barra = 0
InizioRett = 0
FineRett = 0
PrezzoMax = 0
PrezzoMin = 0
ENDIF
//
// se il conto è iniziato, incrementarlo di 1 e verificare che non abbia superato il massimo,
// nel qual caso si riparte dall'inizio azzerando tutto
//
IF Conto > 0 THEN
Conto = Conto + 1
IF Conto > MaxBarre THEN
Media = 0
Conto = 0
Barra = 0
InizioRett = 0
FineRett = 0
PrezzoMax = 0
PrezzoMin = 0
ENDIF
ENDIF
//
// questa è la condizione di partenza
//
Media = average[10,0](close) CROSSES OVER average[20,0](close)
//
// Se la condizione si è verificata iniziare il conto delle barre e salvare i parametri
// (barra e massimo dove la condizione si è verificata)
//
IF Media THEN
Conto = 1
Barra = BarIndex
Prezzo = high
InizioRett = 0
FineRett = 0
PrezzoMax = 0
PrezzoMin = 0
ENDIF
//
// se il conteggio è già in corso verificare se occorre iniziare a visualizzare il
// rettangolo alla rottura della linea
//
IF Conto > 0 THEN
IF close > Prezzo AND InizioRett = 0 THEN
InizioRett = BarIndex
FineRett = 0
PrezzoMax = close + Pips
PrezzoMin = close - Pips
ENDIF
ENDIF
//
// se la visualizzazione del rettangolo è già iniziata, verificare quando deve fermarsi
//
IF InizioRett > 0 THEN
IF close >= PrezzoMax OR close <= PrezzoMin THEN
IF FineRett = 0 THEN
FineRett = BarIndex
ENDIF
ENDIF
ENDIF
//
// visualizzazione sul grafico del segmento e del rettangolo, se il conteggio è attivo
//
IF Conto > 0 THEN
// la linea NON deve superare la fine del rettangolo
y = min(Barra + (MaxBarre - 1),BarIndex)
IF FineRett > 0 THEN
y = FineRett
ENDIF
DRAWSEGMENT(Barra,Prezzo,y,Prezzo) COLOURED(0,128,0,255)
// il rettangolo NON deve superare il limite di quanto i prezzi sono usciti
IF InizioRett > 0 THEN
x = BarIndex
IF FineRett > 0 THEN
x = FineRett
ENDIF
DRAWRECTANGLE(InizioRett,PrezzoMax,x,PrezzoMin) COLOURED(255,0,0,255)
ENDIF
ENDIF
RETURN
Il colore della linea si può cambiare a piacimento, ma non è possibile cambiarne lo spessore e lo stile (solo i dati restituiti con RETURN possono essere personalizzati tramite le proprietà dell’indicatore).
Il colore dell’interno del rettangolo non può essere cambiato, mentre si può cambiare il colore del bordo. Per rendere il bordo invisibile basta mettere 0 al posto di 255 nel quarto ed ultimo parametro di COLOURED alla riga 87.