Ciao Roberto, mi riallaccio a questo topic sulle chiusure per chiederti come scriveresti l’uscita da una strategia di reversal quando si verifica la seguente condizione:
close della barra attuale < close di ieri alle 17:24 (dato che la formula MTF sotto riportata non prende, per i cfd, come riferimento le 17:24)
timeframe(daily,updateOnClose)
dayClose = Dclose(o)
quindi non funziona scrivere nel TF di default:
if longOnMarket and close>dayClose then // l’entrata long è quindi alla notte in gap down e si esce in gain alla chiusura del gap
sell 1 contracts at market
endif
alla riga 2:
close della barra attuale > close di ieri alle 17:24 (dato che la formula MTF sotto riportata non prende, per i cfd, come riferimento le 17:24)
Riguarda una strategia, quindi va aperto un nuovo argomento nel supporto ProOrder.
L’ho spostato io.
Se vuoi fare un riferimento ad altri argomenti puoi postare un link.
Ripropongo allora la domanda in modo più semplice, come si scrive una condizione di uscita del tipo:
esci se la chiusura della barra attuale è maggiore della chiusura di ieri alle 17:24 (chiusura del mercato)?
Eccolo:
IF close > Dclose(1) THEN
SELL AT MARKET //Long
EXITSHORT AT MARKET //Short
ENDIF
Ciao Roberto, ho provato, ma non mi funziona. Potresti sostituire: Dclose(1) con un altra formula?
Dclose (1) non è la chiusura delle 17:24, inoltre vorrei maggiore flessibilità, es. uscire se la chiusura della barra attuale di oggi è maggiore del prezzo di ieri alle 10:00 (ad esempio).
La data puoi stabilirla tu, che siano le 10:00 o quella di chiusura:
IF Time = 172400 THEN
Chiusura = close
ENDIF
IF close > Chiusura THEN
SELL AT MARKET //Long
EXITSHORT AT MARKET //Short
ENDIF
In effetti se metti le 10:00 potrebbero essere quelle di oggi, quindi va fatto così:
ONCE PrevClose = 9999999
ONCE Chiusura = 9999999
IF Time = 100000 THEN
PrevClose = Chiusura
Chiusura = close
ENDIF
IF close > PrevClose THEN
SELL AT MARKET //Long
EXITSHORT AT MARKET //Short
ENDIF
Grazie per la risposta ti chiedo alcuni chiarimenti:
- Come faccio a dirgli che devono essere le 172400 di ieri e non di oggi?
- Se uso Dclose: IG a che orario si riferisce? Mi sembra l’una di notte, ma vorrei una conferma.
- Se uso Dclose con updateOnClose, per avere, quale che sia per IG, l’orario che prende di chiusura devo scrivere, per avere la “chiusura” di ieri: Dclose(0) o Dclose(1)?
Pensavo che alle 17:24 tu facessi chiudere l’operatività.
Usa il secondo post, quello delle 10 e sostituisci l’ora.
Dclose usa la chiusura della barra Daily, adesso è all’una, con l’ora solare alla mezzanotte (per la precisione adesso 00:59:59, prima alle 23:59:59, perché 00:00 era già il giorno successivo, come pure lo è alle 01:00 adesso)
Se usi un TF intraday devi usare Dclose(1) per la barra di ieri, che ci sia UpdateOnClose o meno, però io consiglio di usare il Timeframe DAILY con UpdateOnClose o Default (a meno che tu non abbia raggiunto il limite di 6 timeframe diversi, 5 + quello di default, però i TF con e senza UpdateOnClose sono considerati 1 anche se scritti due volte):
//Questi sono identici, però io preferisco quello che usa il DAILY
//, con UpdateOnClose o con Default:
//
Timeframe(4h,UpdateOnClose)
ChiusuraIeri = Dclose(1)
//
Timeframe(4h,Default)
ChiusuraIeri = Dclose(1) //esattamente come sopra perché
// la chiusura giornaliera di ieri
// non può mai più cambiare
//
Timeframe(Daily,UpdateOnClose)
ChiusuraIeri = close //come sopra, perché UpdateOnClose
// aggiorna la variabile alla chiusura
// della candela DAILY, quindi in
// corso di formazione non cambia.
//
Timeframe(Daily,Default) //come sopra, ma in questo caso
// occorre usare [1] perché CLOSE
// aggiorna la variabile durante la
// formazione in corso.
ChiusuraIeri = close[1]
Nel post sopra sono considerati usati 3 Timeframe (i due indicati, anche se scritti 4 volte, più quello di default, che è quello sul grafico, a meno che non sia uguale ad uno dei due già presenti nel codice).
Ciao Roberto, ho provato ad utilizzare la tua formula in una bozza sperimentale di TS appena costruito.
Tuttavia non mi sembra che PrevClose funzioni bene: non rispetta le distanze con un Flag che ho inserito. Probabilmente sbaglio qualcosa. Quando hai tempo puoi controllare? (Dax 3 minuti)
Grazie
// Dax 3 minuti
DEFPARAM CumulateOrders=False
DEFPARAM Flatbefore = 000000
DEFPARAM Flatafter = 220000
myST= superTrend[3,10]
ONCE PrevClose = 9999999
ONCE Chiusura = 9999999
IF Time = 173000 THEN
PrevClose = Chiusura
Chiusura = close
// if close > PrevClose then
//sell at market
//exitShort at market
//endif
ENDIF
//------------------------------------------
If not onmarket then
maxPrice=0
minPrice=close
highReached=0
lowReached=0
endif
//----------------------------------------
If not onMarket then
maxPrice=Max(maxPrice,high)
if maxPrice-PrevClose>30*pointSize then
highReached=1
else
highReached=0
endif
endif
If not onMarket then
minPrice=Min(minPrice,low)
if PrevClose-minPrice>30*pointSize then
lowReached=1
else
lowReached=0
endif
endif
//-------------------------------------------------
if close crosses under myST and highReached=1 then
crossUnderST=1
endif
if close crosses over myST and lowReached=1 then
crossOverST=1
endif
//----------------------------------------------------
if not onMarket and crossOverST = 1 then
buy 1 contracts at market
endif
if longOnMarket and close>PrevClose then
sell 1 contracts at market
crossOverST=0
lowReached=0
endif
if not onMarket and crossUnderST=1 then
sellShort 1 contracts at market
endif
if shortOnMarket and close<PrevClose then
exitShort 1 contracts at market
crossUnderST=0
highReached=0
endif
//--------------------------------------------------------
set stop pLoss 50
Mi pare funzioni.
Se noti valori erreti Indicami i dati per poterlo verificare.
Prende il valore delle 173000 (cioè della candela che si è aperta alle 172500). Puoi sostituire TIME (orario di chiusura candela) con OPENTIME (orario di apertura candela).
Ho messo nelle righe 28 e 37 del codice sopra riportato rispettivamente: maxPrice-prevClose>50*pointSize e prevClose-minPrice>50*poinSize per rendere il problema più chiaro.
Nell’immagine si vede che la differenza tra le 17:30 di ieri (15707) ed il minimo raggiunto a 15669 (i due rettangoli azzurri nell’immagine) è inferiore a 50 punti, quindi il TS non dovrebbe entrare in quanto il flag lowReached dovrebbe essere 0.