또 다른 매우 중요한 뉘앙스는 이 스크립트에서는 샤프 계산 시 편일 변동이 있는 막대만 고려한다는 것입니다:
//--- add only if equity has changedif(m_equities[i] != prev_equity)
{
log_return = MathLog(m_equities[i] / prev_equity); // 증분 로그
aver += log_return; // 증분 평균 로그
AddReturn(log_return); // 증분 로그 배열 채우기counter++;// 반환 카운터
}
prev_equity = m_equities[i];
그런 다음 평균 변화를 해당 막대의 수로 나누어 구합니다:
//--- 증분 로그의 평균값
aver /= counter;
그러나 연간 샤프 전환은 현재 TF의 모든 막대가 계산에 포함되는 것처럼 기간 비율을 기준으로 합니다:
//--- 다른 모든 경우에 연간 값에 대한 샤프 비율을 다시 계산합니다.//--- 현재 기간 중 D1에 맞는 기간 수double factor = double(PeriodSeconds(PERIOD_D1)) / PeriodSeconds(timeframe);
sharpe = sharpe * MathSqrt(factor); // 일별 값으로 다시 계산
sharpe = sharpe * MathSqrt(252); // 매일에서 연간 가져오기
즉, 다시 한 번 : 스크립트는 주식 변동이있는 1 바당 평균 급락을 찾은 다음 연간 급락을 찾기 위해 1 년 동안의 해당 바 수가 아니라 1 년 동안이 tf의 총 바 수 (물론 그 근)를 곱합니다. 이는 잘못된 것이며 최종 수치를 과대평가하는 것입니다.
가격의 로그 읽기
다른 참고 자료를 직접 찾아보세요.
가격 로그 읽기
다른 참고 자료를 직접 찾아보세요.
또 다른 매우 중요한 뉘앙스는 이 스크립트에서는 샤프 계산 시 편일 변동이 있는 막대만 고려한다는 것입니다:
//--- add only if equity has changed if(m_equities[i] != prev_equity) { log_return = MathLog(m_equities[i] / prev_equity); // 증분 로그 aver += log_return; // 증분 평균 로그 AddReturn(log_return); // 증분 로그 배열 채우기 counter++; // 반환 카운터 } prev_equity = m_equities[i];그런 다음 평균 변화를 해당 막대의 수로 나누어 구합니다:
그러나 연간 샤프 전환은 현재 TF의 모든 막대가 계산에 포함되는 것처럼 기간 비율을 기준으로 합니다:
즉, 다시 한 번 : 스크립트는 주식 변동이있는 1 바당 평균 급락을 찾은 다음 연간 급락을 찾기 위해 1 년 동안의 해당 바 수가 아니라 1 년 동안이 tf의 총 바 수 (물론 그 근)를 곱합니다. 이는 잘못된 것이며 최종 수치를 과대평가하는 것입니다.
분명히 샤프도 테스터에서 같은 방식으로 계산되나요?
스크립트는 주식 변동이 있는 1바당 평균 샤프를 찾은 다음 연간 샤프를 구하기 위해 1년간의 해당 바 수가 아니라 1년간 이 TF의 총 바 수 (물론 그 근)를 곱합니다. 이는 오류이며 최종 수치를 과대평가하는 것입니다.
저도 그 점을 발견했습니다. 그래서 제 버전에서는 0 막대를 고려하는 옵션을 추가했습니다.