C’erano un sacco di errori nell’utilizzo delle variabili e nel loro utilizzo in TF diversi.
Non puoi scrivere:
ONCE TradeON = 0
Timeframe(Weekly,UpdateOnClose)
IF MieCondizioni1 THEN
TradeON = 1
ENDIF
TIMEFRAME(default)
IF MieCondizioni2 THEN
TradeON = 0
ENDIF
perché alla prima riga, non avendo indicato nessun TF, è considerato TIMEFRAME(default) e solo in quel TF può essere variata la variabile TradeON, non alla riga 4 che fa parte del TIMEFRAME(Weekly), anche se puoi leggerla da qualunque TF.
Quindi, una varibile può essere modificata solo nel TF in cui è stata creata, mentre può essere letta in qualsiasi altro TF.
All’inizio del codice, tutto ciò che scrivi PRIMA di TIMEFRAME(xxx) fa parte di TIMEFRAME(default).
Ai fini delle variabili create, TIMEFRAME(Daily,default) e TIMEFRAME(Daily,UpdateOnClose) sono considerati DIVERSI.
Ai fini del numero massimo di TF utilizzati, invece, TIMEFRAME(Daily,default) e TIMEFRAME(Daily,UpdateOnClose) sono considerati UGUALI.
Il massimo di TF utilizzabili in una strategia è 5 + quello di default.
Esempio con un numero di TF di 6 (5 + 1 di default, che supponiamo sia quello a 1 minuto), VALIDO:
TIMEFRAME(default) //TF default 1
x0 = 1
TIMEFRAME(1 Minute,UpdateOnClose) //TF default 1
x1 = 1
TIMEFRAME(1 Minute,default) //TF default 1
x2 = 1
TIMEFRAME(Daily,UpdateOnClose) //TF Daily 2
x3 = 1
TIMEFRAME(Daily,default) //TF Daily 2
x4 = 1
TIMEFRAME(4 hour,UpdateOnClose) //TF 4h 3
x5 = 1
TIMEFRAME(4 hour,default) //TF 4h 3
x6 = 1
TIMEFRAME(1 hour,UpdateOnClose) //TF 1h 4
x7 = 1
TIMEFRAME(1 hour,default) //TF 1h 4
x12 = 1
TIMEFRAME(30 Minute,UpdateOnClose) //TF 30 minute 5
x8 = 1
TIMEFRAME(30 Minute,default) //TF 30 minute 5
x9 = 1
TIMEFRAME(10 Minute,UpdateOnClose) //TF 10 minute 6
x10 = 1
TIMEFRAME(10 Minute,default) //TF 10 minute 6
x11 = 1
TIMEFRAME(default) //TF default 1
XX = 1
IF x0 and x1 and x2 and x3 and x4 and x5 and x6 and x7 and x8 and x9 and x10 and x11 and x12 and XX THEN
ENDIF
BUY 1 CONTRACT AT -close LIMIT
questo esempio, invece NON è valido perchè utilizza più di 6 TF:
TIMEFRAME(default) //TF default 1
x0 = 1
TIMEFRAME(1 Minute,UpdateOnClose) //TF default 1
x1 = 1
TIMEFRAME(1 Minute,default) //TF default 1
x2 = 1
TIMEFRAME(Daily,UpdateOnClose) //TF Daily 2
x3 = 1
TIMEFRAME(Daily,default) //TF Daily 2
x4 = 1
TIMEFRAME(4 hour,UpdateOnClose) //TF 4h 3
x5 = 1
TIMEFRAME(4 hour,default) //TF 4h 3
x6 = 1
TIMEFRAME(1 hour,UpdateOnClose) //TF 1h 4
x7 = 1
TIMEFRAME(1 hour,default) //TF 1h 4
x12 = 1
TIMEFRAME(30 Minute,UpdateOnClose) //TF 30 minute 5
x8 = 1
TIMEFRAME(30 Minute,default) //TF 30 minute 5
x9 = 1
TIMEFRAME(10 Minute,UpdateOnClose) //TF 10 minute 6
x10 = 1
TIMEFRAME(10 Minute,default) //TF 10 minute 6
x11 = 1
TIMEFRAME(5 Minute,UpdateOnClose) //TF 5 minute 7
x13 = 1
TIMEFRAME(5 Minute,default) //TF 5 minute 7
x14 = 1
TIMEFRAME(8 hour,UpdateOnClose) //TF 8h 8
x15 = 1
TIMEFRAME(8 hour ,default) //TF 8h 8
x16 = 1
TIMEFRAME(default) //TF default 1
XX = 1
IF x0 and x1 and x2 and x3 and x4 and x5 and x6 and x7 and x8 and x9 and x10 and x11 and x12 and x13 and x14 and x15 and x16 and XX THEN
ENDIF
BUY 1 CONTRACT AT -close LIMIT
in realtà ho visto che in backtrest ne accetta fino a 7 di TF (6 + quello di default che è sul grafico), mentre quando ne inserisci 8, come nel mio secondo esempio, segnala che ne sono accettati max. 6 (5 + quello di default).
L’ordine in cui si scrivono NON è importante, possono essere anche mischiati tra loro.
Ogni TF può essere ripetuto anche più volte, in punti diversi della strategia, conta sempre come UN timeframe.