Eine weitere sehr wichtige Nuance ist, dass in diesem Skript nur die Balken, bei denen eine Veränderung des Eigenkapitals stattgefunden hat, bei der Berechnung des Sharpe-Wertes berücksichtigt werden:
//--- add only if equity has changedif(m_equities[i] != prev_equity)
{
log_return = MathLog(m_equities[i] / prev_equity); // Erhöhung des Logarithmus
aver += log_return; // durchschnittlicher Logarithmus der Inkremente
AddReturn(log_return); // Füllen des Feldes der inkrementellen Logarithmencounter++;// Zähler der Rückgaben
}
prev_equity = m_equities[i];
Die durchschnittliche Veränderung wird dann durch Division durch die Anzahl dieser Balken ermittelt:
//--- Durchschnittswert des Inkrementlogarithmus
aver /= counter;
Der Übergang zu den jährlichen Sharps erfolgt jedoch auf der Grundlage des Zeitrahmenverhältnisses, als ob alle Balken des aktuellen tf in die Berechnung einbezogen würden:
//--- Neuberechnung der Sharpe Ratio auf den Jahreswert in allen anderen Fällen//--- wie viele Perioden des aktuellen Zeitrahmens in D1 passendouble factor = double(PeriodSeconds(PERIOD_D1)) / PeriodSeconds(timeframe);
sharpe = sharpe * MathSqrt(factor); // Neuberechnung zum Tageswert
sharpe = sharpe * MathSqrt(252); // Holen Sie sich jährlich von daily
D.h., noch einmal: Das Skript findet die gemittelten Sharps pro 1 Balken mit Aktienveränderung, und multipliziert sie dann, um den jährlichen zu finden, nicht mit der Anzahl solcher Balken in einem Jahr, sondern mit der Gesamtzahl der Balken dieses tf in einem Jahr (dessen Wurzel, natürlich). Das ist fehlerhaft und überschätzt die endgültige Zahl.
Offenbar wird der Sharpe-Wert im Tester auf die gleiche Weise berechnet?
Kristian Kafarov #: Das Skript ermittelt den durchschnittlichen Sharpe pro 1 Bar mit Aktienveränderung und multipliziert ihn dann, um den jährlichen Sharpe zu ermitteln, nicht mit der Anzahl solcher Barren in einem Jahr, sondern mit der Gesamtzahl der Barren dieses tf in einem Jahr (dessen Wurzel natürlich). Das ist fehlerhaft und überschätzt die endgültige Zahl
Das ist mir auch aufgefallen. Deshalb habe ich in meiner Version eine Option zur Berücksichtigung von Null-Balken hinzugefügt.
Lesen Sie den Logarithmus des Preises
Weitere Referenzen finden Sie selbst
Lesen Sie den Logarithmus des Preises
Weitere Referenzen finden Sie selbst
Eine weitere sehr wichtige Nuance ist, dass in diesem Skript nur die Balken, bei denen eine Veränderung des Eigenkapitals stattgefunden hat, bei der Berechnung des Sharpe-Wertes berücksichtigt werden:
//--- add only if equity has changed if(m_equities[i] != prev_equity) { log_return = MathLog(m_equities[i] / prev_equity); // Erhöhung des Logarithmus aver += log_return; // durchschnittlicher Logarithmus der Inkremente AddReturn(log_return); // Füllen des Feldes der inkrementellen Logarithmen counter++; // Zähler der Rückgaben } prev_equity = m_equities[i];Die durchschnittliche Veränderung wird dann durch Division durch die Anzahl dieser Balken ermittelt:
Der Übergang zu den jährlichen Sharps erfolgt jedoch auf der Grundlage des Zeitrahmenverhältnisses, als ob alle Balken des aktuellen tf in die Berechnung einbezogen würden:
D.h., noch einmal: Das Skript findet die gemittelten Sharps pro 1 Balken mit Aktienveränderung, und multipliziert sie dann, um den jährlichen zu finden, nicht mit der Anzahl solcher Balken in einem Jahr, sondern mit der Gesamtzahl der Balken dieses tf in einem Jahr (dessen Wurzel, natürlich). Das ist fehlerhaft und überschätzt die endgültige Zahl.
Offenbar wird der Sharpe-Wert im Tester auf die gleiche Weise berechnet?
Das Skript ermittelt den durchschnittlichen Sharpe pro 1 Bar mit Aktienveränderung und multipliziert ihn dann, um den jährlichen Sharpe zu ermitteln, nicht mit der Anzahl solcher Barren in einem Jahr, sondern mit der Gesamtzahl der Barren dieses tf in einem Jahr (dessen Wurzel natürlich). Das ist fehlerhaft und überschätzt die endgültige Zahl
Das ist mir auch aufgefallen. Deshalb habe ich in meiner Version eine Option zur Berücksichtigung von Null-Balken hinzugefügt.