Target profit non rispettato

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #212865 quote
    Superpensionato
    Participant
    New

    Buongiorno. Domanda per Roberto Gozzi (o chi mi può aiutare). Scusate, è la prima volta che scrivo quindi spero di farlo nel posto giusto e alla persona giusta. Sto usando alcune strategie con trading simulato in real time sul dax a 15 min. Se faccio il back test il target viene preso. Nella strategia live (l’ho visto io in diretta) l’ordine (magari di vendita) se strategia long viene messo a caso dalla macchina (quello dello stop loss invece lo rispetta sempre). Ripeto che nel back test funziona perfettamente. Si tratta di un baco informatico oppure c’è qualcosa che non capisco? Questi sono i codici usati (ho tolto il codice dello stop)

    IF Condizioni long THEN
    StopLossL =
    Targetprofit= Tradeprice+30
    BUY 1 CONTRACTS AT MARKET
    SET STOP LOSS StopLossL
    SET TARGET PROFIT Targetprofit

    Se posso aggiungere una seconda domanda: Ho più strategie sullo stesso ma ho messo un limite (facciamo 2 contratti per esempio) per singola strategia. Proprio oggi entra la prima strategia con 2 contratti, poi prima che vada a target entra la seconda con 1 contratto. Domanda: quindi il limite è per singola strategia e non come posizione totale (perché alla fine c’erano 3 contratti aperti mentre io ne volevo max 2 sul singolo strumento)? E se si allora come si fa ad impostare un limite dei contratti su dax riferito al conto e non alle strategie singole? Grazie mille

    #212884 quote
    robertogozzi
    Moderator
    Master

    Come può non averti segnalato un errore sulla riga 2?   (manca il valore da assegnare a StopLossL)

    #212931 quote
    Superpensionato
    Participant
    New

    Ma no, ho scritto che lo avevo tolto io ne riportare l’esempio. Comunque adesso l’ho rimesso per chiarezza. Quindi?

    IF Condizioni long THEN
    StopLossL =abs(close – lowest[1](low))+2
    Targetprofit= Tradeprice+30
    BUY 1 CONTRACTS AT MARKET
    SET STOP LOSS StopLossL
    SET TARGET PROFIT Targetprofit

    #212967 quote
    robertogozzi
    Moderator
    Master

    Il problema è TRADEPRICE che inizialmente ha valore 0, dopo ogni operazione contiene il prezzo dell’ultima operazione eseguita, quindi prezzo di apertura se hai aperto un’operazione oppure di chiusura se l’hai chiusa.

    Siccome l’hai messo PRIMA dell’entrata, il suo valore sarà 0 oppure il prezzo di chiusura della precedente operazione.

    Però anche mettendolo DOPO l’entrata, dovresti aspettare la prossima candela perché venisse valorizzato, quindi devi metterlo utilizzando il prezzo corrente, CLOSE, al posto di TRADEPRICE, per non restare una candela senza stop né target:

    IF Condizioni long THEN
       StopLossL =abs(close – lowest[1](low))+2
       Targetprofit= close+30
       BUY 1 CONTRACTS AT MARKET
       SET STOP LOSS StopLossL
       SET TARGET PROFIT Targetprofit
    ENDIF

    siccome potrebbero verificarsi dei piccoli gap/lap o slippage, il prezzo corrente non è certo che sia davvero il prezzo d’entrata (in backtest si, ma in demo o reale no), quindi, all’inizio del codice è opportuno che quando viene rilevata una nuova operazione, sia lo stoploss che il target vengano ricalcolati con TRADEPRICE. Ecco il codice completo:

    IF (OnMarket AND Not OnMarket[1])  OR (LongOnMarket AND ShortOnMarket[1]) OR (LongOnMarket[1] AND ShortOnMarket) OR (Not OnMarket AND (StrategyProfit <> StrategyProfit[1])) THEN
       Targetprofit = Tradeprice + 30*PipSize
       SET TARGET PROFIT Targetprofit
    ENDIF
    //
    IF Condizioni long THEN
       StopLossL    = abs(close – lowest[1](low))+2
       Targetprofit = close + 30*PipSize
       BUY 1 CONTRACTS AT MARKET
       SET STOP   LOSS   StopLossL
       SET TARGET PROFIT Targetprofit
    ENDIF

    ho anche aggiunto *PipSize al valore 30, perché venga automaticamente convertito in prezzo, altrimenti può andare bene con il DAX o SP500 ecc…, ma non con il forex; ad esempio aggiungere 30 al prezzo di EurUsd lo renderebbe impossibile da raggiungere, mentre PIPSIZE prima di aggiungerlo lo converte in 0.0030.

    #215574 quote
    Superpensionato
    Participant
    New

    Grazie per la risposta. Ho riscritto il codice come mi hai detto, questa è la versione short ma non cambia il concetto (parliamo del dax e quindi ho tolto il pipsize).  Non so se ho sbagliato qualcosa ma come al solito l’ingresso è corretto, lo stop è corretto ma come ordini pendenti dopo essere entrato correttamente nel trade lista ordini mi dava: 1) un ordine pendente di acquisto al valore (corretto dello stop); 2) un ordine di acquisto con prezzo 1 (sul grafico live diceva 16001 ma le linee sparivano in basso). Premetto che il trade è andato in stop e non ha raggiunto il target ma non credo che l’0rdine del takeprofit fosse corretto. Cosa ho sbagliato (qualcosa nell’update on close, nel cumulateorders o non so).

     

    DEFPARAM CumulateOrders = False
    DEFPARAM FLATBEFORE = 90000
    DEFPARAM FLATAFTER = 210000
    TIMEFRAME(30minute, UPDATEONCLOSE )

    IF (OnMarket AND Not OnMarket[1]) OR (LongOnMarket AND ShortOnMarket[1]) OR (LongOnMarket[1] AND ShortOnMarket) OR (Not OnMarket AND (StrategyProfit <> StrategyProfit[1])) THEN
    Targetprofit = Tradeprice+30
    SET TARGET PROFIT Targetprofit
    ENDIF

    IF NOT ShortOnMarket AND condizioni short

    StopLossS = abs(close – highest[1](high))+5
    Targetprofit= Close+30

    SELLSHORT 1 CONTRACTS AT MARKET
    SET STOP LOSS StopLossS
    SET TARGET PROFIT Targetprofit
    ENDIF

    #215582 quote
    robertogozzi
    Moderator
    Master

    Se metti un codice funzionante posso provare a verificarlo.

    Ad ogni modo, Targetprofit= Close+30 va bene per i Long, non per gli Short. Dovresti sostituirlo con -30.

    #215770 quote
    Superpensionato
    Participant
    New

    2 domande correlate (sto usando prezzi live con il live trading nella versione 11 di prorealtime) :A) Oggi un sistema dove tra le condizioni di ingresso è ATR>20 e che non fornisce segnale nel paper trading è partito ugualmente anche se l’indicatore misurava ATR appena sopra 19 B) Un sistema dove ho messo all’inizio il seguente codice:

    DEFPARAM FLATAFTER = 190000
    TIMEFRAME(15minute, UPDATEONCLOSE )

    ONCE Entrata = 0
    ONCE Barra = 0
    IF OnMarket THEN
    Barra = 0
    Entrata = 0
    ENDIF

    (segue il resto del codice)

    ha fatto partire un ordine prima che fosse chiusa la candela della barra a 15 (non dovrebbe aspettare la fine se ho messo updateonclose?)

    Probabilmente sbaglio qualcosa ma può essere che il mio java abbia qualche baco  e non funzioni bene o sono sbagliati i codici?

    Grazie

    #215802 quote
    robertogozzi
    Moderator
    Master

    Se hai eseguito il codice sul timeframe a 15 minuti, si, partirà quando la candela chiude.

    Se, invece, lo hai eseguito sun un timeframe più piccolo, ad esempio 1 minuto, e l’entrata è in questo timeframe, allora entra alla chiusra della candala a 1 minuto.

    Puoi provare a scrive, all’inizio DEFPARAM PreLoadBars = 0, per evitare il precaricamento di barre.

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

Target profit non rispettato


ProOrder: Trading Automatico & Backtesting

New Reply
Author
Summary

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

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 04/05/2023
Status: Active
Attachments: No files
Logo Logo
Loading...