Discussione: Divergenze tra Strategy in Real e Backtest su TS
-
08-10-13, 17:35 #1
- Data Registrazione
- Apr 2010
- Messaggi
- 800
Divergenze tra Strategy in Real e Backtest su TS
Ciao
Sono due giorni che metto sotto pressione Beep facendolo girare con 4 Ts Bobao ottimizzati su Unicredit, Intesa, Fiat, Eni a Time Frame 15 Minuti con Money Management e Stop Loss.
E' stato evidente come chiudendo alle 17.00 lo Strategy e visualizzando successivamente, immediatamente dopo il Back Test i Trade con i relativi risultati siano cambiati..
Per esempio in UCG nel Trade Real ero in guadagno di 37 Euro, mentre con il Back Test mia ha portato la stessa posizione con una chiusura migliorativa piu' avanzata sulla barra portandomi il Trade a un guadagno di 75 Euro..
Cio' mi ha fatto piacere, ma completamente errato...
E' risultata anche a Voi tale Divergenza nei Trade...?
Allego il Listato del Bobao Ottimizzato per UCG che mi ha dato l' errore più evidente:
Buy Script:
INPUTS: @price(CLOSE), @BandPeriods(11, 10, 30, 1), @BigDev(1, 3, 0.1), @SmalDev(0.3, 0.9, 0.03), @matype(SIMPLE), @SLperiods(8),
INPUTS: @trailAmount(200), @trailPercent(10), @stopLoss(80)
SET TRAILING_STOP = @trailAmount
SET TRAILING_PERCENT = @trailPercent
SET STOP_LOSS = @stopLoss
SET BigTop = BollingerBandsTop(@price, @BandPeriods, @BigDev, @matype)
SET BigBottom = BollingerBandsBottom(@price, @BandPeriods, @BigDev, @matype)
SET SmallTop = BollingerBandsTop(@price, @BandPeriods, @SmalDev, @matype)
SET SmallBottom = BollingerBandsBottom(@price, @BandPeriods, @SmalDev, @matype)
SET SignalLine = LR(@price, @SLperiods)
CROSSOVER(SignalLine, BigBottom)
Sell Script:
SET BigTop = BollingerBandsTop(@price, @BandPeriods, @BigDev, @matype)
SET BigBottom = BollingerBandsBottom(@price, @BandPeriods, @BigDev, @matype)
SET SmallTop = BollingerBandsTop(@price, @BandPeriods, @SmalDev, @matype)
SET SmallBottom = BollingerBandsBottom(@price, @BandPeriods, @SmalDev, @matype)
SET SignalLine = LR(@price, @SLperiods)
CROSSOVER(BigTop,SignalLine)Ultima modifica di Thalos; 08-10-13 alle 17:41
--- Trend my Friend ---
-
09-10-13, 14:36 #2
- Data Registrazione
- Apr 2010
- Messaggi
- 800
Oggi di nuovo in prova con parametri modificati, se sbaglia ancora e mette gli ingressi diversi tra Strategy Real time e Back Test bisogna cominciare a preoccuparsi..
--- Trend my Friend ---
-
09-10-13, 15:09 #3
- Data Registrazione
- Jan 2011
- Località
- Genova
- Messaggi
- 1,306
beetrader opera prima in real time *senza aspettare* che si completi la barra in formazione , in backtest usi sempre la barra completamente formata, per questo motivo vedi risultati diversi dal backtest
-
09-10-13, 15:32 #4
Come ti ha scritto BMM devi capire come avviena la sequenza:
in real time i prezzi sono quelli del real time, se poi lo spegni e lo riavvii è chiaro che i prezzi saranno quelli di apertura o chiusura della barra dato che altri non ce ne sono.
Mica se li può inventare...questo sarebbe un errore perchè non conosce la sequenza con cui si è formata la barra.
Se vuoi fare dei backtest i cui risultati corrispondano sempre ogni volta che riapplichi il segnale, allora nel tuo scirpt devi usare sempre e solo le barre precedenti all'ultima. Ad esempio, nel Trading System che hai messo sopra, la tua condizione di Buy è:
CROSSOVER(SignalLine, BigBottom)
Se la trasformi così:
CROSSOVER(REF(SignalLine, 1), REF(BigBottom, 1))
il backtest e la strategia corrispondono perfettamente, perchè non fai mai riferimento alla barra in costruzione.
Permettimi allora di dirti che non è beeTrader che sbaglia ma sei tu che gli dai delle informazioni sbagliate...se corri dietro a due lepri, non ne prendi nemmeno una.
-
09-10-13, 16:46 #5
- Data Registrazione
- Apr 2010
- Messaggi
- 800
Ok non dicevo che Beep sbagliava, facevo notare solo questa differenza e giustamente non avevo capito come veniva calcolata la Barra in Beep. anche perche' ora in questo preciso istante i TS stanno dando in Strategy dei Segnali che se alle 17.00 quando li e vado a rivedermeli in a TS chiuso saranno completamente diversi...
Mi sorge quindi un quesito, se io il TS lo testo in BackTest con determinati parametri inserendo la stringa REF,...1, quando lo metto in strategy real time come mi comporto per essere sicuro che il comportamento sia lo stesso che ho testato...?
Perché se lascio il REF..1 in Real l' Ordine al Broker non arriva in ritardo, in quanto calcolato sulla Barra precedente...?
Pero' se metto la Stringa come e' ora, il Test fatto per settarlo precedentemente non mi serve a niente...?
Sembra una stupidata, ma sono particolari da capire di fondamentale importanza per il settaggio del TS prima di metterlo in Opera e evitare perdite sul Mercato reale...--- Trend my Friend ---
-
09-10-13, 17:36 #6
- Data Registrazione
- Apr 2010
- Messaggi
- 800
-
09-10-13, 20:02 #7
Dipende dal tipo ti trading systema che stai testando e come lo hai costruito:
1) se è uno stop e reverse con calcoli fatti alla chiusura di barra (usi la funzione Date and Time) non c'è problema perchè il comportamento sarà analogo o comunque molto vicino.
2) se non è calibrato a chiusura di barra allora lo devi testare in avanti nel tempo se è a TF Daily, se il TF si restringe ecco che il risultato storico sarà sempre più vicino a quello reale
3) se è a target allora è certo che il risultato storico sarà identico a quello futuro. Infatti se chiudi a taget (x Euro) e il sistema trova il prezzo su una data barra, non ha importanza come si è costruita la barra. IL prezzo c'è e ci sarebbe stato.
4) se è target e stop loss, idem come sopra perchè la verifica che farà beeTrader è quella di vedere se prima c'è il loss e se non lo trova allora e solo allora mette il gain.
5) se è in trailing stop bisogna assolutamente provarlo nel futuro, tick by tick.
.6), 7)..e via discorrendo.
E tutti i software sono fatti così perchè tenere uno storico tick by tick richiede una memoria e accuratezza nella fornitura dati importante. IN genere, e lo abbiamo previsto anche noi, si potrebbe tenere uno storico a tick al massimo di 15 giorni
e verificare su quello storico come cambia il trading system.
Se i clienti lo vorranno lo faremo in tempo zero, ma francamente io non lo uso perchè preferisco andare in avanti nel tempo, così non mi serve nemmeno il bouncing (differenza tra prezzo immesso e prezzo eseguito).
Altra cosa da tenere presente per i TF bassi, sotto o attorno ai 5 minuti: siamo sicuri che a quel determinato prezzo siano passati tutti i contratti che servivano per completare il mio ordine?
Mi spiego: mi posiziono ad un prezzo di 5 euro per vendere le mie 100 azioni, a quel livello ce ne erano già 2000.
Il prezzo 5 viene fatto e poi torna indietro. I contratti passati magari erano 2001 e quindi io ne ho venduti solo 1...
Allora, dato che non c'è questa certezza ecco che si deve fare una verifica in avanti nel tempo e cercare di fare sistemi che prevedano già il prezzo di uscita in modo da piazzarlo in anticipo e così aumentare le probabilità..
Per concludere non c'è nulla che non si possa fare, solo che va fatto con cognizione, pazienza e competenza.
Noi siamo qui per aiutarvi per tutto ciò che in questi anni abbiamo imparato...se corri dietro a due lepri, non ne prendi nemmeno una.
-
09-10-13, 23:11 #8
- Data Registrazione
- Apr 2010
- Messaggi
- 800
Sembrava troppo facile per essere vero...
Ok allora comincio i Test in Real per avere una curva di risposta piu' verosimile a quella del BackTest.....
Non ci si puo' permettere di sbagliare, qui ogni errore si paga molto caro, in ogni senso..--- Trend my Friend ---
-
10-10-13, 09:33 #9
- Data Registrazione
- Oct 2009
- Messaggi
- 566
Ringrazio Thalos per aver sollevato questo aspetto e Tiziano per la risposta dato che anch'io ho trovato questo problema, ovvero la divergenza tra il backtest e il reale.
il codice è molto semplice:
buy scripts
# REQUIRED_BARS is used to adjust how many periods will be used to initialize calculations. Default value is 50 periods.
# Un-comment and edit the line below to set your own value.
# SET REQUIRED_BARS = 50
INPUTS: @periods(10), @trailAmount(100), @trailPercent(10), @stopLoss(400)
SET TRAILING_STOP = @trailAmount
SET TRAILING_PERCENT = @trailPercent
SET STOP_LOSS = @stopLoss
SET hh = HighestHighValue(@periods)
#SET ll = LowestLowValue(@periods)
HIGH = hh
sell scripts (di seguito)
#SET hh = HighestHighValue(@periods)
SET ll = LowestLowValue(@periods)
LOW = ll
(PS: utilizzo per i test un solo future sul CAC40 e sul Dax e il Tf = 5 minuti, quindi il problema del n. contratti non si pone, trattasi di 1 solo contratto).
Chiedo quindi aiuto per capire quale istruzione devo inserire (o come modificare lo script) perché in real time si comporti come nel backtest. Grazie.Ultima modifica di TFiutoT384; 10-10-13 alle 09:52
-
10-10-13, 10:09 #10