Salve a tutti,
Vorrei acquistare in apertura dei titoli che aprono con un gap up (rispetto alla chiusura precedente) superiore ad una certa %, diciamo il 20%. Inoltre ho lo stop al 5% e il profit all’8%
Ho elaborato questo programmino ma non esegue quello che vorrei (non entra quando deve!) e non capisco dove è l’errore. Spero che possiate aiutarmi. Grazie
IF DOpen > 1.2* DClose (1) THEN
BUY 1000 CASH AT MARKET
ENDIF
SET STOP %LOSS 5
SET TARGET %PROFIT 8
Alla riga 1 mancono le parentesi a Dopen e il 20% di gap mi pare tanto, io ho provato con il 5% e mi ha aperto delle operazioni su APPLE, usando questa come linea 1:
IF DOpen(0) > 1.05* DClose(1) THEN
Uso un gap molto ampio poiché lo applico su titoli con variazioni % giornaliere a due cifre, addirittura a tre cifre.
Uso il proscreener per selezionare i titoli che in preapertura hanno variazioni con quelle caratteristiche e poi entro a mercato in open
Il sistema, invece, mi entra a mercato il giorno successivo al verificarsi del gap. Io vorrei entrare in open il giorno stesso in cui si verifica.
Grazie
IF DOpen (0) > 1.2* DClose (1) THEN
BUY 1000 CASH AT MARKET
ENDIF
SET STOP %LOSS 5
SET TARGET %PROFIT 8
scusami … ecco il codice
Prova questo:
Timeframe(Daily, UpdateOnClose)
MyClose = close
//
Timeframe(Daily, default)
MyOpen = open
//
Timeframe(Default)
IF MyOpen > 1.2* MyClose THEN
BUY 1000 CASH AT MARKET
ENDIF
SET STOP %LOSS 5
SET TARGET %PROFIT 8
Grazie Roberto
Purtroppo non funge.
Ad es. sul titolo Marin Software ed entra il 1 Luglio quando l’apertura è “solo” il 10% > della chiusura precedente e non entra quando dovrebbe: il 24 giugno, il 24 – 28 – 29 giugno ….
Scusami, mi sono dimenticato di dirti che ho usato il supporto MTF per fare si che tu possa usare un TF più piccolo (fino anche a 1 secondo), per valutare il GAP “quasi” immediatamente.
Perché le strategie sono sempre eseguite a cgiusura candela, per cui se usi il Daily non cambia niente.
Puoi usare anche 1 minuto o 1 ora o 4 ore, dipende da quanto “ritardo” sei disposto ad accettare.
Più iul TF è piccolo, minore è lo storico disponibile per il backtest (200K barre giornliere sono mille anni, ovviamente inesistenti, 200K barre a 4 ore sono qualche decina, 200K barre a 1 secondo sono meno una decina di giorni).
Avendo la necessità di entrare in apertura ho inserito il tf ad 1 secondo. Però il sistema cumula posizioni ad ogni chiusura barra, quindi ogni secondo.
Se non ricordo male c’è un’istruzione che impedisce il cumulo delle posizioni. Sto studiando da poco (e con non poche difficoltà!) il linguaggio
Per il backtest “corto” non ho problemi perché inserisco io la data di inizio e fine solo del periodo che mi interessa
Pensavo fosse più semplice, non voglio farti perdere troppo tempo e approfittare della tua disponibilità
Si, basta aggiungere Not OnMarket alle condizioni d’entrata:
IF MyOpen > 1.2* MyClose AND Not OnMarket THEN
Inoltre puoi mettere, come PRIMA riga:
DEFPARAM CumulateOrders = False