Target profit non rispettato
Forums › ProRealTime forum Italiano › Supporto ProOrder › Target profit non rispettato
- This topic has 7 replies, 2 voices, and was last updated 1 year ago by robertogozzi.
-
-
04/05/2023 at 2:46 PM #212865
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 TargetprofitSe 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
04/05/2023 at 5:20 PM #212884Come può non averti segnalato un errore sulla riga 2? (manca il valore da assegnare a StopLossL)
04/06/2023 at 10:09 AM #212931Ma 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 Targetprofit04/06/2023 at 6:41 PM #212967Il 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:
1234567IF Condizioni long THENStopLossL =abs(close – lowest[1](low))+2Targetprofit= close+30BUY 1 CONTRACTS AT MARKETSET STOP LOSS StopLossLSET TARGET PROFIT TargetprofitENDIFsiccome 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:
123456789101112IF (OnMarket AND Not OnMarket[1]) OR (LongOnMarket AND ShortOnMarket[1]) OR (LongOnMarket[1] AND ShortOnMarket) OR (Not OnMarket AND (StrategyProfit <> StrategyProfit[1])) THENTargetprofit = Tradeprice + 30*PipSizeSET TARGET PROFIT TargetprofitENDIF//IF Condizioni long THENStopLossL = abs(close – lowest[1](low))+2Targetprofit = close + 30*PipSizeBUY 1 CONTRACTS AT MARKETSET STOP LOSS StopLossLSET TARGET PROFIT TargetprofitENDIFho 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.
06/02/2023 at 10:46 AM #215574Grazie 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
ENDIFIF NOT ShortOnMarket AND condizioni short
StopLossS = abs(close – highest[1](high))+5
Targetprofit= Close+30SELLSHORT 1 CONTRACTS AT MARKET
SET STOP LOSS StopLossS
SET TARGET PROFIT Targetprofit
ENDIF06/02/2023 at 3:08 PM #215582Se 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.
06/07/2023 at 3:56 PM #2157702 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
06/08/2023 at 12:55 AM #215802Se 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.
-
AuthorPosts
Find exclusive trading pro-tools on