안녕하세요, MT 개발자 여러분, Sharpe 비율 계산 알고리즘의 오류를 보고하고 싶습니다. 응용 프로그램에서 보고서 uv. Aleksey Vyazmikin 여기서 SR=0.29 그러나 내 계산에 따르면 약 3.7-3.8입니다(0 PnL이 고려되는지 여부에 따라 다름) 나는 오류가 표준 편차에 대한 스케일링 계수가 없을 때 발생한다고 가정합니다 (sqrt(length)) 계열은 수렴하고 표준편차는 sqrt(length) 만큼 커짐
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;
}
두 개의 동일한 차량을 가져 가라. 동시에 출시했습니다. 하루 후, 둘 다 pnl 어레이를 보여주었습니다. 첫 번째는 중지되었고 두 번째는 중지되지 않았습니다. 하루 후, 두 번째 것은 정확히 동일한 pnl을 보여주었습니다.
저것들. 첫 번째 pnl[], 두 번째 pnl[]+pnl[]. 저것들. 둘째 날 거래는 첫째 날과 동일했습니다.
그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!
그래픽이 아닌 기호 설정.
시장 시계에서 기호의 컨텍스트 메뉴에서 "기호 사양"을 선택하십시오.
고맙습니다.
처음부터 문제 발생시 터미널 로그를 보여주세요
고맙습니다.
처음부터 문제 발생시 터미널 로그를 보여주세요
개인 메시지 로 보낸 로그 파일 .
개인 메시지 로 보낸 로그 파일 .
네 감사합니다.
로그는 모두 깨끗합니다.
말씀하신 상황이 계속된다면 말씀해 주시겠습니까?
DoubleToString 이 없는 볼륨(볼륨, 2). 화면에서 EURUSD.
네 감사합니다.
로그에 따르면 모든 것이 깨끗합니다.
말씀하신 상황이 계속된다면 말씀해 주시겠습니까?
터미널을 다시 시작한 후 지금까지는 모든 것이 정상입니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
판추럴 , 2018.11.01 16:03
안녕하세요, MT 개발자 여러분, Sharpe 비율 계산 알고리즘의 오류를 보고하고 싶습니다. 응용 프로그램에서 보고서 uv. Aleksey Vyazmikin 여기서 SR=0.29 그러나 내 계산에 따르면 약 3.7-3.8입니다(0 PnL이 고려되는지 여부에 따라 다름) 나는 오류가 표준 편차에 대한 스케일링 계수가 없을 때 발생한다고 가정합니다 (sqrt(length)) 계열은 수렴하고 표준편차는 sqrt(length) 만큼 커짐
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;
}
두 개의 동일한 차량을 가져 가라. 동시에 출시했습니다. 하루 후, 둘 다 pnl 어레이를 보여주었습니다. 첫 번째는 중지되었고 두 번째는 중지되지 않았습니다. 하루 후, 두 번째 것은 정확히 동일한 pnl을 보여주었습니다.
저것들. 첫 번째 pnl[], 두 번째 pnl[]+pnl[]. 저것들. 둘째 날 거래는 첫째 날과 동일했습니다.
그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!
두 개의 동일한 차량을 가져 가라. 동시에 출시했습니다. 하루 후 둘 다 pnl 배열을 보여주었습니다. 첫 번째는 중지되었지만 두 번째는 중지되지 않았습니다. 하루 후, 두 번째 것은 정확히 동일한 pnl을 보여주었습니다.
저것들. 첫 번째 pnl[], 두 번째 pnl[]+pnl[]. 저것들. 둘째 날 거래는 첫째 날과 동일했습니다.
그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!
농담은 어때? "그들은 작을 때 죽여야 한다."
첨부된 파일의 예를 살펴보겠습니다. #11396 . 그리고 이론적으로 모든 것은 손으로 느낄 때까지 위협적으로 보입니다.
이 파일에는 144개의 거래가 있으며 Sharp는 0.29로 판명되었습니다(사이트에서는 소수점 이하 2자리의 정확도로 표시되며 정상입니다. 아무도 소수점 5자리가 필요하지 않습니다. 이 경우 소수점 이하 2자리는 두 전략을 비교하기에 충분함).
Sharpe는 K/STD 비율로 계산되며, 여기서:
이전 거래의 복사본이었던 거래를 두 배 더 많이 갖게 합시다. 이것은 이제 288 = 144*2 거래가 있음을 의미합니다. 이 경우 K 는 변경되지 않습니다. 즉, STD 변경으로 인해 Sharpe 변경만 발생할 수 있습니다.
초기 STD=MathSqrt(X2/(n-1)), 여기서:
Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)입니다.
두 배의 거래가 있으므로 두 배의 기록에 대해 새로운 Sharpe는 다음과 같이 계산됩니다.
여기서 X2_new=2*X2. 따라서 SharpeNew/Sharpe 비율 = MathSqrt(X2/(144-1)) / MathSqrt(X2_new/(2*144-1)) =
분모와 분자를 섞어도 SharpeNew의 범위는 0.29 2919 - 0.29 6025입니다. 즉, 차이는 세 번째 자리 어딘가에 있을 것입니다.
하지만 10~20번은 아니다. 내가 어디를 잘못했는지 스스로 확인하십시오.
농담은 어때? "그들은 작을 때 죽여야 한다."
당신은 나를 이해하지 못했습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
fxsaber , 2018.11.06 13:23
그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율 은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!
C++에서 인용된 공식을 의미합니다.
ZY 그리고 MT에서 사용되는 공식에서는 물론 단위가 제거되지 않습니다. 그러면 제안된 예에서 144를 따라 얼마나 많은 간격이 관찰되더라도 Sharpe는 항상 일치합니다.