QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
2015 년 10 월 7 일 Michael Halls-Moore 작성
이 기사에서는 이전 시계열 분석 게시물에서 얻은 모든 지식을 S & P500 미국 주식 시장 지수의 거래 전략에 적용하는 방법을 보여 드리고자합니다.
우리는 ARIMA와 GARCH 모델을 결합함으로써 장기적으로 "Buy-and-Hold"접근 방식보다 훨씬 뛰어나다는 것을 알게 될 것입니다.
전략 개요.
전략의 아이디어는 상대적으로 간단하지만 실험을 원한다면 수정하려는 내용을 이해하기 위해 시계열 분석에 대한 이전 게시물을 읽는 것이 좋습니다.
전략은 "롤링"기반으로 수행됩니다.
매일, $ n $, 주식 시장 지수의 분화 된 로그 수익의 이전 $ k $ 일은 최적의 ARIMA 및 GARCH 모델을 피팅하기위한 창으로 사용됩니다. 결합 된 모델은 다음날 반환에 대한 예측을하는 데 사용됩니다. 예측이 음수이면 주식은 이전 종가에서 매도가되고 긍정적 인 경우 주식은 매수가됩니다. 예측이 전날과 같은 방향이면 아무 것도 변경되지 않습니다.
이 전략에서는 S & amp; P500에 대해 Yahoo Finance의 최대 사용 가능 데이터를 사용했습니다. 나는 $ k = 500 $을 가져갔습니다. 그러나 이것은 성능을 향상 시키거나 약화를 줄이기 위해 최적화 될 수있는 매개 변수입니다.
백 테스트는 R을 사용하여 직관적으로 벡터화 된 방식으로 수행됩니다. 아직까지 Python 이벤트 기반 백 테스터에서는 구현되지 않았습니다. 따라서 실제 거래 시스템에서 성취 된 성과는 커미션과 미끄러짐으로 인해 여기에서 달성 할 수있는 것보다 약간 적을 것입니다.
전략 구현.
이 전략을 구현하기 위해 우리는 이전에 시계열 분석 기사 시리즈에서 작성한 일부 코드와 rugarch를 포함한 몇 가지 새로운 라이브러리를 사용하려고합니다. 이 라이브러리는 QuantStrat Trader에서 Ilya Kipnis가 제안했습니다.
단계별로 구문을 살펴본 다음 마지막에 전체 구현을 제시하고 ARIMA + GARCH 표시기에 대한 내 데이터 세트에 대한 링크를 제공합니다. 신호를 생성하기 위해 내 데스크톱 PC에서 며칠이 걸렸기 때문에 후자를 포함 시켰습니다!
코드 자체가 복잡하지 않기 때문에 결과를 전체적으로 복제 할 수 있어야합니다. 전체를 수행하면 시뮬레이션하는 데 시간이 걸리지 만 말입니다.
첫 번째 작업은 R에 필요한 라이브러리를 설치하고 가져 오는 것입니다.
이미 라이브러리가 설치되어 있다면 간단히 가져올 수 있습니다.
이를 통해 S & P500에 전략을 적용 할 것입니다. 우리는 quantmod를 사용하여 색인을 위해 1950 년으로 거슬러 올라가는 자료를 얻을 수 있습니다. Yahoo Finance는 "^ GPSC"기호를 사용합니다.
그런 다음 S & P500의 "종가"에 대한 차등 대수 수익을 작성하고 초기 NA 값을 제거 할 수 있습니다.
우리는 벡터를 생성해야하며, 특정 날짜에 예측 값을 저장할 예측을해야합니다. 우리는 길이 foreLength를 우리가 마이너스 $ k $를 가지는 거래 데이터의 길이, 창 길이와 동일하게 설정합니다 :
이 단계에서 우리는 매매 데이터에서 매일 반복하고 적절한 ARIMA 및 GARCH 모델을 길이 $ k $의 롤링 윈도우에 맞출 필요가 있습니다. 24 개의 개별 ARIMA 피팅을 시도하고 GARCH 모델에 적합하다고 가정 할 때, 매일 표시기를 생성하는 데 오랜 시간이 걸릴 수 있습니다.
우리는 인덱스 d를 루핑 변수로 사용하고 $ k $에서 거래 데이터 길이까지 반복합니다.
그런 다음 S & amp; P500 리턴을 가져 와서 $ 1 + d $와 $ k + d $ 사이의 값을 선택하여 롤링 윈도우를 만듭니다 (이 전략의 경우 $ k = 500 $).
$ p, q = 0 $를 제외하고 ARIMA 기사에서와 동일한 절차를 사용하여 $ p \ in \ $ 및 $ q \ in \ $가있는 모든 ARMA 모델을 검색합니다.
우리는 R tryCatch 예외 처리 블록에서 arimaFit 호출을 래핑하여 $ p $와 $ q $의 특정 값에 적합하지 않으면이를 무시하고 $ p $의 다음 조합으로 이동합니다 및 $ q $.
우리는 $ d = 0 $의 "통합 된"값을 설정합니다 (이것은 우리의 인덱싱 매개 변수와 다른 $ d $입니다!). 따라서 ARIMA보다는 ARMA 모델에 적합합니다.
루핑 절차는 Akaike Information Criterion의 관점에서 우리가 GARCH 모델에 피드를 사용하는 데 사용할 수있는 "최적의"ARMA 모델을 제공합니다.
다음 코드 블록에서는 GARCH (1,1) 모델과 함께 rugarch 라이브러리를 사용할 것이다. 이 구문을 사용하려면 분산 및 평균에 대한 모델을 취하는 ugarchspec 사양 개체를 설정해야합니다. 분산은 GARCH (1,1) 모델을받는 반면, 평균은 ARMA (p, q) 모델을 취하는데, 여기서 $ p $와 $ q $는 위에서 선택됩니다. 또한 오류에 대한 세분화 된 분포를 선택합니다.
일단 우리가 명세를 선택하면, ugarchfit 명령을 사용하여 ARMA + GARCH의 실제 피팅을 수행합니다. 이 명령은 명세 오브젝트, S & amp; P500의 $ k $ 리턴 및 수치 최적화 솔버를 사용합니다. 우리는 수렴 가능성을 높이기 위해 다른 솔버를 시도하는 하이브리드를 선택했습니다.
GARCH 모델이 수렴하지 않으면 우리는 단순히 "긴"예측을 산출 할 날을 설정합니다. 이는 분명히 추측입니다. 그러나 모델이 수렴하면 날짜와 내일 예측 방향 (+1 또는 -1)을 루프가 닫힌 지점의 문자열로 출력합니다.
CSV 파일에 대한 출력을 준비하기 위해 다음 날의 예측 방향과 쉼표로 구분 된 데이터가 포함 된 문자열을 만들었습니다.
끝에서 두 번째 단계는 CSV 파일을 디스크에 출력하는 것입니다. 이를 통해 우리는 지표를 가져 와서 원할 경우 추가 분석을 위해 대체 백 테스팅 소프트웨어에서 사용할 수 있습니다.
그러나 현재 CSV 파일에는 약간의 문제가 있습니다. 이 파일에는 날짜 목록과 내일 방향에 대한 예측이 포함되어 있습니다. 아래의 백 테스트 코드에이 값을로드하면 예상 값이 예측 시점에 알려지지 않은 데이터를 나타내므로 실제로 미리보기 바이어스가 도입됩니다.
이것을 설명하기 위해 우리는 하루 앞당겨 예상 가치를 단순히 움직일 필요가 있습니다. 나는 이것을 파이썬을 사용하여보다 직관적이라고 발견했다. 판다 (pandas)와 같은 특수 라이브러리를 설치했다고 가정하고 싶지 않으므로 순수 파이썬으로 유지했습니다.
다음은이 절차를 수행하는 짧은 스크립트입니다. forecasts. csv 파일과 동일한 디렉토리에서 실행해야합니다.
이제는 forecasts_new. csv에 수정 된 표시기 파일이 저장되었습니다. 계산에 많은 시간이 걸리기 때문에 다운로드 할 수 있도록 여기에 전체 파일을 제공했습니다.
전략 결과.
표시기 CSV 파일을 생성 했으므로 실적을 '구매 및 보류'와 비교해야합니다.
먼저 CSV 파일의 표시기를 읽어서 spArimaGarch로 저장합니다.
그런 다음 ARIMA + GARCH 예측 날짜와 S & amp; P500의 원래 수익률 세트의 교차점을 만듭니다. 그런 다음 ARIMA + GARCH 전략의 수익률을 예측 기호 (+ 또는 -)에 수익률을 곱하여 계산할 수 있습니다.
ARIMA + GARCH 전략의 수익률을 얻으면 ARIMA + GARCH 모델과 "Buy & amp; Hold"둘 다에 대한 형평 곡선을 만들 수 있습니다. 마지막으로 단일 데이터 구조로 결합합니다.
마지막으로 xyplot 명령을 사용하여 동일한 플롯에서 두 가지 형평 곡선을 그릴 수 있습니다.
2015 년 10 월 6 일까지의 형량 곡선은 다음과 같습니다 :
1952 년부터 S & amp; P500에 대한 ARIMA + GARCH 전략의 지분 곡선과 "Buy & amp; Hold".
ARIMA + GARCH 전략은 65 년 동안 "Buy & amp; Hold"보다 월등히 뛰어났습니다. 그러나 1970 년대와 1980 년 사이에 대부분의 수익이 발생했음을 알 수 있습니다. 곡선의 변동성이 80 년대 초반까지는 극히 적어 변동성이 크게 증가하고 평균 수익률이 덜 인상적 이었음을 알 수 있습니다.
분명히 주식 곡선은 전체 기간 동안 큰 성과를 약속합니다. 그러나, 이 전략은 정말로 교환 가능 했습니까?
우선, ARMA 모델이 1951 년에만 발표되었다는 사실을 고려해 봅시다. 1970 년대까지 Box & amp; 젠킨스는 그들의 책에서 그것을 논의했다.
둘째, ARCH 모델은 Engle에 의해 80 년대 초반까지 공개적으로 발견되지 않았고 GARCH 자체는 1986 년 Bollerslev에 의해 출판되었습니다.
셋째, 이 "역행 (backtest)"은 물리적으로 거래 가능한 수단이 아니라 주식 시장 지수에서 실제로 수행되었습니다. 이와 같은 지수에 액세스하려면 S & P500 선물이나 SPDR 등의 ETF (Exchange Traded Fund)를 거래해야합니다.
그러므로 그러한 모델을 발명하기 전에 역사적인 시리즈에 적용하는 것이 정말로 적절한가? 또 다른 대안은 최신 데이터에 모델을 적용하는 것입니다. 실제로 2005 년 1 월 1 일부터 오늘에 이르기까지 지난 10 년 동안의 실적을 고려할 수 있습니다.
2005 년부터 오늘까지 S & amp; P500에 대한 ARIMA + GARCH 전략의 지분 곡선과 "Buy & amp; Hold".
보시다시피 주식형 곡선은 Buy & amp; 거의 3 년 동안 전략을 지키지 만, 2008/2009의 주식 시장 추락 중에 그것은 상당히 잘합니다. 이 기간에 중요한 일련의 상관 관계가있을 가능성이 높고 ARIMA 및 GARCH 모델에 잘 포착되기 때문에 이는 의미가 있습니다. 일단 시장이 2009 년 이후에 회복되고 좀 더 확률적인 경향으로 보이면 모델 성능은 다시 한번 고통을 겪기 시작합니다.
이 전략은 다른 주식 시장 지수, 주식 또는 기타 자산 클래스에 쉽게 적용될 수 있습니다. 다른 악기를 연구 해 보시길 강력히 권장합니다. 여기에 제시된 결과를 크게 향상시킬 수 있습니다.
다음 단계.
이제 ARIMA 및 GARCH 계열의 모델에 대해 논의 했으므로 장기 기억 프로세스, 상태 공간 모델 및 시계열 집합을 고려하여 시계열 분석 토론을 계속하고 싶습니다.
이러한 일련의 시계열 영역은 여기서 제시 한 것 이외의 예측을 개선 할 수있는 모델을 소개하여 거래 수익성을 크게 높이거나 위험을 감소시킵니다.
표시기 생성, 백 테스트 및 플로팅의 전체 목록은 다음과 같습니다.
다시 가져 오기 전에 forecasts. csv에 적용 할 Python 코드는 다음과 같습니다.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.
No comments:
Post a Comment