Buonasera a tutti,
sto provando ad implementare un trading system sul VIX (operatività short) che abbia le seguenti caratteristiche:
domani entra short qualora il prezzo (durante la giornata) sia “inferiore al prezzo di chiusura odierno MENO il range (differenza high-low odierno)”
e chiudi la posizione qualora il prezzo sia maggiore del “prezzo di chiusura PIU’ 2*ATR a 2 periodi” rispetto a ieri.
Questo è il codice che ho scritto, ma non riesco a farlo funzionare:
pc = Close[1]
ran = High[1] - Low [1]
trigger = pc - ran
IF NOT SHORTONMARKET THEN
IF Close[0] < trigger THEN
SELLSHORT 50 SHARES AT MARKET
ENDIF
ENDIF
triggercopertura = Close[1] + (2*AverageTrueRange[2](close))
IF SHORTONMARKET THEN
IF Close[0] > triggercopertura THEN
EXITSHORT 50 SHARES AT MARKET
ENDIF
ENDIF
Potete per favore darmi qualche suggerimento?
Grazie e buona serata
Su quale TF (Time Frame) devi utilizzarlo?
Te lo chiedo perché:
- se lo utilizzi sul Daily NON puoi entrare a mercato durante il giorno (mentre la candela è in formazione), ma solo con ordini pendenti da piazzare alla chiusura giornaliera. Oppure devi usare il recente supporto MTF (Multiple, o Multi, Time Frame) che consente di operare su vari TF diversi contemporaneamente, quindi potresti utilizzare il 10 o 5 minuti o addirittura 1 minuto per entrare a mercato in giornata. Però in quest’ultimo caso avrai uno storico, per il backtest, di pochi mesi;
- se lo utilizzi su TF intraday non devi usare CLOSE o HIGH ecc… (che fanno riferimento al TF sul grafico) ma DCLOSE, DHIGH, ecc… per fare riferimento alla chiusura Daily.
Grazie Roberto, gentilissimo.
Il TF è intraday. Ho provato a modificare il codice sostituendo i vari DClose, DHigh ecc… purtroppo il risultato non cambia. Il sistema apre una sola posizione short ad inizio periodo (giugno 2016) e la chiude sull’ultima candela (praticamente ieri). Probabilmente sbaglio le istruzioni sul modo di aprire e chiudere le posizioni. Ecco il nuovo codice:
defparam CumulateOrders=false
pc = DClose(1)
ran = DHigh(1) - DLow (1)
trigger = pc - ran
IF NOT SHORTONMARKET THEN
IF DOpen(0) < trigger THEN
SELLSHORT 50 SHARES AT MARKET
ENDIF
ENDIF
triggercopertura = DClose(0) + (2*AverageTrueRange[2](close))
IF SHORTONMARKET THEN
IF DOpen(0) > triggercopertura THEN
EXITSHORT 50 SHARES AT MARKET
ENDIF
ENDIF
Grazie ancora, buona giornata
Chiedo scusa. Il TF è giornaliero. Come si effettuano gli ordini pendenti in chiusura giornaliera?
Grazie
Le strategie vengono eseguite SEMPRE alla chiusura di ogni candela, per cui, essendo sul grafico giornaliero, verrà eseguita a fine giornata.
Basta mettere un ordine pendente e, se durante il giorno successivo il prezzo viene toccato, l’ordine entra a mercato, altrimenti alla fine della nuova candela viene cancellato (i pendenti durano una sola candela) e va reinserito, se ci sono ancora le condizioni che uno desidera.
Anche per l’uscita vale lo stesso discorso, si inserice un ordine pendente al prezzo che si desidera ed andrà reinserito ad ogni candela successiva fino al termine dell’operazione.
Vedo che tu hai specificato un’entrata, un’uscita in stoip loss, ma non un’uscita in profitto, quando deve uscire?
PrezzoEntrata = close - range //prezzo di chiusura odierno - range odierno
PrezzoUscita = close + (2 * AverageTrueRange[2](close)) //prezzo di chiusura odierno + (2 * Atr)
IF Not ShortOnMarket THEN
SELLSHORT 50 SHARES AT PrezzoEntrata STOP //ordine STOP pendente d'acquisto
EXITSHORT AT PrezzoUscita STOP //ordine STOP pendente d'uscita (se non entra viene ignorato)
ENDIF
IF ShortOnMarket THEN
EXITSHORT AT PrezzoUscita STOP //ogni barra successiva, se sempre a mercato, va inserito nuovamente l'ordine pendente d'uscita
ENDIF
Grazie infinite per le info! Finalmente inizio a fare chiarezza e soprattutto il codice che hai scritto funziona perfettamente secondo i requisiti, dando anche un’ottima equity line. L’uscita desiderata, al momento, è data esattamente dal prezzo di chiusura odierno + (2 * Atr)
Grazie ancora