오류, 버그, 질문 - 페이지 2319

 
안녕하세요! 가격이 잘못 표시되는 오류를 수정하는 방법을 알려주십시오. 모든 지표가 무너집니다. 유로
 
Slava :

그래픽이 아닌 기호 설정.

시장 시계에서 기호의 컨텍스트 메뉴에서 "기호 사양"을 선택하십시오.

 
Igor Semyonov :

고맙습니다.

처음부터 문제 발생시 터미널 로그를 보여주세요

 
Slava :

고맙습니다.

처음부터 문제 발생시 터미널 로그를 보여주세요

개인 메시지 로 보낸 로그 파일 .

 
Igor Semyonov :

개인 메시지 로 보낸 로그 파일 .

네 감사합니다.

로그는 모두 깨끗합니다.

말씀하신 상황이 계속된다면 말씀해 주시겠습니까?

 

DoubleToString 이 없는 볼륨(볼륨, 2). 화면에서 EURUSD.

 
Slava :

네 감사합니다.

로그에 따르면 모든 것이 깨끗합니다.

말씀하신 상황이 계속된다면 말씀해 주시겠습니까?

터미널을 다시 시작한 후 지금까지는 모든 것이 정상입니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

판추럴 , 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의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!

 
fxsaber :

두 개의 동일한 차량을 가져 가라. 동시에 출시했습니다. 하루 후 둘 다 pnl 배열을 보여주었습니다. 첫 번째는 중지되었지만 두 번째는 중지되지 않았습니다. 하루 후, 두 번째 것은 정확히 동일한 pnl을 보여주었습니다.

저것들. 첫 번째 pnl[], 두 번째 pnl[]+pnl[]. 저것들. 둘째 날 거래는 첫째 날과 동일했습니다.


그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!

농담은 어때? "그들은 작을 때 죽여야 한다."

첨부된 파일의 예를 살펴보겠습니다. . 그리고 이론적으로 모든 것은 손으로 느낄 때까지 위협적으로 보입니다.

이 파일에는 144개의 거래가 있으며 Sharp는 0.29로 판명되었습니다(사이트에서는 소수점 이하 2자리의 정확도로 표시되며 정상입니다. 아무도 소수점 5자리가 필요하지 않습니다. 이 경우 소수점 이하 2자리는 두 전략을 비교하기에 충분함).

Sharpe는 K/STD 비율로 계산되며, 여기서:

  • K - 거래 내역의 평균 성장률
  • STD 는 거래 내역에 대한 이익의 표준 편차입니다.

이전 거래의 복사본이었던 거래를 두 배 더 많이 갖게 합시다. 이것은 이제 288 = 144*2 거래가 있음을 의미합니다. 이 경우 K 는 변경되지 않습니다. 즉, STD 변경으로 인해 Sharpe 변경만 발생할 수 있습니다.

초기 STD=MathSqrt(X2/(n-1)), 여기서:

  • X2 - 평균 X_aver에서 편차 제곱합
  • n - 테이드 수 == 144

Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)입니다.

두 배의 거래가 있으므로 두 배의 기록에 대해 새로운 Sharpe는 다음과 같이 계산됩니다.

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

여기서 X2_new=2*X2. 따라서 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 

분모와 분자를 섞어도 SharpeNew의 범위는 0.29 2919 - 0.29 6025입니다. 즉, 차이는 세 번째 자리 어딘가에 있을 것입니다.

하지만 10~20번은 아니다. 내가 어디를 잘못했는지 스스로 확인하십시오.

 
Rashid Umarov :

농담은 어때? "그들은 작을 때 죽여야 한다."

당신은 나를 이해하지 못했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2018.11.06 13:23

그러면 제안된 공식에 따라 두 번째 TS의 Sharpe 비율 은 첫 번째 TS보다 작은 sqrt(2)(2의 루트)가 됩니다. 그러나 그들은 동일하게 거래되었습니다!


C++에서 인용된 공식을 의미합니다.


ZY 그리고 MT에서 사용되는 공식에서는 물론 단위가 제거되지 않습니다. 그러면 제안된 예에서 144를 따라 얼마나 많은 간격이 관찰되더라도 Sharpe는 항상 일치합니다.