Ciao Roberto, ti volevo chiedere se questi tre codici per dire al TS di non tradare dopo x barre sono equivalenti.
Te lo chiedo perchè a volte i risultati sono differenti. Quindi o non sono completamente equivalenti o c’è qualche problema nel proBackTest come penso.
CODICE A
ONCE BarCount = 0
ONCE TradeON = 1
IF OnMarket AND Not OnMarket[1] THEN
TradeON = 0
BarCount = 0
ENDIF
IF Not OnMarket THEN
BarCount = BarCount + 1
ENDIF
IF BarCount >10 THEN
TradeON = 1
ENDIF
CODICE B
if not OnMarket and OnMarket[1] then
myBar = barIndex[1]
endif
if barIndex-mybar>10 then
tradeON = 1
else
tradeON = 0
endif
CODICE C
nBarStop=10
if onMarket[1]=1 and onMarket=0 then
start=barIndex[1]
endif
tradeON=barIndex-start>nBarStop
A è corretto.
B alla riga 2 togli [1] a Barindex.
C alla riga 3 togli [1] a Barindex.
Dovrebbero funzionare, non ho verificato.
Se usi GRAPH lo verifichi velocemente:
Graph Barcount //A
Graph BarIndex-MyBar //B
Graph barIndex-start //C
I codici B e C quando sono uguali e quando sono uguali al codice A sono scritti entrambi con [1] come li avevo scritti.
Ho testato questa semplice parte di un codice più complesso . (DAX 15 minuti).
Con 10 K di storico sul Dax a 15 minuti i tre codici sono uguali (immagine 10K) però già a 50k sono diversi (immagine 50K). Puoi provare?
CODICE A
defparam cumulateorders = false
avgHull = average[130,7]
//————————————————-
ONCE BarCount = 0
ONCE TradeON = 1
IF OnMarket AND Not OnMarket[1] THEN
TradeON = 0
BarCount = 0
ENDIF
IF Not OnMarket THEN
BarCount = BarCount + 1
ENDIF
IF BarCount >10 THEN
TradeON = 1
ENDIF
//————————————————————–
if close > avgHull and tradeON=1 then
buy 1 contract at market
endif
//——————————————————————————————–
set stop %loss 0.8
set target %profit 1.5
//————————————————————————————-
CODICE B
defparam cumulateorders = false
avgHull = average[130,7]
//————————————————-
if not OnMarket and OnMarket[1] then
myBar = barIndex[1]
endif
if barIndex-mybar>10 then
tradeON = 1
else
tradeON = 0
endif
//————————————————————–
if close > avgHull and tradeON=1 then
buy 1 contract at market
endif
//——————————————————————————————–
set stop %loss 0.8
set target %profit 1.5
//————————————————————————————-
CODICE C
defparam cumulateorders = false
avgHull = average[130,7]
//————————————————-
nBarStop=10
if onMarket[1]=1 and onMarket=0 then
start=barIndex[1]
endif
tradeON=barIndex-start>nBarStop
//————————————————————–
if close > avgHull and tradeON then
buy 1 contract at market
endif
//——————————————————————————————–
set stop %loss 0.8
set target %profit 1.5
//————————————————————————————-
Ecco il test a 100k dei tre sistemi, secondo me NON funziona bene il proBackTest (perde per strada qualche operazione ogni tanto il che sarebbe abbastanza grave)
Se hai tempo prova a testare i tre TS sopra riportati con vari periodi storici, e se confermi la cosa apro una segnalazione al reparto tecnico
A alla riga 3 lascia solo OnMarket.
B e C devi lasciare [1], hai ragione.
Con GRAPH i valori sono identici oppure no?
Sono uguali fino a che non trovi l’operazione mancante. Questa si trova prima dall’equity line che dal graph.
A parte problemi (da verificare con certezza) del probacktest, i codici B e C sono uguali,
Non sono ancora convinto che sia uguale a questi il codice A.
Riesci ad accertare se i tre codici sono uguali con sicurezza ?(quando li provo in TS complessi le differenze sono rilevanti)
Ciao Roberto, devo ancora verificare bene se: il codice A è uguale o simile ai codici B e C (che sono uguali)
Per quanto riguarda invece il funzionamento del proBackTest la cosa è chiara: non funziona bene (lo avevo notato anche altre volte con TS e strumenti differenti, ma senza porgervi troppa attenzione).
Guarda queste due slide dello stesso TS in cui è applicato una volta il codice B ed un altra volta il codice C (vedi sopra).
Alle 20: 25 i risultati sono differenti, in quello con il codice C mancano due operazioni che il proBackTest ha saltato.
Alle 20:27 ho semplicemente riapplicato gli stessi TS e questa volta i risultati sono uguali! (come devono essere dato che i due codici sono equivalenti).
Cosa ne pensi? Ti è mai capitato?
Anche a me danno, a volte, risultati diversi. Tutti e tre i codici.
Faccio il backtest ed ho un risultato, lo rifaccio e cambia, oppure lo cambia a quello successivo ancora e se lo faccio di nuovo torna com’era prima.
Non capisco il perché, evidentemente c’è un motivo (o un difetto) tecnico che non conosco.
Ti consiglio di chiedere l’assistenza di ProRealTime.
Per quanto riguarda il probacktest è evidente che ha dei problemi. La cosa “sembra” migliorare togliendo la modalità “probacktest in modalità tick per tick”.
Per quanto riguarda invece l’uguaglianza dei tre codici, dalle mie prove risultano essere tutti e tre uguali SE utilizzati in codici semplici. In codici complessi (dove ci sono altri snippets) l’unico che funziona bene (ossia che rispetta sempre gli intervalli) è il codice A, quindi conviene utilizzare sempre questo.