Un'altra sfumatura estremamente importante è che in questo script, nel calcolo dello Sharpe vengono prese in considerazione solo le barre in cui si è verificata una variazione dell'equity:
//--- add only if equity has changedif(m_equities[i] != prev_equity)
{
log_return = MathLog(m_equities[i] / prev_equity); // incremento del logaritmo
aver += log_return; // logaritmo medio degli incrementi
AddReturn(log_return); // riempire l'array di logaritmi incrementalicounter++;// contatore dei ritorni
}
prev_equity = m_equities[i];
La variazione media viene quindi trovata dividendo per il numero di tali barre:
//--- valore medio del logaritmo di incremento
aver /= counter;
Tuttavia, il passaggio agli Sharpe annuali si basa sul rapporto temporale, come se tutte le barre del tf corrente fossero conteggiate nel calcolo:
//--- ricalcolare lo Sharpe ratio al valore annuale in tutti gli altri casi//--- quanti periodi dell'orizzonte temporale corrente si inseriscono in D1double factor = double(PeriodSeconds(PERIOD_D1)) / PeriodSeconds(timeframe);
sharpe = sharpe * MathSqrt(factor); // ricalcolare il valore giornaliero
sharpe = sharpe * MathSqrt(252); // ottenere l'annuale dal giornaliero
Cioè, ancora una volta: lo script trova gli sharps medi per 1 barra con cambio di equity e poi, per trovare quello annuale, lo moltiplica non per il numero di tali barre in un anno, ma per il numero totale di barre di questo tf in un anno (la sua radice, ovviamente). Il che è errato e sovrastima il dato finale.
A quanto pare, lo Sharpe viene calcolato nello stesso modo nel tester?
Kristian Kafarov #: lo script trova lo Sharpe medio per 1 barra con cambio di equity e poi, per trovare quello annuale, lo moltiplica non per il numero di tali barre in un anno, ma per il numero totale di barre di questo tf in un anno (la sua radice, ovviamente). Il che è errato e sovrastima il dato finale.
L'ho notato anch'io. Ecco perché nella mia versione ho aggiunto un'opzione per tenere conto delle barre zero.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Leggere il logaritmo del prezzo
Troverete altri riferimenti
Leggere il logaritmo del prezzo
Troverete altri riferimenti
Un'altra sfumatura estremamente importante è che in questo script, nel calcolo dello Sharpe vengono prese in considerazione solo le barre in cui si è verificata una variazione dell'equity:
//--- add only if equity has changed if(m_equities[i] != prev_equity) { log_return = MathLog(m_equities[i] / prev_equity); // incremento del logaritmo aver += log_return; // logaritmo medio degli incrementi AddReturn(log_return); // riempire l'array di logaritmi incrementali counter++; // contatore dei ritorni } prev_equity = m_equities[i];La variazione media viene quindi trovata dividendo per il numero di tali barre:
Tuttavia, il passaggio agli Sharpe annuali si basa sul rapporto temporale, come se tutte le barre del tf corrente fossero conteggiate nel calcolo:
Cioè, ancora una volta: lo script trova gli sharps medi per 1 barra con cambio di equity e poi, per trovare quello annuale, lo moltiplica non per il numero di tali barre in un anno, ma per il numero totale di barre di questo tf in un anno (la sua radice, ovviamente). Il che è errato e sovrastima il dato finale.
A quanto pare, lo Sharpe viene calcolato nello stesso modo nel tester?
lo script trova lo Sharpe medio per 1 barra con cambio di equity e poi, per trovare quello annuale, lo moltiplica non per il numero di tali barre in un anno, ma per il numero totale di barre di questo tf in un anno (la sua radice, ovviamente). Il che è errato e sovrastima il dato finale.
L'ho notato anch'io. Ecco perché nella mia versione ho aggiunto un'opzione per tenere conto delle barre zero.