Ciao,
ho scritto il seguente codice per tradare le notizie ma non mi funziona….e non capisco dove sbaglio.
L’idea è questa:
- Monitorare i MAX e i MIN nei 15 minuti prima della notizia: nell’esempio la notizia è alle 1430…per cui ho impostato due variabili cosi:starttime=141500
endtime=143000
- Individuo i max e i min nei 15 min prima della notizia e mi memorizzo i valori rispettivamente con + 2 pips sul max e – 2 pips sul min;
- Se entro i primi 5 minuti successivi alle 1430 viene rotto il max o il min entro long o short e chiudo operazione nei 5 minuti successivi (1440).
- Ovviamente per altri orari il concetto rimane lo stesso.
Possiamo usare TF a 1 minuto o anche inferiori….ditemi voi come meglio….mi potete aiutare ? Grazie
defparam flatbefore=143000
defparam flatafter=144000
starttime=141500
endtime=143000
timetotrade=143000
endtimetotrade=143500
if opentime=starttime or (opentime > starttime and opentime[1] < starttime) then
mymax=high+2*pipsize
mymin=low-2*pipsize
elsif opentime> starttime and time <=endtime then
mymax=max(high+2*pipsize,mymax)
mymin=min(low-2*pipsize,mymin)
endif
if time = timetotrade and time <= endtimetotrade then
if close > mymax then
buy 1 share at market
elsif close < mymin then
sellshort 1 share at market
endif
endif
L’ho modificato così e funziona, sia su 1 minuto che 5 monuti (DAX):
defparam flatbefore = 143000
defparam flatafter = 144000
timetotrade = 143000
endtimetotrade = 143500
IF time = timetotrade THEN
mymax = highest[15](high) + (2 * pipsize)
mymin = lowest[15](low) - (2 * pipsize)
endif
if time >= timetotrade and time <= endtimetotrade then
if close > mymax then
buy 1 share at market
elsif close < mymin then
sellshort 1 share at market
endif
endif
Le righe 8 e 9 contengono il valore 15 per il TF a 1 minuto (15 candele da un minuto), per quello a 5 minuti devi mettere 3 (3 candele da 5 minuti) e così per altri TF.
Ovviamente non funziona su TF superiori a 15 minuti, perché ogni candela sarebbe più ampia del periodo che intendi osservare.
Le righe 8 e 9 consentono di evitare le variabili “starttime” e “endtime”.
Ciao,
torno per capire come risolvere. Ad esempio negli NFP di venerdi’ la strategia è entrata long ma sulla candela delle 1431 (tf 1 minuto su EURUSD) e questo non ha portato frutti in quanto poi il mercato ha preso altra direzione. La soluzione è che l’entrata fosse stata alle 1430 esatte. Con tf 1 minuto per controllare rottura massimi e mini occorre la chiusura della candela e quindi il sistema entrerà sempre alle 1431. L’unica soluzione che mi viene in mente è quella di abbassare il TF a 1 secondo. In questo modo in back il problema sembra risolto. Avevo già provato in reale su altre notizie questa soluzione ma proorder chiude la strategia in quanto l’errore è tipo ” ordine rifiutato”. Mi sapete dire come poter risolvere e perche’ proorder genera questo errore ? Grazie
In ogni caso il codice per TF 1 secondo sarebbe cosi’. Ovviamente per controllare max e min ultimi 15 minuti devono controllare ultimi 900 secondi.
Grazie
DEFPARAM CumulateOrders = False
defparam flatbefore = 143000
defparam flatafter = 144000
timetotrade = 143000
endtimetotrade = 143500
IF time = timetotrade THEN
mymax = highest[900](high) + (1.8 * pipsize)
mymin = lowest[900](low) - (1.8 * pipsize)
endif
if time >= timetotrade and time <= endtimetotrade then
if close > mymax then
buy 1 share at market
elsif close < mymin then
sellshort 1 share at market
endif
endif
SET STOP PLOSS 18
SET STOP PTRAILING 10
Il codice mi sembra corretto.
Il problema può essere il TF di 1 secondo, forse troppo breve per garantire un buon funzionamento. Non ne sono certo, ma può darsi che tra la candela dove l’ordine viene eseguito e la ricezione dell’OK da parte del broker intercorra magari un’altra candela, per cui ProOrder può avere condizioni valide per un altro trade prima che l’ordine precedente non sia stato ancora eseguito.
Prova a variare il TF a 5 o 10 secondi, rifacendo il calcolo delle barre indietro da verificare.