TrendLong = DClose(1)> Mediana AND DClose(1)>DOpen(1) //ChiusuraGiornoPrima > MedianaGiornoPrima
TrendShort = DClose(1)< Mediana//ChiusuraGiornoPrima < MedianaGiornoPrima
CloseLong = DClose(1)>DOpen(1)//ChiusuraGiornoPrima > AperturaGiornoPrima
CloseShort = DClose(1)<DOpen(1)//ChiusuraGiornoPrima < AperturaGiornoPrima
PriceLong = Close<DClose(1)
PriceShort = Close>DClose(1)
//------------------------------------------------------------------------------------------------------------
If NOT LONGONMARKET AND TrendLong AND CloseLong AND PriceLong then
buy 1 shares at market
Buonasera, il pezzo di codice che allego nelle mie intenzioni dovrebbe aprire la posizione al giorno n+1 se e solo se per esempio la chiusura della barra giornaliera (la valutazione è sulla barra giornaliera anche se poi opero sui 15 minuti per il giorno successivo) è stata sopra la mediana con chiusura sopra l’apertura, purtroppo backtestando questa prima parte mi ritrovo che apre le posizioni ogni giorno anche se, per esempio la chiusura è sopra la mediana ma sotto l’apertura.
Qualcuno può farmi capire dove sbaglio?.
Ringrazio sentitamente.
È difficile dirlo senza il cudice completo.
Così sembra corretto, seppure con qualche ridondanza (la riga 3 è già compresa nella 1).
Tu operi sui 15 minuti del giorno 5 (supponiamo sia oggi ad esempio), sulla base delle candele giornaliere dei giorni 4 e 3. Oppure del solo giorno 4. Dipende se hai usato UpdateOnClose o Default con il timeframe giornaliero.
Buongiorno, grazie della risposta. In effetti riga 3 l’ho inglobata nella 1 dopo per fare una verifica. Mi spiego meglio: io opero nel giorno 5 (a 15 minuti) e voglio che entri in posizione solo se sono verificate entrambe le condizioni nella candela giornaliera del giorno 4 (quindi chiusura sopra la mediana del giorno e chiusura verde). Backtestando il sistema lui entra ogni giorno, anche se quello precedente non ha chisuo sopra la mediana o sopra l’apertura. Mi puoi spiegare cosa intendi per “Dipende se hai usato UpdateOnClose o Default con il timeframe giornaliero”.
Il codice completo in realtà lo sto costruendo perchè è complesso, ma già la prima parte non funziona nel senso che apre la posizione anche se non dovrebbe e non riesco a capire perchè.
UpdateOnClose aggiorna i dati alla chiusura della barra, quindi CLOSE si riferisce all’ultima candela chiusa, mentre Default aggiorna i dati secondo il passo del TF che è sul grafico quando la strategia viene eseguita, in backtest o autotrading, nel tuo caso 15 minuti, per cui CLOSE si riferisce al prezzo corrente.
Mi par di capire che così come è scritto prende le barre a 15 minuti mentre deve prendere i dati della barra giornaliera precedente. Come si può fare? Devo settare il grafico sul giornaliero in modo che per es. peschi nel giorno 2 i dati del giorno precedente? Non è rilevante il time frame 15 minuti anche perchè la logica è di entrare nel giorno 2 e poi o andare a take profit/stop loss o chiudere entro le 22; si entra una sola volta a determinate condizioni.
Grazie della risposta.
Con questo vedrai sul grafico dei prezzi la differenza della media a 20 periodi calcolata sia sulla chiusura che in corsi.
Eseguila da un TF a 15 minuti:
Defparam CumulateOrders = false
//
timeframe(daily,updateonclose)
mm1 = average[20,0](close)
//
timeframe(daily,default)
mm2 = average[20,0](close)
//
timeframe(default)
Buy at -close limit
GraphOnPrice mm1 coloured(255,0,0,255) as “mm1”
GraphOnPrice mm2 coloured(0,0,255,255) as “mm2”
Buongiorno, scusami ma non capisco la tua risposta. Non è possibile impostare le condizioni?
Senza il codice non riesco a dirti niente circa il tuo codice.
Dal mio esempio vedi come fare. In ognuno di essi basta che aggiungi [1] per accedere ai dati della candela precedente, [2] per la seconda candela precedente, ecc… .
Quindi scegli tu quale giorno prendere.
Buongiorno, il codice è:
DEFPARAM CUMULATEORDERS = false
DEFPARAM FLATAFTER = 215500
//------------------------------------------------------------------------------------------------------------
Mediana = (DHigh(1)+DLow(1))/2
MyRange = (DHigh(1)-DLow(1))/2
TrendLong = DClose(1)> Mediana AND DClose(1)>DOpen(1) //ChiusuraGiornoPrima > MedianaGiornoPrima
TrendShort = DClose(1)< Mediana//ChiusuraGiornoPrima < MedianaGiornoPrima
CloseLong = DClose(1)>DOpen(1)//ChiusuraGiornoPrima > AperturaGiornoPrima
CloseShort = DClose(1)<DOpen(1)//ChiusuraGiornoPrima < AperturaGiornoPrima
//------------------------------------------------------------------------------------------------------------
if intradaybarindex = 0 then
countposition=0
endif
condnbposperday=countposition < 1
If NOT LONGONMARKET AND TrendLong AND CloseLong AND condnbposperday then
buy 1 shares at DClose(1)limit
countposition=countposition+1
set stop ploss DLow(1)
set target profit (DHigh(1)+MyRange)
endif
If NOT SHORTONMARKET AND TrendShort AND CloseShort AND condnbposperday then
buy 1 shares at DClose(1)stop
countposition=countposition+1
set stop ploss DLow(1)
set target profit (DLow (1)-MyRange)
IF time = 214500 AND OnMarket THEN
SELL AT MARKET //chiudere i LONG, se aperti
EXITSHORT AT MARKET //chiudere gli SHORT, se aperti
ENDIF
endif
E’ da sistemare in molti punti, la mia intenzione è: verificate le condizioni sulla barra del giorno n apro la posizione il giorno n+1 e la chiudo o a target, o in stop loss o alle 21.45. Backtesando così non apre e chiude come dovrebbe.
Alla riga 16 usi LIMIT, ma sei certo che la chiusura sia maggiore della chiusura di ieri + la distanza richiesta da IG?
Alla riga 22, invece c’è il problema opposto, perché STOP?
Alle righe 18 e 24 indichi lo SL in modo errato: 1) usa LOSS, senza “p” iniziale in quanto non usi pips 2) devi indicare una differenza di prezzo, non un prezzo, pensa che se fosse il Dax indicheresti quasi 12000 pips di SL!
Alle righe 19 e 25 non hai usato la “p” con PROFIT, correttamente, però il TP è enorme, più dello SL!
Per il resto mi pare possa andare bene.
Hai ragione, devo indicare una differenza di prezzo e non un prezzo, sono abituato a fissare take profit di prezzo.
Grazie mille
Se ci fosse anche la possibilità di indicare un prezzo, sia per il TP che per lo SL sarebbe utile, per non dovere fare i calcoli col rischio di sbagliare 🙂