Buongiorno, volevo chiedere un aiuto su questa parte di codice (sezione di un altro indicatore) semplicissima, ma che per qualche ragione non funziona correttamente:
In pratica, confronta il range giornaliero con l’ATR[10] daily aggiornato al giorno prima, e genera un segnale CDV quando il range della giornata inizia ad essere superiore al 50% dell’ATRD.
Il problema è che questa parte di codice sembra funzionare correttamente quando viene caricato, ma se si lascia in funzione, ad ogni nuova candela il segnale CDV torna a zero e li rimane, nonostante RY0 sia maggiore del RangeMinimo
Grazie a che riesce a darmi una dritta per capire questo problema, che probabilmente è banale ma non riesco a capirne la causa
timeframe (1 day)
PeriodoATRD=10
ATRD=AverageTrueRange[PeriodoATRD](close)[1]//atr daily aggiornato al giorno precedente, quindi non calcola il range di oggi in progress
timeframe (DEFAULT)
SogliaCandValide=50
RangeMinimo=SogliaCandValide/100*ATRD
RY0=(Dhigh(0)-DLow(0)) //range giornata in corso
if RY0>RangeMinimo then
CDV=1
else
CDV=0
endif
rem CDV=RY0>RangeMinimo // altra prova, non funzionante
return CDV as "CDV" rem , ry0 as "rangeD", rangeminimo as "sogliarange"
Dimenticavo, visualizzo l’indicatore sul TF 15 minuti
Cambia la linea 5 in:
timeframe (15mn,UpdateOnClose)
Perfetto, adesso funziona. Anche mettendo
>> timeframe (DEFAULT, updateonclose)
per poterlo utilizzare su qualsiasi timeframe.
Però non ho capito esattamente il motivo… pensavo che la sezione di codice scritta dopo un “timeframe (DEFAULT)” venisse già eseguita in tempo reale, senza bisogno di altre istruzioni (evidentemente così non è).
Questa problematica si manifesta solo nel caso che il codice contenga all’interno più Timeframes?
In ogni caso, grazie mille Roberto! 💪🙌🙏
timeframe (DEFAULT, updateonclose) è un controsenso, in quanto il timeframe di default ha, automaticamente, entrambi gli attributi DEFAULT e UPDATEONCLOSE (o meglio, non hanno senso in quanto la strategia viene eseguita solo alla chiusura della sua candela), però se funziona così va bene, sono misteri! 🙂
Quanto all’ultima domanda… rientra nel mistero di cui sopra. Bisogna sempre fare delle prove, non saprei dirti. Se t’interessa una sopiegazione sicura devi chiedere all’assistenza PRT.
Accetto il mistero che a volte si incontra durante la programmazione… 😉
Va bene così, purchè si trovi una soluzione 🙂
Grazie Rob, alla prossima