Frazionamento in uscita

Viewing 14 posts - 16 through 29 (of 29 total)
  • Author
    Posts
  • #172875 quote
    Fabrizio_T
    Participant
    Junior

    TIMEOPERATE = TIME>075900 AND TIME<180000

    Come C1 e C2 ne sto provando alcuni ma puoi mettere ciò che vuoi.

    C1= close>ExponentialAverage[50](close) and close>ExponentialAverage[10](close)
    C2= close<ExponentialAverage[50](close) and close<ExponentialAverage[10](close)

    #172876 quote
    robertogozzi
    Moderator
    Master

    Ah….. adesso mi sono accorto che hai usato TRADEPRICE (scritto anche TRADEPRICE(1)), che è l’ultimo prezzo tradato, che va bene quando apri uno o più contratti TUTTI insieme e li chiudi TUTTI insieme, altrimenti:

    • se, come in questo caso, ne apri 3 TUTTI insieme, ma poi li chiudi separatamente, devi salvare il prezzo d’entrata in una variabile (PREZZO in questo caso), perché alla prima chiusura TRADEPRICE prende il prezzo della chiusura e oper fare riferimento a quello di apertura dovresti scrivere TRADEPRICE(2), alla successiva chiusura scaleranno ancora tutti di una posizione ed il prezzo d’apertura sarà contenuto in TRADEPRICE(3), ecc…
    • se, invece ne apri più di uno, ma in TEMPI DIVERSI (usando anche DEFPARAM CumulateOrders=True all’inizio) e li chiudi INSIEME o SEPARATAMENTE, dovrai fare riferimento non più a TRADEPRICE, ma a POSITIONPRICE, che è la media dei vari prezzi d’entrata * il numero di lotti per ciascuina entrata.

    Utilizza GRAPH e GRAPHONPRICE per analizzare beme le variabili (te li ho aggiunti alla fine del codice):

    TP1=18
    TP2=12
    TP3=12
     
    SL=15
    ONCE Distanza = 10
    
    TIMEOPERATE = TIME>075900 AND TIME<180000
    C1= close>ExponentialAverage[50](close) and close>ExponentialAverage[10](close)
    C2= close<ExponentialAverage[50](close) and close<ExponentialAverage[10](close)
    
    //************
    // LONG      *
    //************
     
    IF not longonmarket AND C1 AND TIMEOPERATE THEN
    BUY 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    ENDIF
     
    IF COUNTOFLONGSHARES =3 THEN
    Prezzo = TradePrice
    IF (close + Distanza) < Prezzo +TP1*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP1*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFLONGSHARES =2 THEN
    IF (close + Distanza) < Prezzo +TP2*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP2*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP2*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP2*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFLONGSHARES =1 THEN
    IF (close + Distanza) < Prezzo +TP3*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP3*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP3*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP3*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ENDIF
     
    IF longonmarket and not C1 then
    A=COUNTOFLONGSHARES
    SELL A CONTRACT AT MARKET
    ENDIF
     
    iF LONGONMARKET AND NOT TIMEOPERATE THEN
    A=COUNTOFLONGSHARES
    SELL A CONTRACT AT MARKET
    ENDIF
     
    //************
    // SHORT     *
    //************
     
    IF not SHORTOnmarket and C2 AND TIMEOPERATE THEN
    SELLSHORT 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    ENDIF
     
    IF COUNTOFSHORTSHARES =3 THEN
    Prezzo = TradePrice
    IF (close - Distanza) > Prezzo -TP1*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE LIMIT
    ELSIF (close + Distanza) < Prezzo -TP1*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFSHORTSHARES =2 THEN
    IF (close - Distanza) > Prezzo -TP2*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP2*POINTSIZE LIMIT
    ELSIF (close + Distanza) < Prezzo -TP2*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP2*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFSHORTSHARES =1 THEN
    IF (close - Distanza) > Prezzo -TP3*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP3*POINTSIZE LIMIT
    ELSIF (close + Distanza) > Prezzo -TP3*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP3*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ENDIF
     
    IF SHORTONMARKET AND NOT C2 THEN
    A=COUNTOFSHORTSHARES
    EXITSHORT A CONTRACTS AT MARKET
    ENDIF
     
    iF SHORTONMARKET AND NOT TIMEOPERATE THEN
    A=COUNTOFSHORTSHARES
    EXITSHORT A CONTRACTS AT MARKET
    ENDIF
    graphonprice Prezzo
    graphonprice Prezzo+TP1
    graphonprice Prezzo+TP2
    graphonprice Prezzo+TP3
    graphonprice Prezzo-TP1
    graphonprice Prezzo-TP2
    graphonprice Prezzo-TP3
    graph abs(CountOfPosition)           //numero posizioni aperte (positivo se LONG, negativo se SHORT, usando ABS() non fa differenza)
    graph PositionPerf*close/pipsize     //PIPS di guadagno (o perdita, se negativo)
    Fabrizio_T thanked this post
    Calcolo-del-Prezzo-Medio-di-una-Posizione-Position-Average-Price-calculation.jpg Calcolo-del-Prezzo-Medio-di-una-Posizione-Position-Average-Price-calculation.jpg
    #172879 quote
    Fabrizio_T
    Participant
    Junior

    Roberto, stasera dopo le 18 tiro giù dal auto trading pro order il codice “vecchio” e metto in pista per domani questo “nuovo” da te suggerito. Non desidero cadere nell’equivoco dell’adulazione, ma confesso nutrire una forma di piacere nel confrontarmi con persone qualificate e preparate come te. Grazie ancora, seguiranno gli aggiornamenti in merito.

    robertogozzi thanked this post
    #172934 quote
    Fabrizio_T
    Participant
    Junior

    Buongiorno, oggi il Dax ha fatto dei movimenti ampi con TF a 5 minuti e con l’ultimo codice messo a disposizione ecco come si comporta.
    Esempio di barra delle 9:25
    open 15.658,4
    min 15655.9
    max 15691,4
    close 15690,4

    Condizioni hanno innescato ordine di acquisto di 3 contratti a 15659 alle 9:25

    Gli stop loss sono stati caricati regolarmente, ma l’ordine con stop limit continua a non caricarsi per la stessa barra ed in quella successiva che è andata ancora più in alto è rimasto dentro con tutti i 3 contratti. Devo uscire manualmente ed in alcuni casi mi si pianta il robot.

    In definitiva ogni volta che entra con 3 contratti, solo in alcune condizioni e solo nella barra successiva riesce a piazzare l’ordine limit.

    A supporto, qui sotto allego la barra delle 9:25 e un immagine che mostra di come ogni volta entri con 3 contratti, l’ordine limit non risulta mai in essere; in alcune condizioni, l0rdine limit verrà inserito nelle barre successive in altre condizioni non scatta nessun ordine (limit, stop o at market).

    Grazie per l’attenzione.

    Barra-delle-0925.jpg Barra-delle-0925.jpg Cattura.jpg Cattura.jpg
    #172945 quote
    robertogozzi
    Moderator
    Master

    Va tutto bene per quel che mi risulta.

    E’ entrato alle 9:30, ha piazzato gli ordini pendenti ma non ha raggiunto nessun TP per cui è uscito in SL alle 9:45.

    #172955 quote
    Fabrizio_T
    Participant
    Junior

    Ma così non va bene. La logica sarebbe questa:
    Entra ad esempio a 16500.
    Piazza immediatamente lo stop loss per ogni contratto (questo lo fa)
    Piazza immediatamente la vendita di un contratto al raggiungimento del primo target. (questo non lo fa)

    Cosa sta accadendo ora?

    Piazza immediatamente lo stop loss per ogni contratto (questo lo fa)
    NON piazza immediatamente la vendita di un contratto al raggiungimento del primo target.
    Nella barra successiva ed in determinate condizioni piazza un ordine relativo primo contratto in uscita e quando non riesce fallisce la logica del robot.

    Grazie per l’attenzione

    #172959 quote
    robertogozzi
    Moderator
    Master

    Piazza immediatamente la vendita di un contratto al raggiungimento del primo target. (questo non lo fa)“, perché a te non lo fa? A me lo fa.

    Se per piazzare l’ordine pendente intendi piazzarlo immediatamente quando entra a mercato devi dirglielo appositamente. Tu gli hai chiesto di metterli solo quando sono già a mercato determinate posizioni (3, 2 o 1) e questo NON può saperlo subito perché l’ordine potrebbe essere respinto o esguito parzialmente, ecc… quindi ha bisogno di una barra per sapere se (e con quante) posizioni è a mercato.

    Una soluzione può essere quella di usare più TF (se cerchi la parola MTF, Multi o Multiple Time Frame,  troverai un sacco di discussioni ed esempi, oltre a blog e articoli).

    Un’altra soluzione è quella di piazzare immediatamente gli ordini per tutti e 3 i casi (solo la prima volta, poi va bene così com’è). In questo modo:

    TP1=18
    TP2=12
    TP3=12
     
    SL=15
    ONCE Distanza = 10
     
    TIMEOPERATE = TIME>075900 AND TIME<180000
    C1= close>ExponentialAverage[50](close) and close>ExponentialAverage[10](close)
    C2= close<ExponentialAverage[50](close) and close<ExponentialAverage[10](close)
     
    //************
    // LONG      *
    //************
     
    IF not longonmarket AND C1 AND TIMEOPERATE THEN
    BUY 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    Prezzo = close
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE LIMIT
    SELL 1 CONTRACTS AT Prezzo +TP2*POINTSIZE LIMIT
    SELL 1 CONTRACTS AT Prezzo +TP3*POINTSIZE LIMIT
    ENDIF
     
    IF COUNTOFLONGSHARES =3 THEN
    Prezzo = TradePrice
    IF (close + Distanza) < Prezzo +TP1*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP1*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFLONGSHARES =2 THEN
    IF (close + Distanza) < Prezzo +TP2*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP2*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP2*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP2*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFLONGSHARES =1 THEN
    IF (close + Distanza) < Prezzo +TP3*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP3*POINTSIZE LIMIT
    ELSIF (close - Distanza) > Prezzo +TP3*POINTSIZE THEN
    SELL 1 CONTRACTS AT Prezzo +TP3*POINTSIZE STOP
    ELSE
    SELL 1 CONTRACTS AT MARKET
    ENDIF
    ENDIF
     
    IF longonmarket and not C1 then
    SELL AT MARKET
    ENDIF
     
    iF LONGONMARKET AND NOT TIMEOPERATE THEN
    SELL AT MARKET
    ENDIF
     
    //************
    // SHORT     *
    //************
     
    IF not SHORTOnmarket and C2 AND TIMEOPERATE THEN
    SELLSHORT 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    Prezzo = close
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE LIMIT
    EXITSHORT 1 CONTRACTS AT Prezzo -TP2*POINTSIZE LIMIT
    EXITSHORT 1 CONTRACTS AT Prezzo -TP3*POINTSIZE LIMIT
    ENDIF
     
    IF COUNTOFSHORTSHARES =3 THEN
    Prezzo = TradePrice
    IF (close - Distanza) > Prezzo -TP1*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE LIMIT
    ELSIF (close + Distanza) < Prezzo -TP1*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFSHORTSHARES =2 THEN
    IF (close - Distanza) > Prezzo -TP2*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP2*POINTSIZE LIMIT
    ELSIF (close + Distanza) < Prezzo -TP2*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP2*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ELSIF COUNTOFSHORTSHARES =1 THEN
    IF (close - Distanza) > Prezzo -TP3*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP3*POINTSIZE LIMIT
    ELSIF (close + Distanza) > Prezzo -TP3*POINTSIZE THEN
    EXITSHORT 1 CONTRACTS AT Prezzo -TP3*POINTSIZE STOP
    ELSE
    EXITSHORT 1 CONTRACTS AT MARKET
    ENDIF
    ENDIF
     
    IF SHORTONMARKET AND NOT C2 THEN
    A=COUNTOFSHORTSHARES
    EXITSHORT A CONTRACTS AT MARKET
    ENDIF
     
    iF SHORTONMARKET AND NOT TIMEOPERATE THEN
    A=COUNTOFSHORTSHARES
    EXITSHORT A CONTRACTS AT MARKET
    ENDIF
    graphonprice Prezzo
    graphonprice Prezzo+TP1
    graphonprice Prezzo+TP2
    graphonprice Prezzo+TP3
    graphonprice Prezzo-TP1
    graphonprice Prezzo-TP2
    graphonprice Prezzo-TP3
    graph abs(CountOfPosition)           //numero posizioni aperte (positivo se LONG, negativo se SHORT, usando ABS() non fa differenza)
    graph PositionPerf*close/pipsize     //PIPS di guadagno (o perdita, se negativo)

    come vedi ho inserito 3 ordini pendenti, sia dopo BUY che dopo SELLSHORT. Questi li esegue solo la prima volta, poi usa gli altri. Ho dovuto usare CLOSE per il prezzo, in quanto alla chiusura della barra non si sa quale sarà il prezzo d’ingresso. Quindi alla prima barra successiva, se c’è stato un gap o slippage, PREZZO cambierà leggermente, quindi anche i livelli di un’eventuale uscita.
    Uno svantaggio di questa soluzione è che, in caso di uno spike, esce con 1 posizione appena il prezzo più vicino viene raggiunto, mentre tu vorresti che la prima uscita venisse fatta al livello più alto, puoi provare ad eliminare le righe (solo per la prima barra, nelle righe dopo subito successive a BUY e SELLSHORT) relative a TP2 e TP3, tanto restano per le barre successive alla prima con il codice già esistente in precedenza.
    Ho eliminato la A per le uscite, in quanto per uscire con tutte le restanti posizioni è sufficiente NON indicare il numero di contratti.

    Fabrizio_T thanked this post
    #172960 quote
    Fabrizio_T
    Participant
    Junior

    Lo metto in onda subito. Bisogna capire se la piattaforma IG riesce ad accumulare 3 ordini limit alla volta. Avevo provato anch’io quasi la stessa cosa, infatti non avevo messo Prezzo=close 🙁

    Seguiranno esiti. Grazie

    #172967 quote
    robertogozzi
    Moderator
    Master

    Si, io ne ho messi anche 20, non ci sono problemi (almeno sul backtest, in reale non ne ho mai usati più di 2-3).

    #172969 quote
    Fabrizio_T
    Participant
    Junior

    Nel dubbio ecco ciò che mi piacerebbe accadere:
    Compra a 1650.
    Se raggiunto 1668 esce col primo e il secondo sta pronto ad uscire a 1680 ed il terzo sta pronto ad uscire a 1692. (magari nella stessa barra nel caso di uno spike con il terzo se ci arriva)
    Se raggiunto il secondo ed uscito con 1680 sta pronto ad uscire con 1692 (magari nella stessa barra nel caso di uno spike).

    Scusa in anticipo se non avevo specificato.

    #172976 quote
    robertogozzi
    Moderator
    Master

    Tu gli ordini li hai messi all’inverso.

    La prima uscita deve farla a TP1, poi a TP2 ed infine a TP3.

    #172981 quote
    Fabrizio_T
    Participant
    Junior

    Al momento pare parzialmente risolta così in caso di spyke:
    Ho messo solo le due parti al momento modificate.
    Penso di dargliela su… nel senso che spaccherò il codice in 3 codici distinti, ognuno entrerà con un take profit diverso e buonanotte…. Avesso funzionato avrei messo altre condizioni per impedire di mangiare il profitto realizzato da primo o secondo contratto.

    Nel frattempo sempre grazie.

     

     

    IF not longonmarket AND C1 AND TIMEOPERATE THEN
    BUY 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    Prezzo = close
    SELL 1 CONTRACTS AT Prezzo +TP1*POINTSIZE LIMIT
    SELL 1 CONTRACTS AT Prezzo +TP1+TP2*POINTSIZE LIMIT
    SELL 1 CONTRACTS AT Prezzo +TP1+TP2+TP3*POINTSIZE LIMIT
    ENDIF
    
    IF not SHORTOnmarket and C2 AND TIMEOPERATE THEN
    SELLSHORT 3 CONTRACTS AT MARKET
    SET STOP LOSS SL
    Prezzo = close
    EXITSHORT 1 CONTRACTS AT Prezzo -TP1*POINTSIZE LIMIT
    EXITSHORT 1 CONTRACTS AT Prezzo -(TP1+TP2)*POINTSIZE LIMIT
    EXITSHORT 1 CONTRACTS AT Prezzo -(TP1+TP2+TP3)*POINTSIZE LIMIT
    ENDIF
    
    #172983 quote
    Fabrizio_T
    Participant
    Junior

    Anche perchè il robot si interrompe di continuo ora. Va proprio ripensata la logica a questo punto.

    #172996 quote
    robertogozzi
    Moderator
    Master

    Evidentemente si.

    Non può non funzionare, se la logica è corretta.

    Fabrizio_T thanked this post
Viewing 14 posts - 16 through 29 (of 29 total)
  • You must be logged in to reply to this topic.

Frazionamento in uscita


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
Fabrizio_T @fabrizio_t Participant
Summary

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

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