stop dinamici valori diversi

Viewing 15 posts - 1 through 15 (of 17 total)
  • Author
    Posts
  • #175966 quote
    leo di menno
    Participant
    Average

    salve, avendo due valori di setup diversi di trade in trade come potrei fare per sfruttarli, oltre che per gli ingressi, anche per gli stop? per esempio, entro long al maxSetup e lo stop dovrebbe essere al minSetup o addirittura stoppare la posizione aperta ed entrare in reverse (per questo avevo pensato di prendere per esempio 2 contratti contrari così che uno chiude il precedente ed un altro rimane in essere)  ho provato a mettere la condizione in caso di long: if close < minSetup then sellshort mycontracts  contract at market, scrivendo questo mi sballa i livelli di maxSetup e minSetup. quale potrebbe essere il modo giusto per scrivere questi stop o stop e reverse usando i valori prefissati?

    #176030 quote
    leo di menno
    Participant
    Average

    con l’aggiunta dei stop loss su questo codice il risultato si sballa

    DEFPARAM FLATAFTER=170000
     
     
    BegTime=094000
    EndTime=163000
    Bolld=BollingerUp[20](close)
    Bollu=BollingerDown[20](close)
    MyContracts=1
    IF Time = 094000 THEN
    maxSetup = highest[3](high[1])
    minSetup = lowest[3](low[1])
    sllong = minSetup
    slshort = maxSetup
    ENDIF
    c1 = (close > Bolld)//+nbpoint*pointsize)
    c2 = (close < Bollu)//+nbpoint*pointsize)
    if intradaybarindex=0 then
    
    tradethisday=0
    else
    if barindex=tradeindex then
    tradethisday=1
    endif
    endif
     
    If close > maxsetup  and c1 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
     
     
    Buy mycontracts contract at minSetup stop
    sell at sllong stop
    endif
    
    If close < minsetup  and c2 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
     
     
    sellshort mycontracts contract at maxSetup stop
    exitshort at slshort stop
    endif
    graphonprice maxSetup coloured(0,255,0,255)
    graphonprice minSetup coloured(255,0,0,255)
    graph tradethisday
    graph c1
    graph c2
    graph Time
    
    #176065 quote
    robertogozzi
    Moderator
    Master

    Per prima cosa gli ordini pendenti d’entrata non sono STOP, bensì LIMIT in quanto acquisti & vendi ad un prezzo migliore rispetto a quello corrente (vedi tabella allegata).

    Poi ho variato alcune cose nel calcolo dello Stop Loss.

    Ho anche aggiunto un target (tp) che è un certo fattore moltiplicativo dello stop loss (ho messo 2, ma puoi provare altri valori, anche decimali se vuoi un TARGET inferiore allo stop loss).

    Infine ho variato la parte iniziale della IF CLOSE… nelle righe di entrata, sia long che short.

    Per il resto mi pare vada bene.

    Volendo puoi aggiungere un trailing stop.

    DEFPARAM FLATAFTER=170000
    BegTime=094000
    EndTime=163000
    Bolld=BollingerUp[20](close)
    Bollu=BollingerDown[20](close)
    MyContracts=1
    IF Time = 094000 THEN
    maxSetup = highest[3](high[1])
    minSetup = lowest[3](low[1])
    sllong   = MinSetup - abs(maxSetup-minSetup)//maxSetup//minSetup
    slshort  = MaxSetup + sllong//minSetup//maxSetup
    tp       = abs(maxSetup-minSetup) * 2  //intervallo tra Min e Max * 2
    ENDIF
    c1 = (close > Bolld)//+nbpoint*pointsize)
    c2 = (close < Bollu)//+nbpoint*pointsize)
    if intradaybarindex=0 then
    tradethisday=0
    else
    if barindex=tradeindex then
    tradethisday=1
    endif
    endif
    If close > minsetup  and c1 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    Buy mycontracts contract at minSetup limit
    sell at sllong stop
    endif
    If close < maxsetup  and c2 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    sellshort mycontracts contract at maxSetup limit
    exitshort at slshort stop
    endif
    SET TARGET PROFIT tp
    graphonprice maxSetup coloured(0,255,0,255)
    graphonprice minSetup coloured(255,0,0,255)
    graph tradethisday
    graph c1
    graph c2
    graph Time
    Pending-STOP-LIMIT-Orders-Ordini-Pendenti.jpg Pending-STOP-LIMIT-Orders-Ordini-Pendenti.jpg Il-Mio-Sistema.itf
    #176104 quote
    leo di menno
    Participant
    Average

    ho provato il codice ma ho notato che non fa piu quello che  serve, l’idea è che alle 9e40 il sistema analizza le 4 candele precedenti e da quello ricava il minsetup e maxsetup, successivamente se si verifica che la chiusura barra è superiore al maxsetup e bollinger apre long con stop o stop e reverse al minsetup e viceversa

    #176106 quote
    robertogozzi
    Moderator
    Master

    Ok, allora basta che metti LIMIT al posto di STOP.

    Perché se vuoi verificare le 4 candele precedenti hai scritto 3 con high e low?

    #176107 quote
    leo di menno
    Participant
    Average

    entra a vari orari senza rispettare le condizioni

    Screenshot_2021-08-24-16-56-04-871_com.miui_.gallery.jpg Screenshot_2021-08-24-16-56-04-871_com.miui_.gallery.jpg
    #176112 quote
    robertogozzi
    Moderator
    Master

    Dimmi su quale strumento (Dax, Nasdaq, ecc…) l’hai provato e su quale time frame.
    Posta anche l’ultimo codice che hai usato per le prove.

    #176119 quote
    leo di menno
    Participant
    Average

    questo è il codice aggiornato ma vedo che ci sono ancora errori, io voglio avere gli stop esattamente al valore maxsetup perr gli short e minsetup per i long, ho fatto varie prove ma si sballa tutto, dax a 10 minuti

    DEFPARAM FLATAFTER=173000
    BegTime=094000
    EndTime=163000
    Bolld=BollingerUp[20](close)
    Bollu=BollingerDown[20](close)
    MyContracts=1
    IF Time = 094000 THEN
    maxSetup = highest[3](high[1])
    minSetup = lowest[3](low[1])
    sllong   = MinSetup// - abs(maxSetup-minSetup)//maxSetup//minSetup
    slshort  = MaxSetup// + sllong//minSetup//maxSetup
    tp       = abs(maxSetup-minSetup) * 2  //intervallo tra Min e Max * 2
    ENDIF
    c1 = (close > Bolld)//+nbpoint*pointsize)
    c2 = (close < Bollu)//+nbpoint*pointsize)
    if intradaybarindex=0 then
    tradethisday=0
    else
    if barindex=tradeindex then
    tradethisday=1
    endif
    endif
    If close > maxsetup  and c1 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    Buy mycontracts contract at maxSetup stop
    sell at sllong stop
    endif
    If close < minsetup  and c2 and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    sellshort mycontracts contract at minSetup stop
    exitshort at slshort stop
    endif
    SET TARGET PROFIT tp
    graphonprice maxSetup coloured(0,255,0,255)
    graphonprice minSetup coloured(255,0,0,255)
    graph tradethisday
    graph c1
    graph c2
    graph Time
    
    #176122 quote
    robertogozzi
    Moderator
    Master

    Perché lo SL lo hai messo all’interno di IF..ENDIF, quindi per gli Short piazza l’ordine STOP solo se il prezzo è < MinSetup, altrimenti no (viceversa per i Long).

    Aggiungi queste righe subito dopo la 30:

    IF LongOnMarket THEN
       sell at sllong stop
    ELSIF ShortOnMarket THEN
       exitshort at slshort stop
    ENDIF
    #180459 quote
    leo di menno
    Participant
    Average
    DEFPARAM FLATAFTER=220000
    BegTime=094000
    EndTime=163000
    
    MyContracts=1
    IF Time = 094000 THEN
    maxSetup = highest[3](high[1])
    minSetup = lowest[3](low[1])
    sllong   = MinSetup
    slshort  = MaxSetup + sllong//minSetup//maxSetup
    tp       = maxSetup+40*pipsize// * 2  //intervallo tra Min e Max * 2
    ENDIF
    
    if intradaybarindex=0 then
    tradethisday=0
    else
    if barindex=tradeindex then
    tradethisday=1
    endif
    endif
    If close > maxsetup  and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    Buy mycontracts contract at maxSetup limit
    sell at sllong stop
    endif
    set target profit tp
    
    graphonprice tp coloured(255,255,0,255)
    graphonprice maxSetup coloured(0,255,0,255)
    graphonprice minSetup coloured(255,0,0,255)
    graph tradethisday
    graph Time
    

    ciao, sto facendo delle prove con questo codice ma benchè individui bene il tp non vende al raggiungimento di tale valore, qual’è l’errore?

    #180462 quote
    robertogozzi
    Moderator
    Master

    Perché set target profit richiede una differenza espressa in prezzo e set target pprofit una differenza espressa in pips (sul Dax è uguale, ma su EurUsd, ad esempio, il primo richiede 0.0040 ed il secondo 40).

    Tu hai assegnato a TP il valore di maxSetup+40*pipsize (linea 11), che è un prezzo MAGGIORATO di 40 pips, quindi inserisce uno STOP LOSS di quasi 16000 pip! (sul grafico lo vedi perfettamente perché è un prezzo, ma SET STOP… lo vede completamente errato).

    Alla linea 11 metti tp  = 40*pipsize e alla linea 25 è meglio che tu usi set target pprofit tp.

    Con GRAPHONPRICE usa graphonprice MaxSeup + tp coloured(255,255,0,255), altrimenti non lo vedi più sul grafico.

    Aggiungi anche queste righe subito dopo la 26, prima dei vari GRAPH…:

    if LongOnMarket then
       sell at sllong stop
    endif

    altrimenti ti mette lo SL quando entra a mercato, ma non successivamente, perché gli ordini pendenti SCADONO automaticamente alla chiusura di ogni candela e, se ti servono ancora, occorre piazzarli di nuovo.

    #180490 quote
    leo di menno
    Participant
    Average

    io volevo un tp del valore maxsetup(che cambia di volta in volta) + x*pipsize mentre come hai scritto tu c è solo 40*pipsize… in più pensavo di mettere al. posto del tp la. seguente stringa, if longonmarket then sell at tp stop endif. secondo te può andare?

    #180493 quote
    robertogozzi
    Moderator
    Master

    Si, può andare, in questo modo risolvi il problema.

    #180498 quote
    leo di menno
    Participant
    Average
    DEFPARAM FLATAFTER=220000
    BegTime=094000
    EndTime=163000
    
    MyContracts=1
    IF Time = 094000 THEN
    maxSetup = highest[3](high[1])
    minSetup = lowest[3](low[1])
    sllong   = MinSetup
    slshort  = MaxSetup + sllong//minSetup//maxSetup
    tp       = maxSetup+40*pipsize// * 2  //intervallo tra Min e Max * 2
    ENDIF
    
    if intradaybarindex=0 then
    tradethisday=0
    else
    if barindex=tradeindex then
    tradethisday=1
    endif
    endif
    If close > maxsetup  and Time >= BegTime and Time <= EndTime  and tradethisday=0 then
    Buy mycontracts contract at maxSetup limit
    endif
    if longonmarket then
    sell at sllong stop
    endif
    if longonmarket  then
    sell at tp stop
    endif
    
    
    graphonprice tp coloured(255,255,0,255)
    graphonprice maxSetup coloured(0,255,0,255)
    graphonprice minSetup coloured(255,0,0,255)
    graph tradethisday
    graph Time

    usando questo codice le operazioni risultano sballate e anche modificando il valore del tp vende sempre alla barra successiva

    #180534 quote
    robertogozzi
    Moderator
    Master

    Perché stai usando STOP al posto di LIMIT (alla riga 28).

    Gli ordini pendenti possono essere di due tipi:

    • STOP   quando il prezzo attuale (nel momento in cui gli ordini vengono piazzati) è migliore del prezzo dell’ordine pendente (in apertura o chiusura che sia), quindi entri o esci ad un prezzo peggiore
    • LIMIT quando il prezzo attuale (nel momento in cui gli ordini vengono piazzati) è peggiore del prezzo dell’ordine pendente (in apertura o chiusura che sia), quindi entri o esci ad un prezzo migliore.

    Ti allego una foto con un grafico che illustra quando usare STOP e quando LIMIT. Le linee VERDI e ROSSE indicano il prezzo d’entrata, il punto BLU indica il prezzo corrente.

    Dovresti SEMPRE verificare, quando piazzi un ordine pendente, se deve essere di tipo LIMIT o STOP, basta che con IF… verifichi se il prezzo attuale è maggiore o minore e se entry Long o Short (la chiusura di un Long è un ordine Short, e viceversa).

    Dovresti anche sempre verificare, con gli ordini pendenti, se il prezzo d’entrata o uscita è sufficientemente distante dal prezzo corrente in modo da rispettare la distanza minima richiesta dal broker (IG in questo caso). Per ogni strumento è diverso, va verificato sulla piattaforma o sul sito di IG. Durante il giorno può variare anche molto. Sul Dax è normalmente 6-7 pip, ma a volte di notte o in caso di alta volatilità può arrivare a 300! Se non la rispetti il backtest non può saperlo, ma quando esegui in demo o in reale la strategia ti verrà interrotta con il relativo messaggio d’errore.

    Pending-STOP-LIMIT-Orders-Ordini-Pendenti.jpg Pending-STOP-LIMIT-Orders-Ordini-Pendenti.jpg
Viewing 15 posts - 1 through 15 (of 17 total)
  • You must be logged in to reply to this topic.

stop dinamici valori diversi


ProOrder: Trading Automatico & Backtesting

New Reply
Author
Summary

This topic contains 16 replies,
has 2 voices, and was last updated by robertogozzi
4 years, 2 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 08/23/2021
Status: Active
Attachments: 4 files
Logo Logo
Loading...