ONCE TS multiday
Forums › ProRealTime forum Italiano › Supporto ProOrder › ONCE TS multiday
- This topic has 15 replies, 2 voices, and was last updated 3 years ago by robertogozzi.
-
-
02/22/2021 at 9:58 AM #162317
Ciao Roberto, se in certe situazioni da definire volessi aggiungere come filtro ad un TS sul 5 minuti (che opera long e short) la condizione extra multiday per cui non deve prendere soltanto per il primo long (se gli capita naturalmente, mentre per lo short può operare) il primo segnale rialzista finchè il prezzo è sopra il minimo di ieri e non torna sopra tale minimo sul timeframe inferiore di default, posso usare in qualche modo ONCE (e dove devo inserirlo) oppure la cosa è più complessa?
GRAZIE
timeframe (daily, updateOnClose)
previous DayHigh =Dhigh(0)
previousDayLow=Dlow(0)
timeframe (5 minute)
cExtraBuy=close[1]<previousDayLow and close>previousDayLow
02/22/2021 at 10:36 AM #162323Non sono riuscito a capire bene, per lo Short non occorre fare niente, in caso di segnale Long, invece, non deve prendere il primo?
02/22/2021 at 10:59 AM #162326Cerco di essere più preciso: in un Ts che opera long e short (sul timeframe a 5 minuti) vorrei, in certe circostanze (ancora da definire), aggiungere una condizione che riguarda il massimo\minimo del timeframe daily.
Nell’esempio del caso long: non voglio che il TS prenda un segnale long prima che il prezzo sia sceso sotto il minimo del giorno prima sul daily, e sia tornato, sul timeframe a 5 minuti, sopra tale minimo. [Per lo short, il TS può sempre operare in quanto non guarda questa condizione sul timeframe daily.]
Ora, per non farlo operare long fino a che il prezzo sia sceso sotto il minimo sul daily e sia tornato sopra tale minimo sul 5 minuti, va bene aggiungere alle altre condizioni long la condizione che ho scritto:
cExtraBuy=close[1]<previousDayLow and close>previousDayLow
quello che vorrei fare con ONCE è limitare tale condizione solo alla prima volta: se, dopo che il prezzo è sceso sotto il minimo daily e ritornato long sul 5 minuti, dovesse capitare nella giornata una seconda operazione long non voglio più che sia attiva questa condizione sul daily (per cui bisogna attendere una seconda volta che il prezzo scenda di nuovo sotto il minimo daily e risalga sopra tale minimo nel 5 minuti).
La domanda è: basta utilizzare ONCE (ed in tal caso in che posizione va inserito), oppure la formula va scritta in modo più complesso? GRAZIE
02/22/2021 at 11:57 AM #162330La logica dell’operazione è questa: mi aspetto che il mercato salga, ma “penso” che prima di salire in modo consistente debba andare a prendere (e poi “riassorbire” sul 5 minuti) i minimi di ieri, per cui non voglio prendere eventuali operazioni long fino a che, solo la prima volta, il mercato abbia preso i minimi di ieri.
02/22/2021 at 12:43 PM #162331La tua istruzione va benissimo, puoi scriverla anche:
1cExtraBuy = close CROSSES OVER previousDayLowONCE non va bene da sola, serve senz’altro per iniziare una variabile, ma poi questa variabile (che in gergo si chiama FLAG in quanto segnala qualcosa) deve essere gestita.
Faccio un esempio con una variabile che chiamerò LongOK, che se avrà valore 0 (falso) non permetterà di tradare. Si tratta di assegnarli valore 1 iniziale e poi rimetterla ad 1 ad ogni nuovo giorno. Quando entri LONG, invece, la metterai a 0. Nelle tue condizioni per entrare Long dovrai anche aggiungerci AND LongOK:
123456789101112131415161718192021222324DEFPARAM........ONCE LongOK = 1 //LONG abilitati inizialmente//--------------------------------------------------// riabilitare i LONG ad inizio nuovo giorno//If IntraDayBarIndex = 0 THENLongOK = 1ENDIF//--------------------------------------------------.. // qui metterai il codice delle tua strategia.//--------------------------------------------------// entrata LONG//--------------------------------------------------IF MieCondizioniLong AND LongOK THENBUY 1 CONTRACT AT MARKETLongOK = 0 //disabilitare i LONG dopo la prima entrataENDIF//--------------------------------------------------//.. // qui metterai il resto del tuo codice.02/22/2021 at 2:03 PM #162344Ho provato, ma non mi funziona. Alcune considerazioni:
- il long deve essere disabilitato fino a che il prezzo non scende sotto il minimo daily, quindi non è che devo scrivere: longOk=0?
- once con più timeframes dà errore. Inserisco: Once… ed if intraday… dopo: timeframe (daily, updateOnClose) oppure dopo timeframe (5,minutes)?
- non è preferibile a questo punto creare un flag che al posto di uguale ad 1 sia uguale a : close CROSSES OVER previousDayLow?
02/22/2021 at 2:49 PM #162349LongOK non ha niente a che vedere con il prezzo.
Quello fa parte delle tue condizioni.
Ogni variabile deve essere definita e variata in un solo timeframe, anche se puoi leggerla dappertutto.
02/22/2021 at 2:59 PM #16235202/22/2021 at 3:08 PM #162355Non capisco cosa tu intenda, comunque ONCE può anche non essere utilizzato, dipende da come scrivi il codice.
02/22/2021 at 3:22 PM #162358OK ci penso un pò, faccio delle prove e ti faccio sapere.
Mi “sembra” che l’esempio che hai riportato sopra:
IF MieCondizioniLong AND LongOK THEN
BUY 1 CONTRACT AT MARKET
LongOK = 0 //disabilitare i LONG dopo la prima entrata
ENDIFnon tenga conto del fatto che non posso disabilitare tutte le condizioni, in quanto il mio scopo è disabilitare solo una condizione di quelle presenti tra “mie condizioni”, ossia solo: cExtraBuy = close CROSSES OVER previousDayLow
02/22/2021 at 3:23 PM #16235902/22/2021 at 8:10 PM #162378Dopo molte prove così sembra funzionare, puoi controllare? (il Ts deve inibire all’inizio di ogni giorno il primo long SOLO fino a che il prezzo non va sotto il minimo di ieri e poi risale. Futuri long della giornata devono funzionare normalmente senza più questa condizione).
- inizio con un flag = 0
- viene posto il flag = 1 solo al verificarsi della condizione desiderata
- non c’è bisogno di disabilitare il flag dopo il long altrimenti, dalle prove, non entra più in nessun caso durante la giornata
Vale sempre:
timeframe (daily, updateOnClose)
previous DayHigh =Dhigh(0)
previousDayLow=Dlow(0)
timeframe (3 minute)
previousDayLowReached=close[1]<previousDayLow and close>previousDayLow
123456789101112131415161718192021222324//----------------------------------------------------------------------timeframe(3 minutes)ONCE previousDayLowReached = 0 //LONG inizialmente disabilitati nel flag: previousDayLowReachedIf IntraDayBarIndex = 0 THENpreviousDayLowReached = 0ENDIF//----------------------------------------------------------------------------------if close[1]<previousDayLow and close>previousDayLow then // definizione condizione ExtrapreviousDayLowReached=1 // condizione Extra posta come flag vero solo se si verificaendif//------------------------------------------------------------------------------cLong = mie condizioniIF (tradeAllowed=1 and cLong) THENBUY 1 CONTRACTS AT MARKET//previousDayLowReached=0 // non serve riscrivere il flag in quanto la condizione Extra, se si verificaENDIF // deve essere valida solo la prima volta//-----------------------------------------------------------------------------------02/22/2021 at 11:01 PM #162386La riga 20 mi sembra contraddica quello che dici, vuoi che la condizione extra sia abilitata solo la prima volta, ma se non l’azzeri quando entri la prima volta resta valida anche per l’entrate successive, no?
02/22/2021 at 11:58 PM #162391Ciao Roberto, ho controllato, ma ti confermo che se abilito la riga 20 togliendo il rem il TS prende altre operazioni solo se il prezzo torna sotto il minimo del giorno prima. Mi sembra naturale in quanto se all’inizio il flag è uguale a 0 e diventa 1 solo se si presenta la condizione per cui il prezzo va sotto il minimo di ieri, se resetto il flag dopo il buy questo ritorna alla condizione iniziale del flag uguale a zero: ossia devo aspettare nuovamente che il prezzo ritorni sotto il minimo anche per il secondo, terzo … long.
Questo è un esempio che conferma la cosa: FLAG è il TS in basso con il rem, FLAG(1) è il TS in alto che pone il flag uguale a 0 dopo il buy della riga 19.
La linea orizzontale è il minimo del giorno prima: si vede che il primo long viene preso da entrambi in quanto il prezzo scende e risale sopra la linea, mentre il secondo long viene preso solo dal TS con il rem, mentre il secondo non lo prende in quanto aspetta NUOVAMENTE che il prezzo torni sotto la linea orizzontale in quanto azzerando il flag si comporta come la prima volta.
- Ti risulta corretta la cosa?
- Tra l’altro ho visto in altri esempio che nel lunedi viene calcolato come giorno anche la barra daily della domenica notte, anche se vengono esclusi i giorni 6 e 7. Ho scritto ed aggiunto questo (vd sotto) alle condizioni di acquisto/vendita, è corretto?
tradingDays = (OpenDayOfWeek >= 1 and OpenDayOfWeek <= 5). Se si, sai come posso escludere la barra daily della domenica?
(PS: ho riscritto anche ad Emanuele Dolce per l’errore delle 3 operazioni sullo stop&reverse che come vedi nell’immagine continua a presentarsi (operazione tra le 17 e le 18), mi ha detto che ci vuole ancora tempo, CIAO
02/23/2021 at 12:01 AM #162392 -
AuthorPosts
Find exclusive trading pro-tools on