Supertrend

Viewing 15 posts - 1 through 15 (of 21 total)
  • Author
    Posts
  • #121341 quote
    R05
    Participant
    Veteran

    Gent.mi avrei bisogno di aiuto per codificare una strategia multitimeframe che si basa sul supertrend. Le linee guida sono:

    1. 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
    2. 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.

    1-3.jpg 1-3.jpg
    #121349 quote
    robertogozzi
    Moderator
    Master

    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
    #121357 quote
    R05
    Participant
    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.

    2-2.jpg 2-2.jpg
    #121365 quote
    R05
    Participant
    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?

    3.jpg 3.jpg
    #121378 quote
    R05
    Participant
    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.

    1-4.jpg 1-4.jpg
    #121382 quote
    robertogozzi
    Moderator
    Master

    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
    #121385 quote
    R05
    Participant
    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.

    2-3.jpg 2-3.jpg
    #121388 quote
    robertogozzi
    Moderator
    Master

    Verifica il prezzo di chiusura di quella candela ad 1 minuto, probabilmente ha chiuso sopra al supertrend.

    #121390 quote
    R05
    Participant
    Veteran

    Si la chiusura della candela a 1 minuto è stata sopra il supertrend a 30 minuti. Non so se si può fare qualcosa.

    #121397 quote
    robertogozzi
    Moderator
    Master

    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.

    #121400 quote
    R05
    Participant
    Veteran

    Si infatti grazie Roberto, farò un pò di prove per vedere.

    #121488 quote
    R05
    Participant
    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
    #121489 quote
    R05
    Participant
    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.

    #121492 quote
    R05
    Participant
    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
    #121494 quote
    robertogozzi
    Moderator
    Master

    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]

Viewing 15 posts - 1 through 15 (of 21 total)
  • You must be logged in to reply to this topic.

Supertrend


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
R05 @r05 Participant
Summary

This topic contains 20 replies,
has 2 voices, and was last updated by R05
5 years, 11 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 03/06/2020
Status: Active
Attachments: 5 files
Logo Logo
Loading...