Errori, bug, domande - pagina 2319

 
Ciao, puoi dirmi come risolvere un errore con la visualizzazione di un prezzo errato? Sta buttando fuori tutti gli indiani.eurusd
 
Slava:

Impostazioni dei simboli, non della grafica.

Nella panoramica del mercato, selezionare "specifica del simbolo" dal menu contestuale del simbolo

 
Igor Semyonov:

Grazie.

Si prega di mostrare i log del terminale al momento del problema dall'inizio

 
Slava:

Grazie.

Si prega di mostrare i log del terminale al momento del problema dall'inizio

Ho inviato il file di log via messaggio privato.

 
Igor Semyonov:

Ho inviato il file di log tramite messaggio privato.

Sì, grazie.

I registri sono tutti puliti.

Mi dica, la situazione che ha descritto continua?

 

Volume senza DoubleToString(Volume, 2). La schermata è EURUSD.

 
Slava:

Sì, grazie.

Tutto è chiaro dai registri.

Mi dica, la situazione che ha descritto continua?

Dopo aver riavviato il terminale, per ora va tutto bene.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

pantural, 2018.11.01 16:03

Ciao cari sviluppatori di MT, vorrei segnalare un bug nell'algoritmo di calcolo dello Sharpe Ratio. Nella relazione in appendice del signorAleksey Vyazmikin dove SR=0,29 ma secondo i miei calcoli è circa 3,7-3,8 (a seconda se zero PnL) suggeriscono che l'errore in assenza di un fattore di scala nella deviazione standard (sqrt(lunghezza)) perché il rendimento medio non dipende dalla lunghezza della serie, converge, e il RMS aumenta come sqrt(lunghezza)

C++

double SharpRatio(vector<double> pnl)

{

double avret = 0;

for (int i = 0; i < pnl.size(); ++i) avret += pnl[i];

avret /= pnl.size();


double var = 0;

for (int i = 0; i < pnl.size(); ++i) var += pow(pnl[i] - avret, 2);

var = sqrt(var / pnl.size()) / sqrt(pnl.size());


return  avret / var;

}

Prendiamo due TC identici. Li avviamo simultaneamente. Un giorno dopo entrambi mostrano la matrice pnl. Il primo è stato fermato, il secondo no. Dopo un altro giorno, il secondo ci ha mostrato esattamente lo stesso pnl.

Cioè, il primo ha pnl[] e il secondo ha pnl[]+pnl[]. Cioè, il commercio del secondo giorno era identico a quello del primo giorno.


Quindi, secondo la formula suggerita, lo Sharpe Ratio del secondo TS sarà sqrt(2) (radice di due) inferiore a quello del primo. Ma hanno scambiato in modo identico!

 
fxsaber:

Prendete due TC identici. Eseguiteli allo stesso tempo. Dopo 24 ore entrambi hanno mostrato una serie di pnl. Il primo è stato fermato, il secondo no. Un altro giorno dopo il secondo ha mostrato esattamente lo stesso pnl.

Cioè, il primo ha pnl[] e il secondo ha pnl[]+pnl[]. Cioè, il commercio del secondo giorno era identico a quello del primo giorno.


Quindi, secondo la formula suggerita, lo Sharpe Ratio del secondo TS sarà sqrt(2) (radice di due) inferiore a quello del primo. Ma hanno scambiato in modo identico!

Come fa la battuta? "Dovrebbero essere uccisi mentre sono piccoli".

Bene, guardiamo l'esempio del file allegato a . Perché tutto sembra spaventoso in teoria, finché non lo senti con le tue mani.

Ci sono 144 trade in questo file, il cui valore di Sharpe è 0,29 (il sito lo mostra con una precisione di 2 decimali, e va bene - nessuno ha bisogno di 5 decimali, in questo caso 2 decimali sono sufficienti per una buona misura per confrontare due strategie).

Sharpe è calcolato come rapporto K/STD, dove:

  • K - il tasso di crescita medio della storia commerciale
  • STD è la deviazione standard dei guadagni nella storia del trading

Supponiamo di avere il doppio dei trade che erano copie dei trade precedenti. Significa che ora abbiamo 288 scambi = 144*2. Allo stesso tempo K non cambierà. Quindi, possiamo cambiare Sharpe solo cambiando STD.

STD iniziale=MathSqrt(X2/(n-1)), dove:

  • X2 è la somma dei quadrati delle deviazioni dalla media X_aver
  • n - numero di tead == 144

Cioè Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)

Abbiamo raddoppiato il numero di operazioni, quindi per una storia due volte più grande il nuovo Sharpe è calcolato così

SharpeNew=MathSqrt(X2_new/(2*144-1))

Dove X2_new=2*X2. Pertanto il rapporto SharpeNew/Sharpe = MathSqrt(X2/(144-1)) / MathSqrt(X2_new/(2*144-1)) =

MathSqrt(X2/(144-1))  / MathSqrt(2* X2/(2*144-1)) =  MathSqrt(X2/(143))  / MathSqrt(2* X2/(283))= MathSqrt(X2*283/(2*143*X2))= MathSqrt(283/286)= 0.994741 

Anche se ho confuso il denominatore con il numeratore, SharpeNew sarà nell'intervallo 0,292919- 0,296025. Cioè, la differenza sarà da qualche parte sulla terza cifra.

Ma non di 10-20 volte. Controllate voi stessi dove ho sbagliato.

 
Rashid Umarov:

Qual è la battuta? "Dovrebbero essere uccisi mentre sono piccoli".

Lei mi ha frainteso.

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

fxsaber, 2018.11.06 13:23

Allora secondo la formula proposta, lo Sharpe ratio del secondo TS sarebbe sqrt(2) (radice di due) inferiore al primo. Ma hanno scambiato in modo identico!


Intendevo la formula citata di C++.


E nella formula usata in MT, ovviamente, uno non verrebbe sottratto. Allora l'esempio proposto, non importa quanti intervalli di 144, Sharp sarebbe sempre lo stesso.