Ciao Roberto, non riesco ad uscire correttamente con gli ordini limite nel secondo codice sotto riportato. Lo puoi controllare – riscrivere (anche diversamente)?
Questo codice (codice 1) con ordini “normali” funziona correttamente (prova su cfd Dax – 15m) : il sistema liquida la prima parte della posizione dopo 50 punti di gain e la seconda parte dopo 100 punti oltre questi 50 punti.
defParam cumulateOrders =false
positionSize = 2
cLong = close crosses over average[50,0]
If not onMarket and cLong then
buy positionSize contract at market
set stop pLoss 100
flagL = 0
elsIf longOnMarket and (close – tradePrice(1)) > 50*pointSize and flagL = 0 then
sell (positionSize/2) contract at market
flagL = 1
elsIf longOnMarket and (close – tradePrice(1)) > 100*pointSize and flagL = 1 then
sell (positionSize/2) contract at market
flagL = 0
endif
Poi ho riscritto il codice con ordini limite in modo che il TS esca ESATTAMENTE a 50 e 100 punti (100 sempre contando dopo i primi 50 punti).
Tuttavia il TS liquida correttamente la prima parte a 50 punti esatti e sempre ad altri 50 punti (e non 100) la seconda parte, e non capisco il motivo (vedi immagine, sistema B sopra).
defParam cumulateOrders =false
positionSize = 2
cLong = close crosses over average[50,0]
If not onMarket and cLong then
buy positionSize contract at market
set stop pLoss 100
flagL = 0
elsIf longOnMarket and flagL = 0 then
sell (positionSize/2) contract at tradePrice(1) + 50*pointSize limit
flagL = 1
elsIf longOnMarket and flagL = 1 then
sell (positionSize/2) contract at tradePrice(1) + 100*pointSize limit
flagL = 0
endif
Ho provato ma non funziona, inoltre non splitta più nemmeno la posizione.
Perché FlagL va settato ad 1 al di fuori dell’IF dove vengono piazzati gli ordini, altrimenti lo rimette a zero dopo la prima uscita:
defParam cumulateOrders =false
positionSize = 2
cLong = close crosses over average[50,0]
IF lONGOnMarket THEN
IF abs(CountOfPosition) < abs(CountOfPosition)[1] THEN
Flagl = 1
ENDIF
ENDIF
If not onMarket and cLong then
buy positionSize contract at market
set stop pLoss 100
flagL = 0
elsIf longOnMarket and flagL = 0 then
sell (positionSize/2) contract at tradePrice(1) + 50*pointSize limit
elsIf longOnMarket and flagL = 1 then
sell (positionSize/2) contract at tradePrice(1) + 100*pointSize limit
endif
Ciao Roberto, lo ho provato e funziona, ora provo a metterlo nel sistema reale.
Una cosa al volo: in base alla tua esperienza da che cosa può dipendere se un TS viene eseguito nel backtest e non viene eseguito nel proOrder? (nella lista del proOrdere il TS è attivo ma non entra e non compare nesun segnale)
Queste possono essere le principali cause (tradotto da un post di Nicolas):
- Differenza di prezzo (Spread)
- Slittamento (slippage)
- Rifiuto di ordini per uno dei motivi sopra indicati, ma anche per la distanza consentita dal prezzo corrente per inserire ordini in sospeso (nota come “distanza minima”)
- Orari di negoziazione diversi (codice ProOrder lanciato in un fuso orario diverso / orari personalizzati, dall’utente)
- Problema di codifica: divisione per errore zero, periodi nulli o negativi per indicatori, ecc…
- Mancanza di reattività dei server demo IG (se IG è il broker), anche se questo è notevolmente migliorato rispetto allo scorso anno
- Effettuare backtest senza l’opzione tick-by-tick
- L’istruzione “set stop trailing” che dà a IG il controllo totale del tuo stoploss, può essere spostata in modo diverso tra i conti a causa dei punti di cui sopra
- Conti a rischio limitato e loro regole
- Regole e commissioni di stoploss garantite
- Avviare una strategia in un momento diverso (1 ora o anche 1 minuto dopo): a seconda del codice della strategia, i risultati di alcuni calcoli potrebbero essere diversi
- Margine richiesto sul conto di trading (non vengono effettuati test demo o backtest su questo argomento)
- Tariffe notturne e infrasettimanali
- Adeguamento automatico degli ordini stop controllati o meno all’avvio del ProOrder
- Distanza minima utilizzata nei backtest per ordini pendenti, non la stessa del trading reale, a causa dei requisiti del broker
- Dimensioni del contratto diverse tra backtest e live
poiché i backtest vengono testati solo sulla cronologia senza alcuna connessione al mercato live, potresti riscontrare differenze con l’ambiente di trading dal vivo reale soggetto ad allargamento dello spread, slippage, ecc…
Controllo bene e ti farò sapere, comunque lo stesso TS era già entrato quindi oggi o IG o il proOrder non hanno rispsto al segnale
ora ho disattivato il TS da proOrder (era ancora in attesa di segnali), appena il TS esce da proBackTest lo riattivo in proOrder