R05Participant
Veteran
Gent.mi avrei bisogno di aiuto per codificare una strategia multitimeframe che si basa sul supertrend. Le linee guida sono:
- time frame 15 minuti, si usa il supertrend come supporto e resistenza; mi spiego meglio: quando il supertrend è rosso utilizzerò il tetto del supertrend per provare ad andare short e viceversa quando è verde
- time frame a 1 minuto: l’entrata effettiva è a 1 minuto in quanto a me serve che sul minuto il prezzo, ad esempio per il long, vada sotto il valore del supertrend a 15 minuti, faccia un false breakout, torni indietro e quindi compro sul massimo della candela a 1 minuto
Ho provato a fare il seguente codice, ma ovviamente come mi accade spesso non fa quello che mi serve.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 220000
timeframe(15 minutes,updateonclose)
// Condizioni per entrare su posizioni long
indicator1 = SuperTrend[3,10]
if indicator1 < close then
coloreverde = indicator1
endif
// Condizioni per entrare su posizioni short
indicator1 = SuperTrend[3,10]
if indicator1 > close then
colorerosso = indicator1
endif
timeframe(default) //time frame 1 minuto
// Condizioni per entrare su posizioni long
IF low<coloreverde THEN
BUY 1 CONTRACT AT high stop
ENDIF
// Condizioni per entrare su posizioni long
IF high>colorerosso THEN
SELLSHORT 1 CONTRACT AT low stop
ENDIF
// Stop e target
SET STOP pLOSS 15
SET TARGET pPROFIT 25
Vi allego comunque un’immagine per capire meglio: dow jones, oggi alle 9:23 ad 1 minuto il prezzo ha superato il valore del supertrend, ha fatto un false breakout ed è tornato indietro: io devo comprare sul minimo della candela in cui c’è stato il false breakout, e quindi entrerò sul minimo della candela a 1 minuto delle 9:23. Con stop sopra il massimo della candela ad 1 minuto.
La cosa che può farti di sbagliato è che, nel caso di short (per il long è l’opposto), HIGH abbia superato il supertrend rosso quindi la tua condizione alla riga 30 è vera, mentre anche CLOSE può essere rimasto sopra al SuperTrend senza tornare indietro.
Sostituisci la riga 24 con:
IF low<coloreverde and close>coloreverde THEN
e la riga 30 con:
IF high>colorerosso and close<colorerosso THEN
R05Participant
Veteran
Grazie Roberto, gentilissimo. In parte è stato risolto il problema, anche se ci sono delle operazioni che non dovrebbero esserci. Ti allego il file, in pratica con il supertrend verde a 15 minuti ci sono operazioni short.
R05Participant
Veteran
Gent.mo Roberto, ho fatto una piccola modifica, ho tolto le condizioni sotto il timeframe a 15 (ora per comodità ho messo due minuti ma solo perchè non sono andato troppo indietro con l’esempio visto che era di oggi) minuti come di seguito.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 220000
timeframe(2 minutes,updateonclose)
// Condizioni per entrare su posizioni long
indicator1 = SuperTrend[3,10]
// Condizioni per entrare su posizioni short
indicator1 = SuperTrend[3,10]
timeframe(default) //time frame 1 minuto
// Condizioni per entrare su posizioni long
IF low<indicator1 and close>indicator1 THEN
BUY 1 CONTRACT AT high stop
ENDIF
// Condizioni per entrare su posizioni long
IF high>indicator1 and close<indicator1 THEN
SELLSHORT 1 CONTRACT AT low stop
ENDIF
// Stop e target
SET STOP pLOSS 15
SET TARGET pPROFIT 25
Ho notato che il sistema va in confusione a cavallo dell’incrocio del supertrend cioè quando da verde passa a rosso e viceversa. Ti allego un esempio. Si può fare qualcosa?
R05Participant
Veteran
Si Roberto posso dirti con tranquillità qual è il problema: ho messo in demo il sistema e ho potuto seguire le operazioni: non è tanto il problema che ti menzionavo nel post precedente e cioè quando cambia colore, ma il problema è proprio nelle condizioni stesse, infatti come nel file che allego col supertrend a 3 minuti rosso e quindi doveva fare solo operazioni short, alle 16.01 e alle 16.02 la candela ha avuto il minimo inferiore e il close superiore al supertrend (così come da condizioni generali della strategia per il long) e quindi mi ha aperto le posizioni long. Ora speriamo di riuscire a risolverlo.
Il problema di entrate indesiderate è dovuto ad un errore logico tra le righe 9 e 19 (del tuo primo post), in quanto quando è vero un colore devi azzerare l’altro, altrimenti sono veri entrambi e quando finisce un’operazione ne inizia un’altra sempre LONG perché alla riga 24 c’è il LONG come prima istruzione, quindi non arriva mai a fare lo short.
Sostituisci le righe 9-19 con:
// Condizioni per entrare su posizioni long
indicator1 = SuperTrend[3,10]
if indicator1 < close then
coloreverde = indicator1
colorerosso = 0
endif
// Condizioni per entrare su posizioni short
indicator1 = SuperTrend[3,10]
if indicator1 > close then
colorerosso = indicator1
coloreverde = 0
endif
R05Participant
Veteran
Si Roberto grazie il problema è stato risolto, solo che ora al verificarsi di quelle condizioni non apre nessuna posizione nemmeno nella direzione corretta. Mi spiego meglio con un allegato: la candela delle 16:50 sul minuto non mi ha fatto entrare short, proprio perchè, credo, sia l’high che il close sono sopra il supertrend mentre nelle condizioni generali il close deve essere sotto: quindi mentre prima mi faceva fare l’operazione nell’eventualità a rialzo adesso invece quella, che è sbagliata non me la fa fare ed è giusto così e quindi è risolto, ma in questo caso anche quella che dovrebbe essere corretta non viene fatta.
Verifica il prezzo di chiusura di quella candela ad 1 minuto, probabilmente ha chiuso sopra al supertrend.
R05Participant
Veteran
Si la chiusura della candela a 1 minuto è stata sopra il supertrend a 30 minuti. Non so se si può fare qualcosa.
Cosa vuoi fare devi stabilirlo tu, se va bene anche se chiude sopra il supertrend (o sotto per l’opposto) allora andava bene anche prima della mia risposta iniziale (a parte l’altro errore logico dell’azzeramento dei colori opposti), però avevi detto che non è quello che volevi.
Devi decidere tu quali sono le condizioni.
R05Participant
Veteran
Si infatti grazie Roberto, farò un pò di prove per vedere.
R05Participant
Veteran
Gent.mo Roberto ti confermo che il codice è ok, va bene così. Volevo chiedere un’altra cosa: una volta entrato in posizione e preso lo stop posso fare il rientry alle stesse condizioni della prima operazione? Solo un rientry.
Io ho visto il codice seguente, il problema è che quando prendo lo stop, mi fa aprire subito la posizione alla candela successiva senza aspettare che ci siano le stesse condizioni della prima operazione o comunque entrare allo stesso livello della prima operazione sempre nella stessa direzione. Si potrebbe fare qualcosa?
IF NOT ONMARKET THEN
IF POSITIONPERF(1)<0 and z < (s -b) and low<t THEN //qui devi aggiungere le tue condizioni per LONG
BUY 1 CONTRACTS AT MARKET
ENDIF
IF POSITIONPERF(1)<0 and z > (s -a) and high>s then //qui devi aggiungere le tue condizioni per SHORT
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
ENDIF
R05Participant
Veteran
Forse ho capito qual è il problema: non devo mettere at market ma devo mettere le stesse condizioni di acquisto/vendita. Io ho messo at market, ora mi sono accorto.
R05Participant
Veteran
Scusandomi per prima, chiedo aiuto per capire come fare a ad aprire le posizioni ad esempio solo tra le 15 e le 18 ma se l’ultima operazione è incorso non deve chiuderla alle 18. L’istruzione seguente ha il limite di chiudere tutto alle 18, a me servirebbe che se l’operazione è aperta di lasciarla andare fino alla conclusione con stop o profit.
DEFPARAM FLATBEFORE = 150000
DEFPARAM FLATAFTER = 180000
Non usare DEFPARAM, ma entra a mercato con:
[scode]
If time >= 150000 and time <= 180000 then
Buy 1 contract at market //o Sellhort
Endif
[/scode]