Buonasera Roberto vorrei chiederti quando imposto l’operatività del sistema su un timeframe a 4 ore oppure a 15 minuti devo specificarlo nel codice oppure lo legge automaticamente sul timeframe sul quale ho avviato la strategia?
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
Timeframe(4 hour,UpdateOnClose)
Cond = Timeframe(default)
La riga 4 NON è consentita, TIMEFRAME deve essere su una riga da solo (al massimo seguito da un commento), non può essere assegnato perché NON restituisce niente. Si dice impropriamente istruzione, ma non fa niente, è una DIRETTIVA che istruisce ProOrder di eseguire le righe che seguono nel time frame a 4 ore.
Se usi un unico time frame (quello che è sul grafico), non importa che tu usi l’istruzione TIMEFRAME.
Se usi TIMEFRAME, come nel tuo esempio (dopo avere tolta la riga 4), esegue le istruzioni che ci sono dopo (tutte, se non è indicato più sotto un altro TF) sul time frame a 4 ore, purché sul grafico non ci sia:
- un TF maggiore di 4 ore
- un TF di cui il 4 ore sia un multiplo (quindi 2 ore, 1 ora, 30 minuti, 1 minuto, ecc… ma NON 25 minuti perché 4 ore, cioè 240 minuti, NON sono un multiplo di 25).
perfetto Roberto , un’ultima cosa, non essendo sicuro di aver fatto bene, in pratica vorrei dare la condizione ad un sistema di entrare subito (mentre si sta formando la candela) alla rottura del massimo della candela precedente quindi subito al superamento del massimo di un eventuale spike della candela precedente….come devo scrivere nel codice affinchè ottenga questo? Grazie
Intanto ti consiglio di cercare nel la parola MTF, Multi o Multiple Time Frame, in modo da leggere i vari blog, articoli ed esempi su come usare più TF contemporaneamente.
Questo è il codice per entrare Long al superamento del massimo della candela giornaliera, usando un TF di di tua scelta (1 ora o 1 minuto o 10 secondi). Più piccolo è il TF, minore è l’intervallo di dati storici su cui puoi fare i backtest. 200K barre a 4 ore sono un certo tempo (circa 15 anni), mentre su un TF di 10 secondi sono appena 10-11 giorni):
DEFPARAM CumulateOrders = False
Timeframe(Daily,UpdateOnClose)
Massimo = high
Timeframe(default)
IF close > Massimo THEN
BUY 1 CONTRACT AT Market
ENDIF
Però per entrare alla rottura di un prezzo giornaliero non è necessario usare più TF (è opportuno se vuoi gestire altri aspetti, come il trailing stop ad esempio), in quanto basta alla chiusura giornaliera piazzare un ordine pendente ad un prezzo maggior del massimo:
DEFPARAM CumulateOrders = False
BUY 1 CONTRACT AT high + 1*PipSize STOP //entra 1 pip sopra il massimo
ok Roberto ma se io voglio far entrare il sistema in acquisto al superamento del massimo (cioè il massimo sarebbe quello dello spike) della candela precedente sia essa una candela a 15 minuti oppure una candela h4 come dovrei scrivere?
scrivendo così andrebbe bene? ma noto che mi fa entrare al massimo del corpo della candela,
ONCE a1 = 1.0
c1 = (close > high[1])
Va bene la riga 2.
La riga 1 non capisco, forse è il numero di pips oltre la rottura? In questo caso è meglio scrivere:
ONCE a1 = 1.0 * PipSize
per essere sicuro che sia sempre interpretato come un pip e non un prezzo (sul Dax non cambia niente, ma su Eur/Usd 1.90 è un’enormità)!
ah ok quindi in questo modo posso regolare l’ingresso ad esempio se voglio farlo entrare 5 punti sopra il massimo metterò :
ONCE a1 = 5.0 * PipSize
giusto?
Questa è la definizione di A1, poi devi usarla per aprire la posizione:
If Mie CondizioniLong and close > (high[1] + a1) then
Buy 1 contract at Market //entrata a Mercato
Endif
//
Buy 1 contract at (high[1] + a1) STOP //entrata con ordine pendente STOP