Fehler, Irrtümer, Fragen - Seite 2319

 
Hallo! Können Sie mir sagen, wie ich den Fehler mit der falschen Preisanzeige beheben kann? Das wirft alle Indiatoren aus der Bahn.eurusd
 
Slava:

Symbol-Einstellungen, nicht Grafiken.

Wählen Sie in der Marktübersicht aus dem Kontextmenü des Symbols "Symbolspezifikation".

 
Igor Semyonov:

Ich danke Ihnen.

Bitte zeigen Sie die Terminalprotokolle zum Zeitpunkt des Problems von Anfang an

 
Slava:

Ich danke Ihnen.

Bitte zeigen Sie die Terminalprotokolle zum Zeitpunkt des Problems von Anfang an

Ich habe die Protokolldatei per privater Nachricht geschickt.

 
Igor Semyonov:

Ich habe die Protokolldatei per privater Nachricht geschickt.

Ja, ich danke Ihnen.

Die Protokolle sind alle sauber.

Sagen Sie mir, ob die von Ihnen beschriebene Situation anhält?

 

Volumen ohne DoubleToString(Volumen, 2). Der Screenshot zeigt EURUSD.

 
Slava:

Ja, ich danke Ihnen.

Aus den Protokollen geht alles klar hervor.

Sagen Sie mir, ob die von Ihnen beschriebene Situation weiterhin besteht?

Nach dem Neustart des Terminals ist soweit alles in Ordnung.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

pantural, 2018.11.01 16:03

Hallo liebe MT-Entwickler, ich möchte einen Fehler im Algorithmus zur Berechnung der Sharpe Ratio melden. Im Anhang Bericht von HerrnAleksey Vyazmikin, wo SR = 0,29, aber nach meinen Berechnungen ist es etwa 3,7-3,8 (je nachdem, ob Null PnL) deuten darauf hin, dass der Fehler in Ermangelung eines Skalierungsfaktors in der Standardabweichung (sqrt(Länge)), weil die durchschnittliche Rendite nicht auf die Länge der Serie ab, es konvergiert, und die RMS steigt als sqrt(Länge)

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;

}

Nehmen wir zwei identische TCs. Wir starten sie gleichzeitig. Einen Tag später zeigen sie beide das pnl-Array. Der erste wurde gestoppt, der zweite nicht. Nach einem weiteren Tag hat uns der zweite genau das gleiche gezeigt.

Das heißt, die erste hat pnl[] und die zweite hat pnl[]+pnl[]. Das heißt, der Handel am zweiten Tag war identisch mit dem Handel am ersten Tag.


Nach der vorgeschlagenen Formel ist die Sharpe Ratio des zweiten TS dann sqrt(2) (Wurzel aus zwei) kleiner als die des ersten. Aber sie haben identisch gehandelt!

 
fxsaber:

Nehmen Sie zwei identische TCs. Lassen Sie sie gleichzeitig laufen. Nach 24 Stunden zeigten sie beide eine Reihe von pnl. Der erste wurde gestoppt, der zweite nicht. Einen Tag später zeigte das zweite Exemplar genau das gleiche Bild.

Das heißt, die erste hat pnl[] und die zweite hat pnl[]+pnl[]. Das heißt, der Handel am zweiten Tag war identisch mit dem Handel am ersten Tag.


Nach der vorgeschlagenen Formel ist die Sharpe Ratio des zweiten TS dann sqrt(2) (Wurzel aus zwei) kleiner als die des ersten. Aber sie haben identisch gehandelt!

Wie geht der Witz? "Man sollte sie töten, solange sie noch klein sind".

Schauen wir uns das Beispiel aus der Datei im Anhang zu an. Denn in der Theorie sieht alles unheimlich aus, bis man es mit den Händen fühlt.

Es gibt 144 Trades in dieser Datei, deren Sharpe-Wert 0,29 beträgt (die Website zeigt ihn mit einer Genauigkeit von 2 Dezimalstellen an, und das ist in Ordnung - niemand braucht 5 Dezimalstellen, in diesem Fall sind 2 Dezimalstellen ausreichend, um zwei Strategien zu vergleichen).

Sharpe wird als Verhältnis K/STD berechnet, wobei:

  • K - die durchschnittliche Wachstumsrate für die Handelsgeschichte
  • STD ist die Standardabweichung der Gewinne in der Handelsgeschichte

Nehmen wir an, wir haben doppelt so viele Abschlüsse, die Kopien früherer Abschlüsse waren. Das bedeutet, dass wir jetzt 288 Abschlüsse = 144*2 haben. Gleichzeitig wird sich K nicht ändern. Wir können Sharpe also nur ändern, indem wir STD ändern.

Initial STD=MathSqrt(X2/(n-1)), wobei:

  • X2 ist die Summe der Quadrate der Abweichungen vom Mittelwert X_aver
  • n - Anzahl der Teads == 144

Das ist Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)

Wir haben die Anzahl der Trades verdoppelt, so dass der neue Sharpe für eine doppelt so große Historie wie folgt berechnet wird

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

Dabei ist X2_neu=2*X2. Daher SharpeNew/Sharpe ratio = 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 

Selbst wenn ich den Nenner mit dem Zähler verwechsle, liegt SharpeNew im Bereich 0,292919- 0,296025, d. h. die Differenz liegt irgendwo an der dritten Stelle.

Aber nicht um das 10-20fache. Prüfen Sie selbst, wo ich einen Fehler gemacht habe.

 
Rashid Umarov:

Was ist so lustig daran? "Man sollte sie töten, solange sie noch klein sind."

Sie missverstehen mich.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

fxsaber, 2018.11.06 13:23

Nach der vorgeschlagenen Formel wäre die Sharpe Ratio des zweiten TS dann sqrt(2) (Wurzel aus zwei) kleiner als die des ersten. Aber sie haben identisch gehandelt!


Ich meinte die zitierte Formel aus C++.


Und in der Formel, die in MT verwendet wird, würde natürlich eine nicht abgezogen werden. In dem vorgeschlagenen Beispiel würde Sharpe immer gleich sein, egal wie viele Intervalle von 144 beobachtet wurden.