Buonasera a tutti,
ho un problema con il backtest, precisamente nella candela del 19 Ottobre 2010 sul grafico dell’Euro/Dollaro (EUR/USD) Giornaliero. Ho programmato un backtest che si interrompe in questa candela, visualizzando l’icona di quando il capitale è azzerato e non è più possibile acquistare nuovi contratti. Il problema è che il capitale in quel punto è ben oltre il capitale iniziale e sarebbe possibile (se solo il backtest non si interrompesse) acquistare nuovi contratti.
Ecco il backtest:
—————————————————————————————————
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
//////////////
// SETUP
/////////////
capitaleiniziale = 1000
// % PERCENTUALE CAPITALE DA INVESTIRE A OGNI OPERAZIONE (%)
ps = 10
// RAPPORTO RISCHIO / RENDIMENTO
rrratio = 1
///////////////////////////////////////////////////
// FINE SETUP
///////////////////////////////////////////////////
////////
// Strategia ('segnalelong' trigger long - 'segnaleshort' trigger short)
////////
mm10 = average[10]
mm50 = average[50]
range1sano = range[1]*(0.25)
range0sano = range[0]*(0.25)
IF close[1] <= (low[1]+range1sano) AND close[0] >= (high[0]-range0sano) AND close[0] > mm10 AND mm10 > mm50 THEN
segnalelong = 1
segnaleshort = 0
ELSIF close[1] >= (high[1]-range1sano) AND close[0] <= (low[0]+range0sano) AND close[0] < mm10 AND mm10 < mm50 THEN
segnalelong = 0
segnaleshort = 1
ELSE
segnalelong = 0
segnaleshort = 0
ENDIF
// SETTA STOP LOSS E TAKE PROFIT
entrypoint = 0
IF segnalelong = 1 THEN
entrypoint = high
ELSIF segnaleshort = 1 THEN
entrypoint = low
ENDIF
stoploss = 0.002
// lo stop loss è 20 pip
///////
// FINE Strategia
///////
// Aggiorna Capitale a ogni operazione
IF STRATEGYPROFIT <> 0 THEN
capitaleattuale = capitaleiniziale + STRATEGYPROFIT
ELSE
capitaleattuale = capitaleiniziale
ENDIF
IF entrypoint > 0 THEN
// calcola numero di contratti da acquistare e stop loss e take profit in unità valuta
numshares = 0
rischiocapitale = capitaleattuale * (ps/100)
rischiopunti = stoploss / TICKSIZE
IF ((rischiopunti*TICKSIZE)<>0) THEN
numshares = (rischiocapitale / (rischiopunti*TICKSIZE))
ENDIF
stoplossmoney = rischiocapitale
takeprofitmoney = stoplossmoney * rrratio
// ENTRA SUL MERCATO
IF segnalelong = 1 THEN
BUY numshares SHARES ROUNDEDDOWN AT entrypoint STOP
ELSIF segnaleshort = 1 THEN
SELLSHORT numshares SHARES ROUNDEDDOWN AT entrypoint STOP
ENDIF
// STOP LOSS e TAKE PROFIT
SET STOP $LOSS stoplossmoney
SET TARGET $PROFIT takeprofitmoney
ENDIF
—————————————————————————————————
Dove sta l’errore? Vi sarei molto grato se riusciste a risolvere questo problema perchè sto provando a risolverlo da giorni senza successo.
E’ un bug di prorealtime? Non vedo errori nel codice e infatti il codice funziona bene in qualsiasi altra parte del grafico, e tra l’altro dopo quella candela il capitale finale viene aggiornato correttamente con la perdita. E’ come se venisse ignorato lo stop loss, il sistema perdesse tutto in quanto il minimo della candela fa perdere tutto il capitale, ma poi il capitale venisse ripristinato correttamente al livello dello stop loss. Cioè è come se saltasse lo stop loss solo temporaneamente.
Grazie per l’aiuto
Ciao,
Scusate se mi sbaglio, non capisco la tua domanda? Non vedo nulla nel codice che smette di negoziazione sulla quantità di capitale?
esatto, il codice non dovrebbe smettere nulla, ma alla fine il backtest termina e se vedi nello screenshot appare l’icona del QUIT. Come è possibile? Dovrebbe andare avanti oltre quella candela.