Forex Pairs Trading의 통화 통합.
외환 거래의 통합은 중요한 도구입니다. 나에게 공적분은 모든 경제적 환경에서 이익을 얻을 수있는 우수한 중립적 기계 무역 전략의 기초입니다. 시장이 상승 추세, 하락 추세 또는 단순히 옆으로 움직이든, 외환 거래는 일년 내내 이익을 얻을 수 있습니다.
공적분을 활용하는 외환 거래 전략은 통계적 재정 거래와 평균으로의 전환을 기반으로하는 컨버전스 거래의 한 형태로 분류됩니다. 이 유형의 전략은 1980 년대 모건 스탠리 (Morgan Stanley)의 양적 거래 팀이 주식 쌍을 사용하여 처음으로 대중화되었습니다. 그러나 다른 트레이더들도 외환 거래에서도 매우 효과적이라는 것을 알았습니다.
공적분에 기초한 외환 쌍 거래.
공적분에 기반한 외환 거래는 근본적으로 회귀 - 평균 전략입니다. 간단하게 말해서 둘 이상의 외환 쌍이 공적으로 통합 될 때, 이는 개별 외환 쌍들 사이의 가격 스프레드가 시간이 지남에 따라 일관되게 평균값으로 되돌아가는 경향이 있음을 의미합니다.
공적분은 상관 관계가 아니라는 것을 이해하는 것이 중요합니다. 상관 관계는 가격의 공동 움직임에 관한 단기간의 관계입니다. 상관 관계 란 개별 가격이 함께 움직이는 것을 의미합니다. 상관 관계는 일부 거래자에 의존하지만, 그 자체로는 신뢰할 수없는 도구입니다.
다른 한편, 공적분은 가격이 함께 움직이는 것처럼 특정 범위 또는 스프레드 내에서 함께 움직이는 가격의 공동 움직임과 장기적인 관계이다. 나는 공적분이 외환 거래에서 매우 유용한 도구라는 것을 알게되었습니다.
내 외환 거래 중 스프레드가 기계 거래 알고리즘에 의해 계산 된 한계 값까지 넓어지면 나는 쌍 가격 사이의 스프레드를 "짧게"합니다. 다시 말해서, 나는 공적분으로 인해 확산이 0으로 되돌아 갈 것을 내기하고있다.
기본 외환 거래 전략은 매우 간단합니다. 특히 기계 거래 시스템을 사용할 때 : 비슷한 방식으로 움직이는 두 가지 통화 쌍을 선택합니다. 나는 실적이 저조한 통화 쌍을 사고 외판을 판매합니다. 두 쌍 사이의 퍼짐이 수렴 할 때, 나는 이익을 위해 나의 입장을 마감한다.
공적분에 기반한 외환 거래는 시장 중립적 인 전략입니다. 예를 들어 통화 쌍이 폭락하면 거래가 장기적 측면에서 손실을 가져오고 단기적 측면에서 상쇄 효과가 발생할 수 있습니다. 따라서 모든 통화와 기본 상품이 갑자기 가치를 잃지 않는 한 최악의 시나리오에서는 순매수가 0에 가까워 야합니다.
같은 맥락으로, 많은 시장에서 페어 트레이딩은 자체 매매 트레이딩 전략이다. 왜냐하면 짧은 매도로부터 얻은 수익금이 때때로 긴 포지션을여는데 사용될 수 있기 때문이다. 이 혜택이 없다고하더라도, 공적분을 동원한 외환 거래 쌍은 여전히 잘 작동합니다.
외환 거래를위한 공적분의 이해.
균형 환율은 단기 균형 가격뿐 아니라 장기적인 가격 기대치를 바탕으로 내 기계 거래 시스템을 프로그래밍 할 수있게 해주는 외환 거래 쌍방에서 유용합니다.
공적분 중심의 외환 거래의 작동 방식을 이해하려면 먼저 공적분을 정의한 다음 기계적 거래 시스템에서 어떻게 기능 하는지를 설명하는 것이 중요합니다.
앞에서 말했듯이, 공적분은 시계열 집합 사이의 평형 관계를 말합니다. 예를 들어, 균형이 맞지 않는 별도의 외환 쌍의 가격과 같은 시계열 집합 간의 균형 관계를 말합니다. 수학적 전문 용어로 표현되는 공적분 (cointegration)은 시계열에서 비정상 변수 간의 관계를 측정하는 기술입니다.
두 개 이상의 시계열이 각각 1의 루트 값을 가지지 만 선형 조합이 고정되어있는 경우 시계열은 공적분이라고합니다.
간단한 예로서, 주식 시장 지수와 관련 선물 계약의 가격을 고려해보십시오. 이 두 가지 상품의 가격이 단기간에 무작위로 방황 할 수도 있지만 궁극적으로는 균형으로 돌아갈 것이고 편차는 변화 없는.
고전적인 "무작위 걸음 걸이"예를 들어 설명하는 또 다른 예가 있습니다. 카 루핑 밤 이후에 집으로 걸어가는 두 명의 개별 술꾼이 있다고 가정 해 보겠습니다. 이 두 술주정 뱅이가 서로를 모르고 있다고 가정 해 봅시다. 그러므로 개별 경로 사이에 예측 가능한 관계는 없습니다. 그러므로 그들의 운동 사이에는 공적분이 없다.
대조적으로, 개가 가죽 끈에 그의 개를 동반하는 동안 각 술꾼이 귀환을 방황하고 있다는 생각을 고려하십시오. 이 경우, 이 두 가난한 생물의 경로 사이에는 확실한 연결 고리가 있습니다.
이 둘은 각각 단기간에 여전히 개별 통로를 유지하고 있지만 어느 한 시점에서 어느 한 시점에서 어느 한 시점에서 임의로 다른 지점까지 임의로 리드하거나 지연 할 수 있지만 여전히 항상 가까운 지점에서 발견됩니다. 그들 사이의 거리는 상당히 예측 가능하기 때문에 쌍은 공적분이라고한다.
기술 용어로 돌아가서, 두 개의 비 정적 시계열 (예 : AB와 XY의 가상 쌍 집합)이있을 경우 이들의 차이가 계산 될 때 고정되어 있으며이 쌍을 통합 된 1 차 계열이라고합니다. 또한 I (1) 시리즈를 부르십시오.
이 시리즈들 중 어떤 것도 일정한 값을 유지하지 않더라도 고정 된 AB와 XY의 선형 조합 (I (0)으로 설명 됨)이 있으면 AB와 XY가 공적분됩니다.
위의 간단한 예는 가상의 외환 쌍의 두 시계열로만 구성됩니다. 그러나 공적분의 개념은 더 높은 통합 주문을 사용하는 여러 시계열에도 적용됩니다 ... 여러 개의 개가 각각 다른 길이의 가죽 끈을 동반 한 방랑 술에 관해 생각해보십시오.
실 사회 경제학에서는 소득과 지출, 또는 형법의 엄격함과 감옥 인구의 크기와 같은 쌍의 공적분을 보여주는 사례를 찾는 것이 쉽습니다. 외환 거래에서, 내 초점은 통화의 공적분 된 쌍 사이의 양적 및 예측 가능한 관계를 활용하는 데 있습니다.
예를 들어, 나는이 두 가지 공적분 화 된 가상 통화 쌍인 AB와 XY를보고 있다고 가정하고 이들 사이의 공적분 관계는 AB & # 8211; XY = Z, 여기서 Z는 평균이 0 인 정지 시리즈, 즉 I (0)입니다.
이것은 간단한 거래 전략을 제안하는 것처럼 보일 것이다 : AB-XY & gt; V 및 V가 내 임계 값 트리거 가격 인 경우 AB가 가격이 하락하고 XY가 증가 할 것으로 예상되므로 외환 거래 시스템이 AB를 판매하고 XY를 구매합니다. 또는, AB-XY & lt; - V, 나는 AB를 사고 XY를 팔 것을 기대할 것입니다.
외환 거래에서 가짜 회귀를 피하십시오.
그러나 위의 예에서 제안하는 것처럼 간단하지 않습니다. 실제로, 외환 거래를위한 기계 거래 시스템은 AB와 XY 사이의 R 제곱 값에 의존하는 대신 공적분을 계산해야합니다.
비상업적 인 변수를 다루는 경우 일반 회귀 분석이 부족하기 때문입니다. 그것은 소위 가짜 회귀 (spurious regression)를 야기하는데, 이것은 변수가없는 경우에도 변수들 간의 관계를 암시합니다.
예를 들어, 나는 서로에 대해 2 개의 "무작위 걸음 걸이"시계열을 회귀 시킨다고 가정 해보자. 선형 관계가 있는지 테스트 할 때 매우 자주 p 값이 낮은 R - 제곱 값과 높은 p 값을 찾습니다. 아직도, 이 2 개의 무작위 도보 사이 아무 관계도 없다.
외환 거래의 공적분 수식 및 테스트.
공적분을위한 가장 간단한 테스트는 다음과 같이 작동하는 Engle-Granger 테스트입니다.
AB t와 XY t가 둘 다 I가 맞는지 확인한다. (1) 최소 제곱 법을 사용하여 공적분 관계 [XY t = aAB t + et]를 계산한다. 공적분 잔차 등이 Augmented Dickey-Fuller (ADF) 테스트.
자세한 그레인저 방정식 :
I (0)은 공적분 관계를 설명한다.
XY t-1 - βAB t-1은 장기간에 걸친 불균형의 정도를 설명하는 반면, αi는 통화 쌍의 시계열이 불균형을 바로 잡는 속도와 방향이다.
외환 거래에서 Engle-Granger 방법을 사용하면 회귀의 베타 값이 쌍의 거래 크기를 계산하는 데 사용됩니다.
외환 거래에서 Engle-Granger 방법을 사용하면 회귀의 베타 값이 쌍의 거래 크기를 계산하는 데 사용됩니다.
외환 거래에서 공적분에 대한 오차 보정 :
외환 거래를 위해 공적분을 사용할 때, 공적분 된 변수가 조정되고 장기 균형으로 어떻게 돌아갈지를 설명하는 것도 도움이됩니다. 예를 들어, 여기에 두 개의 샘플 외환 쌍 시계열이 자동 회귀 적으로 표시됩니다.
공적분에 기초한 외환 쌍 거래.
외환 거래를 위해 기계 거래 시스템을 사용하면 설치와 실행이 매우 간단합니다. 첫째, 나는 그들이 EUR / USD와 GBP / USD와 같이 공적화 될 수있는 것처럼 보이는 두 개의 통화 쌍을 찾는다.
그런 다음 두 쌍 간의 예상 스프레드를 계산합니다. 다음으로, unit-root 테스트 또는 다른 일반적인 방법을 사용하여 스테 틀러 리티를 확인합니다.
내 인바운드 데이터 피드가 제대로 작동하는지 확인하고 기계적 거래 알고리즘이 거래 신호를 생성하도록합니다. 매개 변수를 확인하기 위해 적절한 백 테스트를 수행했다고 가정하면 마침내 내 외환 거래에서 공적분을 사용할 준비가되었습니다.
나는 Cointegration 외환 거래 시스템을 구축하기위한 훌륭한 출발점을 제공하는 MetaTrader 지표를 발견했습니다. 그것은 Bollinger Band 표시기처럼 보이지만 사실 오실레이터는 두 개의 서로 다른 통화 쌍 사이의 가격 차이를 보여줍니다.
이 오실레이터가 높은 극단 또는 저 극단으로 이동하면 페어가 디커플링 (decoupling)되어 거래를 알리는 신호입니다.
그래도 성공을 확신하려면 적절한 거래를 실행하기 전에 Augmented Dickey-Fuller 테스트를 통해 신호를 필터링하는 내 기계적 거래 시스템을 신뢰해야합니다.
물론 자신의 외환 거래를 위해 공적분을 사용하고자하는 사람은 아직 알 고 프로그래밍 기술이 부족하여 숙련 된 프로그래머가 성공한 전문가 고문을 의뢰 할 수 있습니다.
알고리즘 트레이딩의 마법을 통해 데이터 분석을 기반으로 가격 스프레드를 정의하는 기계 거래 시스템을 프로그래밍합니다. 내 알고리즘은 가격 편차를 모니터링 한 다음 시장 비효율을 수확하기 위해 통화 쌍을 자동으로 구매 및 판매합니다.
외환 거래와 함께 공적분을 사용할 때주의해야 할 위험.
Forex 쌍 거래는 전적으로 위험 부담이 없습니다. 무엇보다도 공적분을 이용한 외환 거래는 평균 가치가 과거와 마찬가지로 미래에도 동일 할 것이라는 가정에 근거한 평균 회귀 전략이라고 생각합니다.
앞에서 언급 한 Augmented Dickey-Fuller 테스트는 외환 거래를위한 공적분 관계를 검증하는 데 도움이되지만 미래에 스프레드가 계속해서 공적분 될 것이라는 의미는 아닙니다.
강력한 리스크 관리 규칙에 의거합니다. 즉, 계산 된 역 환위가 무효화되는 경우 또는 내 기계 거래 시스템이 수익성이없는 거래에서 나옵니다.
평균값이 바뀌면 표류가됩니다. 가능한 한 빨리 드리프트를 감지하려고합니다. 다시 말하면 이전에 공적화 된 외환 쌍의 가격이 이전에 계산 된 평균으로 되돌아가는 대신 추세로 움직이기 시작하면 내 기계 거래 시스템의 알고리즘이 가치를 다시 계산해야 할 때입니다.
외환 거래를위한 기계 거래 시스템을 사용할 때이 기사 앞부분에서 언급 한 자기 회귀 식을 사용하여 스프레드를 예측하는 이동 평균을 계산합니다. 그런 다음 계산 된 오류 범위에서 거래를 종료합니다.
Cointegration는 나의 forex 쌍 무역을위한 귀중한 공구이다.
외환 거래에서 공적분 사용은 시장 중립적 인 기계 무역 전략으로 어떤 시장 환경에서도 거래가 가능합니다. 그것은 의미로의 복귀에 기반을 둔 현명한 전략이지만, 다른 회귀 수단을 의미하는 외환 거래 전략의 함정을 피하는 데 도움이됩니다.
수익성있는 기계 거래 시스템에서의 잠재적 인 사용 때문에 외환 거래를위한 공적분은 학술 연구자 및 전문 상인 모두의 관심을 끌었습니다.
이 양에 초점을 맞춘 블로그 기사 또는 주제에 대한이 학술 토론과 거래자 간의 토론에 대해 많은 최근 출판 된 기사가 많이 있습니다.
Cointegration는 나의 Forex 한 쌍 무역에있는 귀중한 공구이고, 나는 당신이 너 자신을 위해 그것으로 볼 것을 강력하게 추천한다.
21 응답.
아주 좋은 기사. 그것은 고무적이다. 그것을 쓰는 주셔서 감사합니다!
상관 관계는 주식 (지분)에도 적용됩니다. 그 차이점은 무엇입니까? 위의 과정을 주식에 적용 할 수 있습니까?
예. 동일한 프로세스가 주식 및 파생 상품에 적용될 수 있습니다. 외환 쌍과 비교할 때 주식의 그런 큰 우주가 있기 때문에, 거래를위한 잠재적 인 기회의 더 많은 수가 있어야합니다. 오늘날의 거래 시스템의 수 많은 기능을 통해 많은 관계 세트를 실시간으로 신속하게 조사 할 수 있습니다. 또한 옵션 통합 자들에 의해 공적분을 사용할 수 있습니다. 특정 종목 / 옵션 간의 가격 관계로 인해 거래자가 상당히 위험한 종목에 참여할 수있는 인기있는 코카 콜라 - 펩시 스프레드와 같은 결과를 기대할 수 있습니다.
이 전략을 사용하여 일주일 또는 수주에 걸쳐 거래합니까? 또한, 어떤 프로그래밍 언어를 권하고 싶습니다. R은 계산을 실행하는 데 시간이 걸리며 일간 거래 일 경우 지연이 발생합니다.
프로그래밍 언어는 하루 종일 거래의 중요성을 느끼지 못합니다. Perl, Python, C / C ++ 및 C #과 같은 주요 언어도 좋습니다. R은 매우 빠르지 만 메모리를 동적으로 할당해야하는 경우 느려집니다.
나는 매일 차트를 사용하여 거래하며 2 ~ 2 주 동안 대부분의 거래를 유지합니다. Shaun은 전문 프로그래머이며, 주어진 거래 전략에 대해 최상의 결과를 얻으려면 항상 최상의 프로그래밍 언어를 사용하는 자신의 판단을 신뢰합니다. 사실, Shaun은 공적분 및 기타 요인을 활용할 수있는 균형 잡힌 성과를 거둔 프로그램을 만들 수 있습니다. 견적을 원하신다면 즉시 연락하십시오.
이 MT4의 구현에는 약간의 관심이 있습니다. 코드에서이 전략을 구현 한 세부 사항을 제공 할 수 있으면 czimmeronestepremoved로 보내주십시오.
나는 나의 석사를 위해 FX에서 공적분 전략에 관한 작은 프로젝트를하고있다. 나는 많은 통화 쌍에 대한 공적분 테스트를 실시했다고 생각합니다. 통계적으로 크게 공적분을 발견 한 사람은 누구입니까?
Eddie가 실제로 숫자를 사용했다고 생각하지 않습니다. 이 기사는 개념에 대한 전반적인 가이드가 되려고하지만 진실한 전략이 될 수는 없습니다.
1) USD / JPY 및 EUR / CHF.
2) EUR / PLN 및 EUR / HUF.
3) USD / TRY 및 USD / ZAR.
4) AUD / USD 및 NZD / USD.
5) EUR / NOK 및 EUR / SEK.
나는이 것들이 상당히 상관 관계가 있다는 것을 알고 있지만 그것은 공적분을 암시하지 않는다.
좋은 외환 쌍이 공적합니다 :
시장 중립적 인 전략이 없기 때문에 USDJPY / EURCHF는 공적분이 될 것입니다.
공유해 주셔서 감사합니다.
누구든지 평균 회귀 전략을 사용하여 백 테스트 코드를 구현 했습니까?
나는 두 개의 외환 쌍 사이에 pip 값을 주어야합니까?
누구든지 코드 백 테스트 비용을 추가하고 수익성있는 결과를 얻었습니까?
나는 누군가가 가지고 있다고 확신하지만 단기 차트에 대해 확실한 답을 찾을 수있는 곳이 아닙니다. 여러분은 장기적인 공동 연구를 할 수는 있지만, 제가 한 연구는 아닙니다.
유일한 공적분은 유로와 CHF 그리고 AUD와 NZD 간의 유일한 친목 무역이며, 이 국가와 중앙 은행 간의 경제는이 공적분을 창출하고있다.
EUR 및 GBP가 아닌가요?
안녕, 에디. 훌륭한 기사. 나는 10 년 동안의 차트를 생각하면서 다시 테스트 해왔다. & # 8221; 나는 이것을 생각한 최초의 사람이 될 수 없다! & # 8221; 이 사이트를 발견했을 때. 이것을 작성해 주셔서 대단히 감사드립니다. 더 이상 혼자라고 느끼지 않습니다. 🙂 어떤 브로커를 사용하는지 궁금하거나 여러 브로커를 사용하는지 궁금합니다. 시간 내 줘서 고마워.
근실하게 로버트 J. Armagost.
내가 사용하는 주요 브로커는 Pepperstone과 STO (TopTradr를 통해)입니다.
안녕하세요 Shaun 저는이 전략을 수동으로 거래 해 왔습니다. 이것을 자동화 할 소프트웨어가 있습니까? (그래서 더 이상 심야에 일어나지 않아도됩니다.) 시간 내 주셔서 감사합니다.
선반에서 벗어나지 만 우리가 만들 수있는 무언가입니다. 견적을 얻기 위해 입장 및 퇴장 규정에 저를 쏴주세요. infeestestremoved.
로버트 & # 8212; 좋은 의견에 감사드립니다. Shaun은 이러한 유형의 거래 전략을 구현할 수있는 적절한 도구를 보유하고 있으며, 나는 그의 중개인 권고 사항에 전적으로 동의합니다. 다시 한번 감사드립니다. EF.
QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
2016 년 6 월 2 일 Michael Halls-Moore
잠시 후 ARIMA 및 GARCH 시계열 모델을 매일 S & amp; P500 데이터에 적용하여 거래 모델을 검토했습니다. 우리는 그 기사에서 우리가 궁극적으로 고려할 다른 이전 시계열 분석 기사뿐만 아니라 거래 전략을 되 돌리는 것과 그것들을 만드는 방법을 언급했다.
이 기사에서는 공적분이라는 주제를 논의하고자합니다. 이 주제는 평균 자산 반전 쌍을 형성 할 수 있는지를 결정할 수있는 시계열 개념입니다. 여기에 공적분과 관련된 시계열 이론을 다룰 것이며 다음 기사에서는 새로운 오픈 소스 백 테스팅 프레임 워크 인 Qstrader를 사용하여 실제 거래 전략에이를 적용하는 방법을 보여줄 것입니다.
우리는 전통적인 "페어 트레이딩 (pair trading)"프레임 워크에서 평균 반향을 논의함으로써 진행할 것입니다. 이것은 궁극적으로 우리를 공적분과 단위 근본 테스트로 인도하는 자산의 선형 조합의 안정성에 대한 개념으로 인도 할 것입니다. 일단 이러한 테스트의 윤곽을 잡으면 R 통계 환경에서 다양한 시계열을 시뮬레이션하고 공적분을 평가하기 위해 테스트를 적용합니다.
평균 반전 거래 전략.
평균 반전 "쌍 무역"의 전통적 아이디어는 자신의 움직임에 영향을 미치는 근본적인 요소를 공유하는 두 개의 분리 된 자산을 동시에 길고 짧게하는 것입니다. 주식 시장에서의 한 예가 맥도날드 (NYSE : MCD)와 버거 킹 (NYSE : BKW)과의 긴 합병 이전 일 수 있습니다 (Tim Horton과의 합병 이전).
이에 대한 근거는 햄버거 생산 및 소비에 영향을 미치는 광범위한 시장 요인으로 인해 장기 주가가 평형을 이룰 수 있다는 것입니다. 맥도날드에만 영향을 미치는 공급망 혼란과 같이 한 쌍의 개인에 대한 단기간의 혼란은 상대적인 가격에 일시적인 혼란을 가져올 것입니다. 이는 중단이 해결되면 두 주식이 평형 가치로 돌아 가면서이 중단 지점에서 수행 된 장기간 단기 무역이 수익을 창출해야 함을 의미합니다. 이것은 고전적인 "쌍 무역"의 본질입니다.
퀀트 (quants)로서, 우리는 자산 쌍뿐 아니라 개별적으로 상호 연관된 자산 바구니 (baskets of asset)에 대해서도 평균 반 환율 거래를 수행하는 데 관심이 있습니다.
이를 위해 위에 설명 된 방식으로 되돌리기를 의미하는 자산 쌍 또는 바구니를 식별 할 수있는 강력한 수학적 프레임 워크가 필요합니다. 여기서 공적분 시계열의 개념이 발생합니다.
아이디어는 MCD와 BKW의 무작위 걸음과 같은 한 쌍의 비 정적 시계열을 고려하고 고정 된 평균과 분산을 갖는 고정 계열을 생성하기 위해 각 계열의 선형 조합을 형성하는 것입니다.
이 고정식 시리즈는 값이 평균값에서 멀리 떨어지는 경우 단기간의 혼란을 일으킬 수 있지만 안정성에 따라이 값은 결국 평균값으로 돌아갑니다. 거래 전략은 적절한 파열 지점에서 쌍을 갈망 / 단락시키고 시리즈의 장기간 반전을 베팅함으로써 베팅을 활용할 수 있습니다.
이와 같은 평균 회귀 전략은 광범위한 "계단식"정지 시계열을 만드는 것을 허용합니다. 우리는 확실히 "바닐라"주식에만 국한되지 않습니다. 예를 들어 원유와 같은 원자재 가격과 석유 생산 회사의 바구니를 추적하는 ETF (Exchange Traded Funds)를 이용할 수 있습니다. 따라서 이러한 평균 복귀 시스템을 식별 할 수있는 범위가 충분히 있습니다.
다음 기사의 주제가 될 실제 거래 전략의 메커니즘을 탐구하기 전에 먼저 그러한 통합 된 시리즈를 통계적으로 식별하는 방법을 이해해야합니다. 이를 위해 시계열 분석의 기술을 활용하고 이전 주제와 마찬가지로 R 통계 언어의 사용을 계속합니다.
농축.
이제 우리는 평균 회귀 거래를 수행하기위한 양적 틀의 필요성을 동기 부여 했으므로 우리는 공적분의 개념을 정의 할 수있다. 둘 다 비 고정적 인 한 쌍의 시계열을 생각해보십시오. 우리가 일련의 논문 시리즈를 특정 선형 조합으로 취하는 경우 때때로 고정 된 시리즈로 이어질 수 있습니다. 그런 한 쌍의 시리즈는 공적분이라고 불릴 것이다.
수학적 정의는 다음과 같이 주어진다.
농축.
$ \ $와 $ \ $를 $ a, b \ in \ mathbb $ 상수와 함께 두 개의 비 정적 시계열로 둡니다. 결합 된 $ a x_t + b y_t $가 고정되어 있다면 $ \ $와 $ \ $가 공적분이라고 말할 수 있습니다.
이 정의가 유용하지만 $ a $와 $ b $의 값을 결정하는 메커니즘이나 그러한 결합이 통계적으로 고정되어 있는지 여부는 직접 제공하지 않습니다. 후자의 경우 단위근 테스트를 활용해야합니다.
단위 루트 테스트.
이전의 회귀 AR (p) 모델에 대한 논의에서 우리는 특성 방정식의 역할을 설명했다. 우리는 단순히 역방향 이동 형식으로 작성된 자동 회귀 모델이며 0으로 설정됨을 주목했습니다. 이 방정식을 풀면 우리에게 뿌리가 생겼습니다.
모델이 정지 된 것으로 간주되기 위해서는 방정식의 모든 근원이 단일성을 초과해야합니다. 단위가 뿌리 인 단일성 (unity)을 가진 AR (p) 모델은 고정적이지 않다. 무작위 걷기는 단위 뿌리가있는 AR (1) 과정이므로 비 고정적입니다.
따라서 시계열이 고정되어 있는지 여부를 감지하기 위해 시계열 샘플에서 단위근 존재에 대한 통계 가설 검정을 구성 할 수 있습니다.
우리는 단위 뿌리에 대한 세 가지 별도의 테스트를 고려할 것입니다 : Augmented Dickey-Fuller (AFD), Phillips-Perron 및 Phillips-Ouliaris. 우리는 그것들이 다른 가정에 기초하고 있지만 궁극적으로 똑같은 문제, 즉 테스트 된 시계열 샘플의 안정성에 대해 테스트하고 있음을 알 수있을 것입니다.
세 가지 테스트를 모두 차례 차례 살펴 보겠습니다.
증강 된 Dickey-Fuller Test.
Dickey와 Fuller [2]는 단위근 존재에 대한 다음과 같은 테스트를 도입했습니다. 원래의 테스트는 시계열 $ z_t = \ alpha z_ + w_t $를 고려합니다. $ w_t $는 불연속 화이트 노이즈입니다. 귀무 가설은 $ \ alpha = 1 $이고, 대립 가설은 $ \ alpha & lt; 1 $.
Sic과 Dickey [6]는 Dickey-Fuller (ADF) 테스트를 개선하여 원래의 Dickey-Fuller 테스트를 향상 시켰습니다. 이 테스트에서는 시리즈 $ z_t $가 AR (1) 모델의 AR (p) 모델로 수정되었습니다. 파이썬을 사용하여 계산 한 이전 기사에서 테스트에 대해 논의했습니다. 이 기사에서는 R을 사용하여 동일한 테스트를 수행 할 것이다.
필립스 - 페론 테스트.
ADF 테스트는 시계열 샘플의 근사치 인 AR (p) 모델을 가정하고 고차 자동 상관 관계를 설명하기 위해이를 사용합니다. Phillips-Perron 테스트 [5]는 AR (p) 모델 근사를 가정하지 않습니다. 대신 비 파라 메트릭 커널 평활화 방법이 고정 된 프로세스 $ w_t $에 사용되어 지정되지 않은 자기 상관과 이분산성을 설명 할 수 있습니다.
Phillips-Ouliaris Test.
Phillips-Ouliaris test [4]는 두 개의 시계열 사이의 잔차 중 공적분의 증거를 테스트한다는 점에서 앞의 두 가지 테스트와 다르다. 여기에서 주된 아이디어는 ADF와 같은 테스트가 공적분 추정치에 적용될 때 공적분이 존재하지 않는 귀무 가설 하에서 Dickey-Fuller 분포를 가지지 않는다는 것이다. 대신 이러한 배포판을 Phillips-Ouliaris 배포라고하며 따라서이 테스트가 더 적절합니다.
단위 루트 테스트의 어려움.
ADF와 Phillips-Perron 테스트는 점근 적으로 동일하지만 유한 샘플에서 매우 다른 해답을 얻을 수 있습니다 [7]. 이것은 자기 상관과 이분산 률을 다르게 처리하기 때문입니다. 이 테스트를 적용 할 때 어떤 가설이 테스트되고 있으며, 임의의 계열에 맹목적으로 적용하지 말아야한다는 것을 분명히해야합니다.
또한 단위근 테스트는 고정 된 고정 공정과 비 고정 공정을 구별하는 데 큰 도움이되지 못합니다. 금융 시계열 형식의 특정 양식을 사용할 때 매우 신중해야합니다. 이는 금융 시장의 체제 변화 또는 다른 구조적 변화로 인해 모델링 된 기본 관계 (즉, 두 개의 유사한 쌍의 평균 복귀)가 자연적으로 파괴 될 때 특히 문제가 될 수 있습니다.
R과 Simulated Cointegrated Time Series
이제는 이전의 단위근 테스트를 우리가 공적분을 알고있는 시뮬레이션 된 일부 데이터에 적용 해 보겠습니다. 우리는 공적분의 정의를 사용하여 근본적인 확률 적 추세를 공유하지만 고정 된 선형 조합을 가진 두 개의 비 정적 시간 시리즈를 인위적으로 생성 할 수 있습니다.
첫 번째 작업은 랜덤 워크 $ z_t = z_ + w_t $를 정의하는 것입니다. 여기서 $ w_t $는 불연속 화이트 노이즈입니다. 이 개념을 다룰 필요가 있다면 화이트 노이즈와 랜덤 워크에 대한 이전 기사를 살펴보십시오.
무작위 걸음으로 $ z_t $는 두 개의 새로운 시계열 $ x_t $와 $ y_t $를 생성합니다. 이 두 시계열은 $ z_t $의 기본적인 확률 적 추세를 다른 양으로 공유합니다 :
\ begin x_t & = & p z_t + w_ \\ y_t & = & q z_t + w_ \ end.
그런 다음 선형 결합을 취하면 $ a x_t + b y_t $ :
\ begin a x_t + b y_t & = & a (p z_t + w_) + b (q z_t + w_) \\ & = & (ap + bq) z_t + a w_ + b w_ \ end.
$ ap + bq = 0 $ 인 경우 고정 된 계열 (즉, 백색 잡음 항의 조합) 만 얻는 것을 볼 수 있습니다. 우리는 이것을 좀 더 구체적으로하기 위해 숫자를 넣을 수 있습니다. $ p = 0.3 $ 및 $ q = 0.6 $이라고 가정하십시오. 몇 가지 간단한 대수법 후에 우리는 $ a = 2 $와 $ b = -1 $가 $ ap + bq = 0 $이면 고정 직렬 결합으로 이어진다는 것을 알 수 있습니다. 그러므로 $ x = $ 2와 $ b = -1 $ 일 때 $ x_t $와 $ y_t $는 공적분된다.
고정 된 조합을 시각화하기 위해 이것을 R에서 시뮬레이션 해보자. 먼저, 기본 무작위 워킹 시리즈 인 $ z_t $를 만들고 그려 봅니다.
랜덤 워크의 실현, $ z_t $
우리가 시리즈의 상관 로그와 그 차이를 플로팅한다면, 우리는 자기 상관의 증거를 거의 볼 수 없다 :
$ z_t $의 Correlograms와 $ z_t $의 차이점이있는 시리즈
그러므로 $ z_t $의 실현은 분명히 무작위 걸음처럼 보입니다. 다음 단계는 $ p = 0.3 $ 및 $ q = 0.6 $을 사용하여 $ z_t $에서 $ x_t $ 및 $ y_t $를 작성한 다음 두 가지를 플롯합니다.
기본 무작위 걸음 $ z_t $에 기초한 $ x_t $ 및 $ y_t $ 계열의 플롯
보시다시피 둘 다 비슷합니다. 물론 그들은 정의에 의한 것입니다 - 그들은 $ z_t $에서 동일한 기본 랜덤 워크 구조를 공유합니다. 이제 $ p = 2 $와 $ q = -1 $를 사용하여 선형 결합 comb을 만들고 자기 상관 구조를 검사 해 봅시다 :
플롯 플롯 - 선형 조합 시리즈 - 및 해당 상관 그래프.
콤비네이션 시리즈 빗은 고정식 시리즈와 매우 흡사합니다. 이것은 그 정의에 따라 예상된다.
3 개의 단위 근음 테스트를 선형 조합 시리즈에 적용 해 봅시다. 첫째, 확대 된 Dickey-Fuller 테스트 :
p - 값은 작기 때문에 시리즈가 단위근을 가지고 있다는 귀무 가설을 기각하는 증거가 있습니다. 이제 Phillips-Perron 테스트를 시도합니다.
다시 한번 우리는 작은 p - 값을 가지므로 단위 근의 귀무 가설을 거부 할 증거가 있습니다. 마지막으로 Phillips-Ouliaris 테스트를 시도합니다 (기본 계열 구성 요소의 매트릭스 입력이 필요합니다).
그러나 다시 우리는 귀무 가설을 거부하는 증거를 나타내는 작은 p - 값을 본다. 그러므로 우리가 공적분되는 일련의 시리즈를 다루고 있다는 것이 분명하다.
대신 $ p = -1 $ 및 $ q = 2 $와 별도로 조합을 만들면 어떻게됩니까?
불량의 음모 - "부정확 한"선형 조합 시리즈 - 및 그 상관 그래프.
이 경우 우리는 Augmented Dickey-Fuller test의 p-value에 의해 결정된 단위근 존재에 대한 귀무 가설을 기각 할 충분한 증거가 없습니다. 우리가 임의로 고정 된 시리즈를 형성하기 위해 $ p = 2 $ 및 $ b = -1 $의 올바른 값으로 설정하는 대신 $ a $와 $ b $의 선형 결합을 임의로 선택하면 의미가 있습니다.
다음 단계.
이 기사에서는 시계열의 선형 조합이 고정되어 있는지, 즉 두 시리즈가 공적분되었는지 여부를 평가하기 위해 여러 단위 루트 테스트를 조사했습니다.
향후 기사에서는 이러한 공적분 테스트를 기반으로 Qstrader를 사용하여 일일 주식 및 ETF 데이터에 대한 평균 수익 전환 전략의 완전한 구현을 고려할 것입니다.
또한 우리는 분석을 두 개 이상의 자산에 걸친 공적분 에까지 확대하여 공적분 포트폴리오를 활용하는 거래 전략을 이끌어 낼 것입니다.
참조.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.
Gekko Quant - 양적 거래.
정량적 거래, 통계적 차익 거래, 기계 학습 및 이진 옵션.
소식 탐색.
통계적 차익 거래 & # 8211; 공감대를 가진 한 쌍의 무역.
마지막으로 gekkoquant / 2012 / 12 / 17 / 통계적 재정 차용 테스트 - 공적분 확대 - 디키 - 풀러 / 필자는 공적분 론 (cointegration), 정의에 의한 스프레드가 되돌아 가야하는 고정 쌍을 식별하는 수학적 테스트를 시연했습니다.
이 게시물에서 나는 공적분 된 쌍을 거래하는 방법을 보여주고 Royal Dutch Shell A와 B 주식을 분석 할 계획이다 (우리는 그들이 나의 마지막 지위에서 공적분되었다는 것을 알고있다). 공적분 된 쌍을 거래하는 것이 곧장 앞으로 나아갈 것입니다. 우리는 스프레드의 평균과 분산을 알고 있습니다. 우리는 그 값이 일정하다는 것을 알고 있습니다. stat arb의 진입 점은 단순히 평균값에서 큰 편차가 있는지 찾아 보는 것입니다.
기본적인 전략은 다음과 같습니다.
spread (t) & gt; = Mean Spread + 2 * Standard Deviation이면, Short로 간다. spread (t) ≤ Mean Spread & lt; = Mean Spread & 2 * 표준 편차는 그 후에 길게 간다.
If spread(t) >= nDay Moving Average + 2*nDay Rolling Standard deviation then go Short If spread(t) <= nDay Moving Average – 2*nDay Rolling Standard deviation then go long.
If spread(t) <= Mean Spread + 2*Std AND spread(t-1)> Mean Spread + 2*Std If spread(t) >= Mean Spread – 2*Std AND spread(t-1)< Mean Spread – 2*Std Advantage is that we only trade when we see the mean reversion, where as the other models are hoping for mean reversion on a large deviation from the mean (is the spread blowing up?)
This post will look at the moving average and rolling standard deviation model for Royal Dutch Shell A vs B shares, it will use the hedge ratio found in the last post.
Sharpe Ratio Shell A & B Stat Arb Shell A.
Annualized Sharpe Ratio (Rf=0%):
Shell A&B Stat Arb 0.8224211.
Shell A 0.166307.
The stat arb has a Superior Sharpe ratio over simply investing in Shell A. At a first glance the sharpe ratio of 0.8 looks disappointing, however since the strategy spends most of it’s time out of the market it will have a low annualized sharpe ratio. To increase the sharpe ratio one can look at trading higher frequencies or have a portfolio pairs so that more time is spent in the market.
22 thoughts on “ Statistical Arbitrage – Trading a cointegrated pair ”
it also means that when identified the maximum divergence i can take position in derivatives like options?
-selling ATM Call option on first stock.
-buy Call option on the second one.
or with a BacKSpreadCall on the first and a BackSpreadPut on the second so I can set the protections and I can roll them if they go out control…
The short positions should be moneyness ATM or lightly OTM in my opinion.
What do yo think about?
Did you tried using Johansen’s testing approach in order to perform a more rigorous testing of cointegration? What do you think about combining Engle-Granger with Johansen?
The spread in the above does not oscillate around it mean, ideally, a cointegrated pair should trade sideways not in a trending manner as shown above….your write-up was perfect on proper cointegration you demonstrated. but this spread is not a perfect spread.
I 100% agree with you.
However for practical purposes as long as the mean reversion happens faster than the mean changes then you’ll do well.
I guess that’s something I’ve missed, how to quantify the half life/reversion speed.
Please note that in the above demo the look back period is 90days. This is fairly short. Choosing 200 days will result in a mean that is less responsive / changes direction. It will most likely increase the size of the standard deviation bands and result in less trades per year. This usually results in a lower Sharpe ratio.
Very interesting post. Would love to see the implementation on a basket of pairs.
I do some changes in your programme to calculate the bollinger bands and I wanna know why you’re put the Standard deviation to the right? (movingStd = rollapply(spread, lookback, sd, align=”right”, na. pad=TRUE))
OK thank you for answering!
Your blog give me the chance to implement and build more quickly my stat arb strategy.
I am going to test different models for statistical arbitrage. I keep all the visitors in the loop!
In your program, the martingale effect is not here. How can I add this effect?
I am running my iwn backtests with differents programs (Excel, R et ProRealTime (a french platform)) and in order to do some comparison, I need to add the martingale effect.
Thanks for the clarification. By the same argument, rollmean has to have the same: rollmean(spread, lookback, na. pad=TRUE, align=’right’)
With this new modification the Sharpe ratio drops dramatically ..
Great stuff!! I think there are two bugs in your code, though. First one is in calculation of moving average. You forgot to set align parameter to “right” (like you do for standard deviation). Function uses default “center” and your data – spread and moving average are not aligned. You can see this from the plot as well. Moving average ends 45 days before the spread. Second bug is in calculation of trading returns. I think you should take return from the next day as we enter the position at the closing price.
Thanks for your elegant code. I noticed that your line of code:
is meant to apply the function shortPositionFunc to (-1*aboveUpperBand+belowMAvg).
However, the function shortPositionFunc takes two arguments x and y.
Is there any typo in the code?
Thank you for your clarification!
Thanks Gekko for the backtesting code. It is very useful. Couple of comments below:
1) Another reader has already commented about this above. movingAvg needs to be amended by adding align=”right” in order to have the first moving avg number on day 90:
movingAvg = rollmean(spread, lookback, align=”right”, na. pad=TRUE)
2) since we enter trades at end of day, the return on trade date shouldn’t count. we can simply shift every element in the “positions” vector down by using the “shift” function in the taRifx library.
Also, I don’t believe daily return is (aRet – stockPair$hedgeRatio*bRet). Imagine if you had a large hedge ratio, i. e. if stock A is priced at $100 and stock B is priced at $10, then the hedgeRatio would be in the neighborhood of 10. Since aRet and bRet are in % terms, the formula won’t work. Daily return should be aRet – bRet * (ratio between dollar neutral ratio vs hedge ratio).
#Calculate spread daily ret.
dailyRet <- aRet – bRet*hedgeRatioOVERdollarNeutralRatio.
tradingRet <- dailyRet * shift(positions,-1)
I am looking for new strategies in equity pair trading that improve the standard cointegration approach (for instance I started looking into the pair trading with copulas, which still seems an “unstable” alternative to cointegration). Do you have any new paper to suggest me? Thank you very much and congrats for the great blog.
The second half of the book goes through lots of more advanced techniques for hedging a portfolio / finding stationary pairs.
i am a bit confused in this step.
when i plotted the longPositions and ShortPositions along with the spread, bands and moving average lines found then there are consecutive long signals and short signals. According to my understanding.
longPostions <- if spread is below lowerband.
longExit <- if spread is above movAvg while long.
shortPostions <- if spread is above upperband.
shortExit <- if spread is below movAvg while short.
is this same thing your code is doing. Please help me understand this part.
Hi Gekko, I read the books of EP Chan that talks about this topic and I a little bit confused about mean reservion. When two assets ara cointegrated we are supposing that they will come back to their mean, but their moving average or their total mean in a fixed period? I’m giving better results using static parameters than using bollinger bands. I will show you an image with my doubt. prntscr/51jofw Could you write another article of mean reversion! Thanks for all.
Hi Gekko. Great Code. Could you closer explain an idea behind this cappedCumSum function ? I do not understand the moment when you are specifing two input variables, but in Reduce() function is only one parameter, – is it because of 0?
There is a mistake. Your algorithm looks in the future, the problem in rollmean function. Algorithm using moving average from future days to close position.
자습서.
See also documentation, videos and chat.
Jing is a Quantitative Developer at QuantConnect. She has a Masters in Financial Mathematics from John Hopkins and previous has worked in Northeast Securities doing quantitative research.
최근 기사.
Pairs Trading – Copula vs Cointegration.
In Strategy Tutorials, Published on June 13, 2017.
We investigate two pairs trading methods and compare the results. Pairs trading involves in investigating the dependence structure between two highly correlated assets. With the assumption that mean reversion will occur, long or short positions are entered in the opposite direction when there is a price divergence. Typically the asset price distribution is modeled by a Gaussian distribution of return series but the joint normal distribution may fail to catch some key features of the dependence of stock pairs' price like tail dependence. We investigate using copula theory to identify these trading opportunities.
In this tutorial, we will discuss the basic framework of copula from the mathematical perspective and explain how to apply the approach in pairs trading. The implementation of the algorithm is based on based on the paper Trading strategies with copulas [1] Stander Y, Marais D, Botha I. Trading strategies with copulas[J]. Journal of Economic and Financial Sciences, 2013, 6(1): 83-107. Online Copy from Stander Y, Marais D, Botha I(2013). We compare the performance of the copula pairs trading strategy with the co-integration pairs trading method based on the paper Statistical arbitrage trading strategies and high-frequency trading from Hanson T A, Hall J R. (2012) [2] Hanson T A, Hall J R. Statistical arbitrage trading strategies and high-frequency trading[J]. 2012. . The co-integration technique assumes a co-integration relationship between paired equities to identify profitable trading opportunities. The empirical results suggest that the copula-based strategy is more profitable than the traditional pairs trading techniques.
Framework of Copula.
1. Definition.
Given a random vector , its marginal cumulative distribution functions (CDFs) are . By applying the probability integral transform to each component, the marginal distributions of are uniform (from Wikipedia).
Then the copula of is defined as the joint cumulative distribution function of , for which the marginal distribution of each variable U is uniform as .
Copulas function contains all the dependency characteristics of the marginal distributions and will better describe the linear and non-linear relationship between variables, using probability. They allow the marginal distributions to be modeled independently from each other, and no assumption on the joint behavior of the marginals is required. [3] Rad H, Low R K Y, Faff R. The profitability of pairs trading strategies: distance, cointegration and copula methods[J]. Quantitative Finance, 2016, 16(10): 1541-1558.online copy.
2. Bivariate Copulas.
Since this research focuses on bivariate copulas (for pairs trading we have 2 random variables) some probabilistic properties are specified.
Let X and Y be two random variables with cumulative probability function and . which are uniformly distributed. Then the copula function is . Taking the partial derivative of the copula function over U and V would give the conditional distribution function as follows:
3. Archimedean Copulas.
There are many copula functions that enable us to describe dependence structures between variables, other than the Gaussian assumption. Here we will focus three of these; the Clayton , Gumbel and Frank copula formulas from the Archimedean class.
Archimedean copulas [4] Mahfoud M, Michael M. Bivariate Archimedean copulas: an application to two stock market indices[J]. BMI Paper, 2012. Online Copy are based on the Laplace transforms φ of univariate distribution functions. They are constructed by a particular generator function [5] LANDGRAF N, SCHOLTUS K, DIRIS D R B. High-Frequency copula-based pairs trading on US Goldmine Stocks[J]. 2016. .
The probability density function is:
Where is the inverse of the second derivative of the generator function.
Genest and MacKay (1986) [6] Genest, C. and MacKay, J., 1986, The Joy of Copulas: Bivariate Distributions with Uniform Marginals, The American Statistician, 40, 280-283 proved that the relation between the copula generator function and Kendall rank correlation tau in the bivariate case can be given by:
So we can easily estimate the parameter in Archimedean copulas if we know Kendall’s tau rank measure and the generator function. Please refer to step 3 to see the formulas.
Part I: Copula Method.
ETFs have many different stock sectors and asset classes which provide us a wide range of pairs trading candidates. Our data set consists of daily data of the ETFs traded on the NASDAQ or the NYSE.
We use the first 3 years of data to choose the best fitting copula and asset pair ("training formation period"). Next, we use a period of 5 years from 2011 to 2017 ("the trading period"), to execute the strategy. During the trading period we use a rolling 12 month window of data to get the copula parameters ("rolling formation period").
Step 1: Selecting the Paired Stocks.
The general method of pair selection is based on both fundamental and statistical analysis. [7] Jean Folger . Pairs Trading Example Online Copy.
1) Assemble a list of potentially related pairs.
Any random pairs could be correlated. It is possible that those variables are not causally related to each other, but because of a spurious relationship due to either coincidence or the presence of a certain third, unseen factor. Thus, it is important for us to start with a list of securities that have something in common. For this demonstration, we choose some of the most liquid ETFs traded on the Nasdaq or the NYSE. The relationship for those potentially related pairs could be due to an index, sector or asset class overlap. 예 : QQQ and XLK are two ETFs which track the market leading indices.
2) Filter the trading pair with statistical correlation.
To determine which stock pairs to include in the analysis, correlations between the pre-selected ETF pairs are analyzed. Below are three types of correlation measures we usually use in statistics:
= number of concordant.
= number of discordant.
= the difference between the ranks of corresponding values and.
We can get these coefficients in Python using functions from the stats library in SciPy. The correlations have been calculated using daily log stock price returns during the training formation period. We found the 3 correlation techniques give the paired ETFs the same correlation coefficient ranking. The Pearson correlation assumes that both variables should be normally distributed. Thus here we use Kendall rank as the correlation measure and choose the pairs with the highest Kendall rank correlation to implement the pairs trading.
We get the daily historical closing price of our ETFs pair by using the History function and converting the prices to a log return series. Let and denote the historical stock price series for stock x and stock y. The log returns for the ETFs pair are given by:
t = 1,2. n where n is the number of price data.
Step 2: Estimating Marginal Distributions of log-return.
In order to construct the copula, we need to transform the log-return series and to two uniformly distributed values u and v. This can be done by estimating the marginal distribution functions of and and plugging the return values into a distribution function. As we make no assumptions about the distribution of the two log-return series, here we use the empirical distribution function to approach the marginal distribution and . The Python ECDF function from the statsmodel library gives us the Empirical CDF as a step function.
Step 3: Estimating Copula Parameters.
As discussed above, we estimate the copula parameter theta by the relationship between the copula and the dependence measure Kendall’s tau, for each of the Archimedean copulas.
Step 4: Selecting the Best Fitting Copula.
Once we get the parameter estimation for the copula functions, we use the AIC criteria to select the copula that provides the best fit in algorithm initialization.
where is the log-likelihood function and k is the number of parameters, here k=1.
The density functions of each copula function are as follows:
The copula that provides the best fit is the one that corresponds to the lowest value of AIC criterion. The chosen pair is "QQQ" & "XLK".
Step 5: Generating the Trading Signals.
The copula functions include all the information about the dependence structures of two return series. According to Stander Y, Marais D, Botha I(2013) [8] Stander Y, Marais D, Botha I. Trading strategies with copulas[J]. Journal of Economic and Financial Sciences, 2013, 6(1): 83-107. Online Copy , the fitted copula is used to derive the confidence bands for the conditional marginal distribution function of and , that is the mispricing indexes. When the market observations fall outside the confidence band, it is an indication that pairs trading opportunity is available. Here we choose 95% as the upper confidence band, 5% as the lower confidence band as indicated in the paper. The confidence level was selected based on a back-test analysis in the paper that shows using 95% seems to lead to appropriate trading opportunities to be identified.
Given current returns of stock X and stock Y, we define the "mis-pricing indexes" are:
For further mathematical proof , please refer to Xie W, Wu Y(2013) [9] Xie W, Wu Y. Copula-based pairs trading strategy[C]//Asian Finance Association (AsFA) 2013 Conference. doi. 2013, 10.
The conditional probability formulas of bivariate copulas can be derived by taking partial derivatives of copula functions shown in Table 1. The results are as follows:
After selection of trading pairs and the best-fitted copulas, we take the following steps for trading. Please note we implement the Steps 1, 2, 3 and 4 on the first day of each month using the daily data for the last 12 months, which means our empirical distribution functions and copula parameters theta estimation are updated once a month. In summary each month:
During the 12 months' rolling formation period, daily close prices are used to calculate the daily log returns for the pair of ETFs and then compute Kendall's rank correlation. Estimate the marginal distribution functions of log returns of X and Y, which are ecdf_x and ecdf_y separately. Plug Kendall's tau into copula parameter estimation functions to get the value of theta. Run linear regression over the two price series. The coefficient is used to determine how many shares of stock X and Y to buy and sell. For example, if the coefficient is 2, for every X share that is bought or sold, 2 units of Y are sold or bought.
Finally during the trading period, each day we convert today's returns to u and v by using empirical distribution functions ecdf_x and ecdf_y. After that, two mispricing indexes are calculated every trading day by using the estimated copula C. The algorithm constructs short positions in X and long positions in Y on the days that and . It constructs short position in Y and long positions in X on the days that and .
Part II: Cointegration Method.
For the cointegration pairs trading method, we choose the same ETF pair "GLD" & "DGL". There is no need to choose a copula function so there is only a 12 month rolling formation period. The trading period is 5 years from January 2011 to May 2017.
Step 1: Generate the Spread Series.
At the start of each month, we generate the log price series of two ETFs with the daily close. Then the spread series is estimated using regression analysis based on log price series data.
For equities X and Y, we run linear regression over the log price series and get the coefficient β.
Step 2: Compute the Threshold.
Using the standard deviation of spread during the rolling formation period, a threshold of two standard deviations is set up for the trading strategy as indicated in the paper.
Step 3: Set up the Trading Signals.
On each trading day, we enter a trade whenever the spread moves more than two standard deviations away from its mean. In other words, we construct short positions in X and long positions in Y on the day that spread>mean+2*std. We construct short positions in Y and long positions in X on the day that spread<mean-2*std. The trade is exited if the spread reverts to its equilibrium (defined as less than half a standard deviation from zero spread).
The value of mean and standard deviation are calculated from the rolling formation period and will be updated once a month.
결론.
Ultimately pairs trading intends to capture the price divergence of two correlated assets through mean reversion. Our results demonstrate that the copula approach for pairs trading is superior to the conventional cointegration method because it is based on the probability of the dependence structure, vs cointegration which relies on simple linear regression variance from normal pricing. We found through testing the performance of the copula method less sensitive to the starting parameters. Because the cointegration method relies on standard distribution and the ETF pairs had low volatility there were few trading opportunities.
Generally, ETFs are not very volatile and so mean-reversion did not provide many trading opportunities. There are only 39 trades during 5 years for cointegration method.
It is observed that the use of copula in pairs trading provides more trading opportunities as it does not require any rigid assumptions [10] Liew R Q, Wu Y. Pairs trading: A copula approach[J]. Journal of Derivatives & Hedge Funds, 2013, 19(1): 12-30. .
Backtest for copula method.
헌납 자.
참조.
`Hi Jing Wu. Thank you for an excellent article. I have a question, but it might be because I am misunderstanding your Python code (my background is in C#). The theory states that the log return series is given by ln(P_x, t / P_x, t-1), however in your code it seems that you are returning only ln(P_x, t), in the following line of code: np. log([float(z) for z in close_price]). Please let me know what I am missing. 고맙습니다.
Are you talking about the cointegration? Theoretically ln(Pt) should be used instead if log returns.
Sorry, a typo for my last reply:
Please ignore my previous comment/question, I realize the “diff” function takes care of this – Maths 101.
Hi Jing Wu, I have backtested your strategy from the period of 2010-01-01 to 2017-09-11. However, from around Sep 2012 onward, beta, net holdings and leverage seem to be constant. Is there any intuition to that? I don’t think the code is broken, but I am just curious to see what the intuition would be to cause such an outcome.
That might because there is no new trade at that time. For pairs trading that means the trading condition is not triggered.
Thank you very much for this very interesting post. It’s very helpful to have all the reasoning and formula so clearly explained and synthesized.
I have 2 remarks regarding the algo though:
+ the Gumbel fit done on the calibration set [2006 – 2009] does not work. This does not stop the algo though and the latter chooses the Frank copula in the end but it only decides using AIC for Frank and Clayton. The reason why the fit on Gumbel does not work comes from 2 divisions by 0, owing to the u or v values.
+ a post above mentions the very high beta of the algo and I agree it’s surprising for a pair strategy. This high beta is particularly stricking when simply comparing the algo results and the S&P. Local corrections of US Stocks in Q3-2015 and Q1-2016 are visible on the copula strat as if the latter was simply long equities. I took the liberty to compute the day by day net position in each component of the selected pair [i. e. XLK and QQQ]. It appears that from end 2010 until the end the algo is LONG BOTH ETFs and barely changes the position. I might be totally wrong but I think this explains the beta, the net holdings and the suddenly dropping size of trades.
Hi Jing Wu, I have backtested your strategy but I don’t seem to grasp how exactly the positions are made. According to Trade tab only small quantities of underlying assets are traded.
My reasoning is this. Suppose I have $100 000 and there’s a signal from the copulas to buy A (currently prices at $10) and short B (currently priced at $20) . Do I buy 10 000 shares of A and short 5 000 shares of B?
How long will I be in this position? Till the end of the day/next day or until another signal occurs? 고맙습니다.
Hi Fraty, yes here I allocate 40% capital in each stock. But the ratio of stock A and B are based on the regression coefficient of the historical price of two assets, not just the price at the trading day. The position is changed until another signal occurs.
Hello Jing, Thank you ver much for your excellent article and for presenting the method applying Copula to pair trading 🙂
Regarding the trading signals you mentioned that “we construct short positions in X and long positions in Y on the day that spread>mean+2*std. We construct short positions in Y and long positions in X on the day that spread<mean-2*std."
Since we are regressing Y on X, then if the "normalized"spread, (spread-mean)/sd, is wider than two standard deviations, this means that Y is out-performing X and hence we would want to short the spread, meaning we go short on Y (which is the outperforming stock) and Long X (which is the undersperforming stock).
Hello I am a student study pair trading, and I’m only beginner,
I wanna Run your code and understand the logic, but I can’t see.
all of your code.. if you mind ask you send to me complete code.
I’m not so good at english because I’m Korean Sorry about that !
I hope that your reply. 고맙습니다.
The code is at the end of the page. Just click the ‘code’ tab of the attached backtest or clone the algorithm you will see the code.
No comments:
Post a Comment