ciao ho scritto il codice di un indicatore che mi desse per grafici a volume la durata temporale di ogni candela. il codice è:
if intradaybarindex>1 then
durata=opentime-opentime[1]
else
durata=durata[1]
endif
return durata
In alcuni casi da dei valori anomali, mi sai spiegare? Allego un grafico per spiegazione
Per scrivere il codice , utilizza il pulsante <> “insert PRT code”.
Grazie.
perdonami non ho capito dove devo mettere “insert PRT code”
E’ il pulsante evidenziato, cliccalo e poi scrivi il codice nell’apposita finestra che si apre.
Per la durata, attendi un pò, ci sto lavorando.
if intradaybarindex>1 then
durata=opentime-opentime[1]
else
durata=durata[1]
endif
return durata
Il tuo codice potrebbe essere scritto semplicemente:
RETURN opentime-opentime[1]
ma non fa quello che vuoi, il calcolo tra i due orari è fatto in modo numerico, per cui le ore 16:01:30 – le ore 15:59:45 diventa 160130 – 155945 = 14985, che è un numero senza senso. PRT supporta il solo tipo di dati numerico reale (in virgola mobile), non ha interi, date, stringhe, ecc…
Per cui è necessario estrapolare i singoli valori delle ore, minuti e secondi facendo delle operazioni matematiche, molto semplici, ma numerose (rspetto alla semplice riga a cui tu avevi pensato):
Ora1 = OpenTime //ORA attuale
x = round((Ora1 / 100) - 0.5) * 100 //trovi l'ora ed i minuti, senza secondi
ss1 = Ora1 - x //trovi i secondi
y = round((x / 10000) - 0.5) * 10000 //trovi l'ora senza secondi e senza minuti
mm1 = (x - y) / 100 //trovi i minuti
hh1 = round((Ora1 / 10000) - 0.5)
//////////////////////////////////////////////////////////////////////
Ora2 = OpenTime[1] //ORA della candela precedente
x = round((Ora2 / 100) - 0.5) * 100 //trovi l'ora ed i minuti, senza secondi
ss2 = Ora2 - x //trovi i secondi
y = round((x / 10000) - 0.5) * 10000 //trovi l'ora senza secondi e senza minuti
mm2 = (x - y) / 100 //trovi i minuti
hh2 = round((Ora2 / 10000) - 0.5)
//////////////////////////////////////////////////////////////////////
// Calcolo delle differenze
DiffH = hh1 - hh2 //Differenza tra le ore
IF DiffH < 0 THEN
DiffH = DiffH + 23
ENDIF
DiffM = mm1 - mm2 //Differenza tra i minuti
IF DiffM < 0 THEN
DiffM = DiffM + 59
ELSIF ss1 < ss2 THEN
DiffM = DiffM - 1
ENDIF
//ENDIF
DiffS = ss1 - ss2 //Differenza tra i secondi
IF DiffS < 0 THEN
DiffS = DiffS + 59
ENDIF
//////////////////////////////////////////////////////////////////////
// Riportare tutto in SECONDI
Diff = Diffs + (DiffM * 60) + (DiffH * 3600)
RETURN Diff AS "Secondi"
ci deve essere cmq qualcosa che non va ancora ci sono dei picchi di 70′ impossibili, anche nel tuo grafico
I picchi ci sono perché le candele sono così distanti tra loro, specialmente al cambio giorno.
Talvolta anche durante la giornata.
Non saprei dirti, prova a confrontare i dati con altre piattaforme, utilizzando gli stessi parametri.
ho controllato e c’era un errore nel codice al cambio di ora, ho corretto ed adesso funziona.
Ora1 = OpenTime //ORA attuale
x = round((Ora1 / 100) - 0.5) * 100 //trovi l'ora ed i minuti, senza secondi
ss1 = Ora1 - x //trovi i secondi
y = round((x / 10000) - 0.5) * 10000 //trovi l'ora senza secondi e senza minuti
mm1 = (x - y) / 100 //trovi i minuti
hh1 = round((Ora1 / 10000) - 0.5)
//////////////////////////////////////////////////////////////////////
Ora2 = OpenTime[1] //ORA della candela precedente
x = round((Ora2 / 100) - 0.5) * 100 //trovi l'ora ed i minuti, senza secondi
ss2 = Ora2 - x //trovi i secondi
y = round((x / 10000) - 0.5) * 10000 //trovi l'ora senza secondi e senza minuti
mm2 = (x - y) / 100 //trovi i minuti
hh2 = round((Ora2 / 10000) - 0.5)
//////////////////////////////////////////////////////////////////////
// Calcolo delle differenze
DiffH = hh1 - hh2 //Differenza tra le ore
IF DiffH < 0 THEN
DiffH = DiffH + 23
ELSIF DiffH=1 THEN
DiffH=0
m1=m1+60
ENDIF
DiffM = mm1 - mm2 //Differenza tra i minuti
IF DiffM < 0 THEN
DiffM = DiffM + 59
ELSIF ss1 < ss2 THEN
DiffM = DiffM - 1
ENDIF
DiffS = ss1 - ss2 //Differenza tra i secondi
IF DiffS < 0 THEN
DiffS = DiffS + 59
ENDIF
//////////////////////////////////////////////////////////////////////
//Riportare tutto in SECONDI
Diff = Diffs + (DiffM * 60) + (DiffH * 3600)
RETURN Diff AS "Secondi"