Erreurs, bugs, questions - page 2319

 
Slava:

Paramètres des symboles, pas des graphiques.

Dans l'aperçu du marché, sélectionnez "spécification du symbole" dans le menu contextuel du symbole.

 
Igor Semyonov:

Merci.

Veuillez montrer les journaux du terminal au moment du problème, depuis le début.

 
Slava:

Merci.

Veuillez montrer les journaux du terminal au moment du problème, depuis le début.

J'ai envoyé le fichier journal par message privé.

 
Igor Semyonov:

J'ai envoyé le fichier journal par message privé.

Oui, merci.

Les journaux sont tous clairs.

Dites-moi, la situation que vous avez décrite se poursuit-elle ?

 

Volume sans DoubleToString(Volume, 2). La capture d'écran est EURUSD.

 
Slava:

Oui, merci.

Tout est clair dans les journaux.

Dites-moi, la situation que vous avez décrite perdure-t-elle ?

Après avoir redémarré le terminal, tout va bien jusqu'à présent.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

pantural, 2018.11.01 16:03

Bonjour chers développeurs MT, Je voudrais signaler un bug dans l'algorithme de calcul du ratio de Sharpe. Dans le rapport annexe de M.Aleksey Vyazmikin où SR=0,29 mais selon mes calculs, il est d'environ 3,7-3,8 (en fonction de si zéro PnL) suggèrent que l'erreur en l'absence d'un facteur d'échelle dans l'écart-type (sqrt(longueur)) parce que le rendement moyen ne dépend pas de la longueur de la série, il converge, et le RMS augmente comme sqrt(longueur)

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;

}

Prenons deux CT identiques. Nous les démarrons simultanément. Un jour plus tard, ils montrent tous les deux le tableau pnl. Le premier a été arrêté, le second non. Après un jour de plus, le second nous a montré exactement le même pnl.

C'est-à-dire que le premier a pnl[] et le second a pnl[]+pnl[]. C'est-à-dire que la transaction du deuxième jour était identique à celle du premier jour.


Alors, selon la formule proposée, le ratio de Sharpe du second TS sera sqrt(2) (racine de deux) plus petit que celui du premier. Mais ils ont échangé à l'identique !

 
fxsaber:

Prenez deux CT identiques. Faites-les fonctionner en même temps. Après 24 heures, ils ont tous deux montré un réseau de pnl. Le premier a été arrêté, le second non. Un jour plus tard, le second a montré exactement le même pnl.

C'est-à-dire que le premier a pnl[] et le second a pnl[]+pnl[]. C'est-à-dire que la transaction du deuxième jour était identique à celle du premier jour.


Alors, selon la formule proposée, le ratio de Sharpe de la seconde TS sera sqrt(2) (racine de deux) inférieur à celui de la première. Mais ils ont échangé à l'identique !

Comment se passe la blague ? "Ils devraient être tués pendant qu'ils sont petits" .

Eh bien, regardons l'exemple du fichier joint à . Parce qu'en théorie, tout semble effrayant jusqu'à ce que vous le sentiez avec vos mains.

Il y a 144 transactions dans ce fichier, dont la valeur Sharpe est de 0,29 (le site l'indique avec une précision de 2 décimales, et ce n'est pas grave - personne n'a besoin de 5 décimales, dans ce cas 2 décimales suffisent pour une bonne mesure pour comparer deux stratégies).

Le Sharpe est calculé comme le ratio K/STD, où :

  • K - coefficient de croissance moyen pour l'historique des transactions
  • STD est l'écart-type des gains sur l'historique des transactions.

Supposons que nous ayons deux fois plus de transactions qui sont des copies de transactions précédentes. Cela signifie que nous avons maintenant 288 transactions = 144*2. En même temps, K ne changera pas. Donc, nous ne pouvons changer le Sharpe qu'en changeant le STD.

STD initial=MathSqrt(X2/(n-1)), où :

  • X2 est la somme des carrés des écarts par rapport à la moyenne X_aver
  • n - nombre de perles == 144

C'est-à-dire Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)

Nous avons doublé le nombre de transactions, donc pour un historique deux fois plus important, le nouveau Sharpe est calculé comme suit

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

Où X2_new=2*X2. Par conséquent, le ratio 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 

Même si je mélange le dénominateur et le numérateur, SharpeNew se situera dans la fourchette 0,292919- 0,296025, c'est-à-dire que la différence se situera quelque part sur le troisième chiffre.

Mais pas par 10 à 20 fois. Vérifiez par vous-même où j'ai fait une erreur.

 
Rashid Umarov:

C'est quoi la blague ? "Il faut les tuer tant qu'ils sont petits."

Vous me comprenez mal.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bugs, bugs, questions

fxsaber, 2018.11.06 13:23

Alors, selon la formule proposée, le ratio de Sharpe de la deuxième TS serait sqrt(2) (racine de deux) inférieur à celui de la première. Mais ils ont échangé à l'identique !


Je voulais dire la formule citée de C++.


Et dans la formule utilisée dans MT, bien sûr, un ne serait pas soustrait. Dans l'exemple proposé, quel que soit le nombre d'intervalles de 144, Sharp serait toujours le même.

 
fxsaber:

Vous m'avez mal compris.


Je voulais dire la formule citée de C++.

Je n'ai rien compris du tout - pourquoi devrais-je comprendre cette citation ? Vous avez fait une supposition - je l'ai vérifiée et publiée. Puisque beaucoup de gens croient simplement ce qui est écrit sur la barrière. Personne ne va vérifier ce qui est écrit, vous devez le faire vous-même avant que cela n'aille trop loin.

Raison: