Buongiorno, sto provando a far girare un backtest su PRT, ma non capisco perché al verificarsi della condizione c1 la posizione viene aperta il martedì e non il primo giorno della settimana successiva.
Sembra anche che la chiuda contestualmente all’apertura. Qualcuno può aiutarmi? Grazie in anticipo.
// CondizioniDiTrading
TIMEFRAME(weekly)
c1 = DivergenceCCI[20,-100,100,20][1] = 1
TIMEFRAME(daily)
// Esecuzione del trade
IF c1 THEN BUY PositionSize CONTRACT AT MARKET
ENDIF
Perché entri sul Giornaliero. Il Settimanale lo usi solo per vedere la divergenza, appena si verifica, senza attendere la chiusura (occorrerebbe usare UpdateOnClose).
Però anche con UpdateOnClose potrebbe entrare più volte durante la settimana, in quanto c1 resterebbe valido una settimana.
In effetti ho un pò di confusione sulla possibilità di usare le variabili con frametime diversi, ciò che vorrei realizzare è intercettare una condizione su un grafico settimanale per poi utilizzarla come condizione di operatività giornaliera (conservando lo stato della variabile). Ad esempio: una divergenzaCCI positiva avvenuta due candele fa sul grafico settimanale deve poter essere condizione BUY fino a che non si verifichi una divergenza negativa (sul settimanale). Quello che poi non mi spiego è perché mi fa entrare in posizione il martedì e non il lunedì. Ma in PRT non esistono le funzioni? Grazie dell’approfondimento
In effetti credo si possa realizzare una funzione, richiamata da una CALL, che al suo interno abbia un TIMEFRAME diverso. Funzionerebbe?
Le funzioni, come hai intuito, si possono in qualche modo sostituire con un indicatore che riceve dei dati in input e restituisce dei valori in output.
E’ meglio non usare timeframe diversi in un indicatore, semplicemente richiama l’indicatore dal timeframe chedesideri, senza che nell’indicatore sia indicato un timeframe specifico.
Prova questa versione:
// CondizioniDiTrading
TIMEFRAME(weekly)
ONCE c1 = 0
c1 = DivergenceCCI[20,-100,100,20][1]
IF c1 = 0 THEN
c1 = (c1[1] = 1)
ENDIF
TIMEFRAME(daily)
// Esecuzione del trade
IF c1 AND Not OnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
//uscita dal trade
IF LongOnMarket AND c1 = -1 THEN
SELL AT MARKET
ENDIF
graph c1
IF c1 = 0 THEN
c1 = (c1[1] = 1)
ENDIF
Grazie, non conoscevo questa notazione.