이 기사는 양적 거래에 관한 시리즈를 계속합니다. 이 두 개의 더 길고 더 복잡한 기사는 매우 인기가 있습니다. 그래서 나는 이 맥락에서 계속하여 전략 백테스팅 주제에 대한 세부 사항을 제공합니다.
알고리즘 백테스팅은 심리학, 수학, 통계, 소프트웨어 개발 및 시장 / 거래소 미세 구조를 포함한 많은 영역의 지식을 필요로합니다. 나는 한 기사에서 모든 주제를 다루기를 희망할 수 없었으므로 두 세 개의 작은 조각으로 나눌 것입니다. 이 섹션에서 무엇을 논의 할 것입니까? 백테스팅을 정의함으로써 시작하고 수행하는 방법에 대한 기초를 설명합니다. 그 다음 양적 거래에 대한 초보자 가이드에서 언급 한 편견을 설명합니다. 다음에는 다양한 사용 가능한 백테스팅 소프트웨어 옵션을 비교합니다.
다음 기사에서는 종종 거의 언급되지 않거나 무시되는 전략 구현의 세부 사항을 살펴볼 것입니다. 또한 거래 거래소의 특색을 포함하여 백테스팅 프로세스를 더 현실적으로 만드는 방법을 고려할 것입니다. 그 다음 거래 비용을 논의하고 백테스트 설정에서 올바르게 모델링하는 방법을 논의 할 것입니다. 우리는 백테스트의 성능에 대한 논의로 끝내고 마지막으로 평균 반전 쌍 거래로 알려진 일반적인 양 전략의 예를 제공합니다.
먼저 백테스팅이 무엇이고 왜 알고리즘 트레이딩에 적용해야 하는지에 대해 알아보겠습니다.
알고리즘 거래는 풍부한 데이터 가용성으로 인해 과거의 성과에 대한 미래 성과에 대한 기대를 더 신뢰할 수 있기 때문에 다른 유형의 투자 클래스에서 구별됩니다. 이것을 수행하는 과정은 백테스팅으로 알려져 있습니다.
간단히 말해서, 백테스팅은 특정 전략 알고리즘을 역사적인 금융 데이터의 흐름에 노출시켜서 수행되며, 이는 일련의 거래 신호로 이어집니다. 각 거래 (우리는 여기서 두 개의 신호의
알고리즘 전략의 백테스팅의 주요 이유는 무엇일까요?
백테스팅은 알고리즘 거래에 많은 이점을 제공합니다. 그러나 전략의 빈도가 증가함에 따라 일반적으로 전략의 미세 구조 효과를 올바르게 모델링하는 것이 더 어려워집니다. 이것은 덜 신뢰할 수있는 백테스트로 이어지고 선택된 전략의 더 까다로운 평가로 이어집니다. 이것은 실행 시스템이 초고 주파수 알고리즘과 마찬가지로 전략 성능의 핵심이 되는 특별한 문제입니다.
불행 히도, 백테스트 는 모든 종류의 편견 으로 가득 차 있다. 우리 는 이전 기사 들 에서 이 문제 들 중 일부 에 대해 언급 하였지만, 이제 그 문제 들 을 깊이 논의 할 것 이다.
백테스트 전략의 성능에 영향을 줄 수있는 많은 편견이 있습니다. 불행히도, 이러한 편견은 성능을 감소시키는 대신 성능을 증폭시키는 경향이 있습니다. 따라서 당신은 항상 백테스트를 전략의 실제 성능에 대한 이상화 된 상위 경계로 간주해야합니다. 알고리즘 거래에서 편견을 제거하는 것은 거의 불가능하므로 알고리즘 전략에 대한 정보적 결정을 내리기 위해 가능한 한 최대한 그들을 최소화하는 것이 우리의 작업입니다.
제가 논의하고 싶은 네 가지 주요 편견이 있습니다. 최적화 편견, 미래지향 편견, 생존 편견, 심리적 관용 편견입니다.
이것은 아마도 모든 백테스트 편향 중 가장 교활한 것입니다. 백테스트 데이터 세트에 대한 전략 성능이 매우 매력적이 될 때까지 추가 거래 매개 변수를 조정하거나 도입하는 것을 포함합니다. 그러나 실행되면 전략의 성능이 크게 다를 수 있습니다. 이 편향의 다른 이름은
최적화 편향은 알고리즘 전략이 종종 많은 매개 변수를 포함하기 때문에 제거하기가 어렵습니다. 이 경우
이러한 편향을 완화시키는 데 도움이되는 방법 중 하나는 감수성 분석을 수행하는 것입니다. 이것은 매개 변수를 점진적으로 변화시키고 성능의 표면을 그려내는 것을 의미합니다. 매개 변수 선택에 대한 건전하고 근본적인 추론은 다른 모든 요소를 고려하면 더 부드러운 매개 변수 표면을 가져야합니다. 매우 점프한 성능 표면이있는 경우 매개 변수가 현상을 반영하지 않고 테스트 데이터의 유물이라는 것을 의미합니다. 다차원 최적화 알고리즘에 대한 광범위한 문헌이 있으며 매우 활발한 연구 분야입니다. 나는 여기에 머물지 않을 것이지만 환상적인 백테스트가있는 전략을 찾을 때 그것을 머릿속에 두십시오!
앞을 바라보는 편향은 미래 데이터가 실제로 사용할 수 없었던 시뮬레이션의 한 지점에서 우연히 포함될 때 백테스팅 시스템에 도입됩니다. 만약 우리가 백테스트를 시간 순으로 실행하고 N 시간 지점에 도달한다면, 앞을 바라보는 편향은 어떤 지점인 N+k에 대한 데이터가 포함되면 발생합니다.
최적화 편향과 마찬가지로 도입을 피하기 위해 매우 조심해야합니다. 종종 거래 전략이 라이브 트레이딩에서 백테스트에서 현저하게 떨어지는 주된 이유입니다.
생존 편견은 특히 위험한 현상이며 특정 전략 유형에 대한 상당히 부풀린 성능을 초래할 수 있습니다. 특정 시점에 선택되었을 수있는 이전 자산의 전체 우주를 포함하지 않는 데이터 세트에 전략을 테스트 할 때 발생합니다.
예를 들어, 2001년 시장 붕괴 이전과 이후 주식들의 무작위 선택에 대한 전략을 테스트하는 것을 고려해보자. 일부 기술 주식들은 파산했고, 다른 것들은 헤엄치면서도 번영할 수 있었다. 만약 우리가 이 전략을 시장 마감 기간을 통과한 주식에만 제한했다면, 우리는 이미 우리에게 성공을 보여주었기 때문에 생존 편향을 도입했을 것이다. 사실, 이것은 단지 미래 정보가 과거 분석에 통합됨에 따라 미래 편향의 또 다른 구체적인 사례일 뿐이다.
전략 백테스트에서 생존 편견을 완화시키는 두 가지 주요 방법이 있습니다.
이제 우리는 당신의 거래 성과에 영향을 줄 수 있는 특정 심리적 현상을 고려할 것입니다.
이 특정 현상은 양적 거래의 맥락에서 자주 논의되지 않습니다. 그러나 더 재량적인 거래 방법과 관련하여 광범위하게 논의됩니다. 그것은 다양한 이름을 가지고 있지만 문제의 본질을 포착하기 때문에 "심리적 관용 편향"이라고 부르기로 결정했습니다. 5 년 또는 그 이상의 기간에 백테스트를 만들 때 상승 추세를 보이는 주식 곡선을보고 복합 연간 수익률, 샤프 비율 및 심지어 마감 특성을 계산하고 결과에 만족하는 것이 쉽습니다. 예를 들어 전략은 최대 상대 마감 25%와 최대 마감 기간 4 개월을 가질 수 있습니다. 이것은 추진 전략에 대해 이상적이지 않을 것입니다. 그러나 전반적인 그림이 장미하기 때문에 그러한 손실 기간을 용납하는 것이 쉽다고 설득하는 것은 간단합니다. 실제로는 훨씬 어렵습니다!
백테스트에서 25% 이상의 역사적인 드라우다운이 발생하면 라이브 트레이딩에서 비슷한 드라우다운 기간을 볼 가능성이 높습니다. 이러한 드라우다운 기간은 심리적으로 견딜 수 없습니다. 기관적인 환경에서 연장 드라우다운이 어떻게 될 수 있는지 직접 관찰했으며, 그것은 쾌적하지 않습니다 - 백테스트가 그러한 기간이 발생할 것이라고 제안하더라도. 내가 그것을
전략 백테스팅의 소프트웨어 풍경은 광범위하다. 솔루션은 완전히 통합된 기관 수준의 정교한 소프트웨어에서 C ++, 파이썬 및 R와 같은 프로그래밍 언어에 이르기까지 거의 모든 것이 처음부터 작성되어야합니다. 양자 거래자로서 우리는 거래 기술 스택과 개발 방법론의 속도와 신뢰성을
이제 우리가 소프트웨어 인프라를 선택해야 할 기준을 나열한 후에,
참고: 나는 대부분의 소매업자와 소프트웨어 개발자에게 사용할 수있는 소프트웨어를 포함 할 것입니다. 이것은 사이트의 독자입니다. 더 기관 수준의 도구와 같은 다른 소프트웨어가 사용할 수 있지만, 나는 이것이 소매 환경에서 효과적으로 사용할 수 없을 정도로 비싸고 개인적으로 경험은 없습니다.
백테스팅 소프트웨어 비교
설명: WYSIWYG (what-you-see-is-what-you-get) 스프레드시트 소프트웨어. 금융 산업에서 매우 널리 퍼져 있습니다. 데이터와 알고리즘은 긴밀하게 결합되어 있습니다.
실행: 예, 엑셀은 대부분의 중개 회사와 연결될 수 있습니다.
커스터마이징: VBA 매크로는 구현을 숨기는 비용으로 더 고급 기능을 허용합니다.
전략 복잡성: 수백 개의 자산을 가진 전략과 마찬가지로 더 진보된 통계 도구는 구현하기가 어렵습니다.
편견 최소화: 전향 편견은 셀 하이라이트 기능을 통해 쉽게 감지 할 수 있습니다 (VBA가 없다고 가정합니다).
개발 속도: 기본적인 전략을 빠르게 구현합니다.
실행 속도: 느린 실행 속도 - 낮은 주파수 전략에만 적합합니다.
비용: 값싸거나 무료 (허락에 따라).
대안: OpenOffice
설명: 컴퓨터 수학, 물리학 및 공학을 위해 원래 설계 된 프로그래밍 환경. 벡터화 연산 및 수치 선형 대수학을 포함하는 연산에 매우 적합합니다. 양자 거래에 대한 다양한 플러그인을 제공합니다. 양적 헤지 펀드에서 널리 사용됩니다.
실행: 네이티브 실행 기능이 없습니다. MATLAB는 별도의 실행 시스템을 필요로 합니다.
커스터마이징: 컴퓨팅 수학의 거의 모든 영역에 대한 커뮤니티 플러그인들의 거대한 배열.
전략 복잡성: 이미 사용되고 잘 테스트 된 많은 고급 통계 방법.
편견 최소화: 앞으로의 편견을 탐지하기 어렵고 광범위한 테스트가 필요합니다.
개발 속도: 짧은 스크립트는 복잡한 백테스트를 쉽게 만들 수 있습니다.
실행 속도: 벡터화/평행화 알고리즘을 가정하면 MATLAB는 고도로 최적화되어 있습니다. 전통적인 반복 루프에는 좋지 않습니다.
비용: 라이선스 ~ 1,000 USD.
대안: 옥타브, SciLab
설명: 개발 속도를 위해 설계된 고수준 언어. 상상할 수 있는 거의 모든 프로그래밍 작업을 위한 광범위한 라이브러리. 헤지 펀드 및 투자 은행 커뮤니티에서 더 폭넓은 수용을 얻고 있다. 실행 속도를 위해 C/C++만큼 빠르지 않다.
실행: 파이썬 플러그인은 인터랙티브 브로커와 같은 더 큰 브로커를 위해 존재합니다. 따라서 백테스트와 실행 시스템은 모두 동일한
커스터마이징: 파이썬은 매우 건강한 개발 커뮤니티를 가지고 있으며 성숙한 언어입니다. NumPy/SciPy는 양자 거래에 관련된 빠른 과학적 컴퓨팅 및 통계 분석 도구를 제공합니다.
전략 복잡성: 주요 알고리즘에 많은 플러그인이 존재하지만 MATLAB에 존재하는만큼 큰 양자 커뮤니티는 없습니다.
편견 최소화: 모든 고수준 언어와 동일한 편견 최소화 문제가 있습니다. 테스트에 대해 매우 조심해야합니다.
개발 속도: 파이썬의 주요 장점은 개발 속도, 내장된 테스트 기능으로 강력하다.
실행 속도: C++만큼 빠르지는 않지만 과학 컴퓨팅 구성 요소가 최적화되어 있으며 파이썬은 특정 플러그인을 사용하여 네이티브 C 코드와 대화 할 수 있습니다.
비용: 무료/오픈 소스
대안: 루비, 에를랑, 하스켈
설명: 고급 통계 방법 및 시간 계열 분석을 위해 설계 된 환경. 특정 통계, 경제학 및 네이티브 그래프 도구 세트의 광범위한 범위. 대규모 개발자 커뮤니티.
실행: R는 일부 브로커, 특히 인터랙티브 브로커에 대한 플러그인을 보유하고 있습니다. 따라서 엔드-투-엔드 시스템은 완전히 R로 작성 될 수 있습니다.
사용자 정의: R는 모든 패키지로 사용자 정의 될 수 있지만, 그 강점은 통계/경제학 영역에 있습니다.
전략 복잡성: 사용 가능한 플러그인으로 인해 경제학, 통계학 또는 기계 학습 전략을 수행하는 경우 주로 유용합니다.
편향 최소화: 파이썬이나 C++와 같은 모든 고수준 언어에 대한 편향 가능성의 비슷한 수준. 따라서 테스트를 수행해야합니다.
개발 속도: R는 통계적 방법을 기반으로 전략을 작성하는 데 빠르다.
실행 속도: R은 C++보다 느리지만 벡터화된 연산에 대해 상대적으로 최적화되어 있습니다.
비용: 무료/오픈 소스
대안: SPSS, Stata
설명: 실행 속도를 위해 설계된 성숙하고 높은 수준의 언어. 양적 금융 및 수치 라이브러리의 광범위한 범위. 디버깅이 더 어렵고 종종 파이썬 또는 MATLAB보다 구현 시간이 더 오래 걸립니다. 구매 및 판매 측면 모두에서 매우 보편적입니다.
실행: 대부분의 중개 API는 C++ 및 Java로 작성되어 있습니다. 따라서 많은 플러그인이 있습니다.
커스터마이징: C/C++는 기본 메모리에 직접 액세스 할 수 있으므로 초고 주파수 전략을 구현 할 수 있습니다.
전략 복잡성: C++ STL는 다양한 최적화된 알고리즘을 제공합니다. 거의 모든 전문 수학 알고리즘은 웹에서 무료 오픈 소스 C/C++ 구현을 보유하고 있습니다.
편견 최소화: 앞을 보는 편견은 제거하기가 어려울 수 있지만 다른 고위급 언어보다 어렵지 않습니다. 좋은 디버깅 도구이지만 기본 메모리를 처리 할 때 조심해야합니다.
개발 속도: C++는 같은 알고리즘에 대해 파이썬이나 MATLAB에 비해 상당히 어휘가 많다. 더 많은 코드 라인 (LOC) 은 종종 버그의 가능성이 높아집니다.
실행 속도: C / C ++는 매우 빠른 실행 속도를 가지고 있으며 특정 컴퓨팅 아키텍처에 잘 최적화 될 수 있습니다. 이것이 사용하는 주된 이유입니다.
비용: 다양한 컴파일러: 리눅스/GCC는 무료이며, MS 비주얼 스튜디오는 다른 라이선스를 가지고 있습니다.
대안: C#, 자바, 스칼라
다른 전략은 다른 소프트웨어 패키지를 필요로 할 것입니다. HFT 및 UHFT 전략은 C / C ++로 작성 될 것입니다 (오늘날 그들은 종종 GPU 및 FPGA에서 수행됩니다), 반면 낮은 주파수 방향 주식 전략은 소프트웨어 / 중개업의 모든 특성으로 인해 TradeStation에서 구현하기가 쉽습니다.
제 개인적인 선호도는 파이썬입니다. 이는 제 필요와 전략에 맞는 맞춤화, 개발 속도, 테스트 기능 및 실행 속도를 제공합니다. 더 빠른 것이 필요한 경우, 저는 파이썬 프로그램에서 직접 C++로
백테스팅에 관한 다음 몇 가지 기사에서는 알고리즘 거래 백테스팅 시스템의 구현을 둘러싼 몇 가지 특정 문제를 살펴보고 거래 거래소의 효과를 어떻게 통합 할 수 있는지 살펴볼 것입니다. 전략 성능 측정에 대해 논의하고 마지막으로 예제 전략으로 결론을 내릴 것입니다.