Wednesday 7 February 2018

칼만 필터 거래 전략


QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
2016 년 9 월 21 일 Michael Halls-Moore
QuantStart 이전에는 State Space Models 및 Kalman Filters의 수학적 토대와 Pykalman 라이브러리를 ETF 쌍에 적용하여 평균 회귀 거래 전략의 기초로 헤지 비율을 동적으로 조정했습니다.
이 기사에서는 Ernest Chan (2012) [1]에 의한 거래 전략에 대해 논의하고 Quantopian [2]에서 Aidan O'Mahony가 테스트했습니다. 우리는 전략을 구현하기 위해 파이썬 기반 오픈 소스 QSTrader 백 테스팅 프레임 워크를 사용할 것이다. Qstrader는 거래 추적 신호를 생성하는 코드에만 집중하면서 위치 추적, 포트폴리오 처리 및 데이터 처리의 "과중한 수행"을 수행합니다.
무역 전략.
페어 트레이딩 전략은 다양한 기간의 미국 재무부 채권의 실적을 추적하는 두 개의 ETF (Exchange Traded Fund)에 적용됩니다. 그들은:
목표는이 ETF 쌍에서 평균 회귀 전략을 수립하는 것입니다.
TLT와 IEI 사이의 합성 된 "확산"은 우리가 갈망이나 단락에 실제로 관심을 갖는 시계열입니다. 칼만 필터는 스프레드를 고정 된 상태로 유지하기 위해 둘 사이의 헤징 비율을 동적으로 추적하는 데 사용됩니다 (따라서 평균 되돌림).
거래 규칙을 만들려면 스프레드가 예상 값에서 너무 멀리 이동 한 시점을 결정해야합니다. 우리는 "너무 멀리"무엇인지 어떻게 결정합니까? 우리는 일련의 고정 된 절대 값을 사용할 수 있지만, 이것은 경험적으로 결정되어야합니다. 이는 최적화가 필요하고 시스템을 과부화하는 추가적인 위험을 초래할 수있는 또 다른 여유 매개 변수를 시스템에 도입합니다.
이러한 값을 생성하는 "매개 변수없는"접근 방식 중 하나는 스프레드의 표준 편차의 배수를 고려하여이를 경계로 사용하는 것입니다. 간단히하기 위해 우리는 배수의 계수를 1로 설정할 수 있습니다.
따라서 예측 오차가 스프레드의 음의 표준 편차 아래로 떨어지면 "스프레드를 길게"갈 수 있습니다. 예측 오차가 스프레드의 표준 편차를 초과하면 "스프레드를 짧게"할 수 있습니다. 이탈 규칙은 입력 규칙의 반대입니다.
동적 헤지 비율은 시간 $ t $, $ \ theta_t $에서 숨겨진 상태 벡터의 한 구성 요소로 표시되며, $ \ theta ^ 0_t $로 표시됩니다. 이것은 선형 회귀로부터 잘 알려진 "베타"기울기 값입니다.
여기서 "퍼짐을 길게하다"는 것은 TLT를 구매 (longing) $ N $ 단위로 판매 (shorting) $ \ lfloor $를 의미한다. $ \ lfloor $는 $ x $보다 작은 가장 높은 정수를 나타내는 "floor"이다. 후자는 ETF의 전체 수를 거래해야하기 때문에 필요합니다. "확산의 단락"은 이것의 반대입니다. $ N $은 위치의 전체 크기를 제어합니다.
$ e_t $는 예측 오차 또는 시간 $ t $에서의 예측의 잔류 오차를 나타내고, $ Q_t $는 시간 $ t $에서의이 예측의 분산을 나타낸다.
완전성을 위해 여기에 규칙이 지정됩니다.
$ e_t \ lt - \ sqrt $ - 긴 퍼짐 : TLT의 긴 $ N $ 공유와 IEI $ e_t \ ge - \ sqrt $의 짧은 $ \ lfloor $ 단위 이동 - 긴 종료 : TLT의 모든 긴 위치를 닫고 IEI $ e_t \ gt \ sqrt $ - TLT의 짧은 $ N $ 공유로 이동하고 IEI $ e_t \ le \ sqrt $의 $ $ llolo $ 단위로 간다. - 짧게 끝내기 : TLT와 IEI의 모든 짧은 위치를 닫는다. .
칼만 필터의 역할은 $ \ theta_t $와 $ e_t $ 및 $ Q_t $를 계산하는 데 도움이되는 것입니다. $ \ theta_t $는 $ t $에서 TLT와 IEI 사이의 선형 회귀에서의 절편과 기울기 값의 벡터를 나타낸다. 그것은 칼만 필터에 의해 추정됩니다. 예측 오차 / 잔여 $ e_t = y_t - \ hat _t $는 현재 TLT의 예측 된 값과 Kalman 필터의 TLT 추정치 간의 차이입니다. $ Q_t $는 예측의 분산이므로 $ \ sqrt $는 예측의 표준 편차입니다.
이 전략의 구현에는 다음 단계가 포함됩니다.
TLT와 IEI 모두에 대한 일일 시장 OHLCV 막대 받기 오늘의 어제 관찰을 기반으로 TLT의 가격을 추정하기 위해 재귀 적 "온라인"칼만 필터를 사용합니다. 칼만 예측치와 실제 값 (종종 예측 오차라고 함)의 차이를 가져옵니다. 또는 TLT와 IEI의 스프레드가 예상 값에서 벗어나는 정도를 나타내는 척도 인 잔여 오류. 예상치와 부정적으로 멀리 떨어져있을 때 스프레드가 길어지고 움직임이 예상보다 크게 벗어 났을 때 스프레드를 줄인다. value 계열이 예상 값으로 돌아갈 때 long 및 short 위치를 종료합니다.
이 전략을 수행하려면이 백 테스트가 적용되는 기간 동안 OHLCV 가격 데이터를 보유해야합니다. 특히 다음을 다운로드해야합니다.
TLT - 2009 년 8 월 3 일 ~ 2016 년 8 월 1 일 (링크) IEI 2009 년 8 월 3 일 ~ 2016 년 8 월 1 일 (여기 링크)
이 데이터는 결과를 복제하려는 경우 Qstrader 설정 파일에 지정된 디렉토리에 저장해야합니다.
파이썬 QSTrader 구현.
Qstrader는 위치 추적, 포트폴리오 관리, 데이터 처리 및 주문 관리를 처리하기 때문에 우리가 작성해야하는 유일한 코드는 전략 객체 자체와 관련됩니다.
전략은 PortEventHandler와 이벤트 큐를 통해 통신하며, 이를 위해 SignalEvent 객체를 사용합니다. 또한 기본 추상 전략 클래스 인 AbstractStrategy를 가져와야합니다.
QSTrader의 현재 알파 버전에서는 PriceParser 클래스도 가져와야합니다. 이것은 입력의 모든 가격에 큰 배수 ($ 10 ^ 8 $)를 곱하고 위치를 추적 할 때 정수 산술 연산을 수행하는 데 사용됩니다. 이렇게하면 백 테스트의 오랜 기간 동안 누적 될 수있는 부동 소수점 올림 문제가 방지됩니다. 올바른 값을 얻으려면 PriceParser. PRICE_MULTIPLIER로 모든 가격을 나눠야합니다.
다음 단계는 KalmanPairsTradingStrategy 클래스를 만드는 것입니다. 이 클래스의 일은 Yahoo Finance의 TLT 및 IEI의 일일 OHLCV 막대에서받은 BarEvent를 기반으로 SignalEvent 객체를 생성 할시기를 결정하는 것입니다.
이 수업을 구성하는 데는 여러 가지 방법이 있습니다. 설명의 명확성을 위해 클래스의 모든 매개 변수를 하드 코딩하도록 선택했습니다. 특히 $ \ delta = 10 ^ $ 및 $ v_t = 10 ^ $의 값을 고정했습니다. 이들은 칼만 필터 모델의 시스템 잡음 및 측정 잡음 분산을 나타냅니다. 이것은 클래스의 __init__ 생성자에서 키워드 인자로 구현 될 수도 있습니다. 이러한 접근 방식은 직접적인 매개 변수 최적화를 가능하게합니다.
첫 번째 작업은 시장 데이터가 승인되고 거래 신호가 생성 될 때 업데이트되므로 시간 및 투자 된 멤버를 없음으로 설정하는 것입니다. latest_prices는 TLT 및 IEI의 현재 가격을 두 줄로 배열하여 클래스를 통해 편리하게 사용합니다.
다음 매개 변수 집합은 모두 Kalman 필터와 관련이 있으며 여기 및 여기의 이전 두 기사에서 자세히 설명합니다.
마지막 매개 변수 세트에는 요일과 요일을 모두 구매할 ETF의 절대 수량을 추적하는 데 사용되는 요일 및 curtyhedgeqqty가 포함됩니다. 나는 이것을 100,000 USD의 계정 자본으로 2,000 단위로 설정했다.
다음 메서드 _set_correct_time_and_price는 Kalman 필터가 올바른 지점에서 올바른 가격 정보를 모두 사용할 수 있도록하는 "도우미"메서드입니다. 이는 Qstrader와 같은 이벤트 중심의 백 테스트 시스템에서 시장 정보가 순차적으로 도착하기 때문에 필요합니다.
우리는 IEI에 대한 가격을 받았지만 TFT가 아닌 $ K $ 일 수 있습니다. 따라서 TFT와 IEI 시장 이벤트가 모두 이벤트 대기열을 통해 백 테스트 루프에서 도착할 때까지 기다려야합니다. 라이브 거래에서는 며칠의 거래 기간에 비해 거의 즉각적으로 도착하므로 문제가되지 않습니다. 그러나 이벤트 중심의 백 테스트에서 새로운 칼만 필터 업데이트를 계산하기 전에 두 가격이 모두 도달 할 때까지 기다려야합니다.
코드는 후속 이벤트가 현재 날짜인지 여부를 기본적으로 확인합니다. 그렇다면 TLT 및 IEI의 latest_price 목록에 올바른 가격이 추가됩니다. 새로운 날이면 최신 가격이 재설정되고 올바른 가격이 다시 추가됩니다.
이러한 유형의 "하우스 키핑 (housekeeping)"방법은 미래에 QSTrader 코드베이스에 흡수되어 "보일러 플레이트"코드를 작성해야 할 필요성이 줄어들지 만 지금은 전략 자체의 일부를 구성해야합니다.
전략의 핵심은 calculate_signals 메소드에서 수행됩니다. 먼저 정확한 시간과 가격을 설정합니다 (위에서 설명한대로). 그런 다음 TLT와 IEI의 가격을 모두 확인합니다. 이 시점에서 새로운 거래 신호를 고려할 수 있습니다.
$ y $는 IEI의 최신 가격과 동일하게 설정되며 $ F $는 TLT의 최신 가격을 포함하는 관측 매트릭스이며 선형 회귀 분석에서 절편을 나타낼 수있는 단일 자리 표시 자입니다. 칼만 필터는이 최신 가격으로 업데이트됩니다. 마지막으로 예측 오차 $ e_t $와 예측의 표준 편차 인 $ \ sqrt $를 계산합니다. 이 코드를 단계별로 실행 해 보겠습니다. 조금 복잡해 보입니다.
첫 번째 작업은 각각 IEI와 TLT의 가격을 포함하는 스칼라 값 y와 관측 행렬 F를 형성하는 것입니다. 우리는 분산 공분산 행렬 R을 계산하거나 아직 초기화되지 않은 경우 제로 행렬로 설정합니다. 그 후 우리는 관측 yhat와 예측 오차 et의 새로운 예측을 계산한다.
그런 다음 관측 예측 Qt와 표준 편차 sqrt_Qt의 분산을 계산합니다. 여기에서 파생 된 업데이트 규칙을 사용하여 두 가격 사이의 헤지 비율 / 기울기를 포함하는 주 세타의 사후 분포를 얻습니다.
마지막으로 우리는 $ e_t $와 $ \ sqrt $ 값을 기반으로 거래 신호를 생성합니다. 이렇게하려면 "투자"상태가 "긴", "짧은"또는 "없음"중 무엇인지 확인해야합니다. 기울기 $ \ theta ^ 0_t $가 일정 시간 내에 일정하게 조정되면 길거나 짧을 때 cur_hedge_qty 현재 헤지 수량을 조정할 필요가 있음을 주목하십시오.
이것은 Strategy 객체에 필요한 모든 코드입니다. 우리는 또한 모든 트레이딩 로직과 클래스 선택을 캡슐화하기 위해 백 테스트 파일을 생성해야합니다. 특정 버전은 examples 디렉토리에서 사용 된 버전과 매우 유사하며 500,000 USD의 자본을 100,000 USD로 대체합니다.
또한 FixedPositionSizer를 NaivePositionSizer로 변경합니다. 후자는 KalmanPairsTradingStrategy 클래스에서 결정한 ETF 단위의 절대 수량에 대한 제안을 "순진하게"받아 들일 때 사용됩니다. 프로덕션 환경에서는 포트폴리오의 위험 관리 목표에 따라이를 조정해야합니다.
kalman_qstrader_backtest. py의 전체 코드는 다음과 같습니다.
QSTrader가 올바르게 설치되고 데이터가 Yahoo Finance에서 다운로드 된 경우 터미널에서 다음 명령을 통해 코드를 실행할 수 있습니다.
많은 자원 봉사 개발자, 특히 ryankennedyio 및 femtotrader의 노력 덕분에이 코드는 OHLCV 바 데이터에 맞게 최적화되었으며 신속하게 백 테스트를 수행합니다.
전략 결과.
Qstrader에 추가되는 최신 기능 중 하나는 주로 nwillemse가 개발 한 "테어 시트"입니다. 이 기능은 아직 개발 초기 단계이지만 여기서 설명합니다.
테어 시트는 주로 기관 설정에서 거래 전략에 대한 "단일 호출기"설명으로 사용됩니다. QSTrader 코드베이스의 TearsheetStatistics 클래스는 일반적인 전략 성과 보고서에있는 많은 통계를 복제합니다.
상위 2 개의 그래프는 각각 자본 및 삭감 비율을 나타냅니다. 그 아래에는 월별 및 연간 실적 패널이 있습니다. 마지막으로 자본 곡선, 무역 수준 및 시간 기반 통계가 표시됩니다.
더 크게 보려면 이미지를 클릭하십시오.
주식 곡선은 전략의 첫 해에는 상대적으로 평탄하지만 2011 년에는 급격히 상승합니다. 2012 년에는 전략이 2015 년까지 "수 중"상태로 유지되고 일일 최대 손실률이 15.79 %에 이릅니다. 실적은 2013 년 말 최대 축소에서 2016까지 점진적으로 증가합니다.
이 전략의 연평균 성장률은 8.73 %이며 Sharpe Ratio는 0.75입니다. 또한 2 년 동안 777 일의 최대 인출 시간이 길어졌습니다! 이 전략은 거래 비용의 총액으로 수행되므로 실제 성과가 악화 될 가능성이 있습니다.
다음 단계.
이것을 라이브 설정에서 배포 할 수익성 높은 전략으로 전환하는 데 필요한 많은 연구 작업이 있습니다. 연구의 잠재적 인 방법은 다음과 같습니다.
매개 변수 최적화 - 교차 검증 그리드 검색 또는 기계 학습 최적화의 일부 형태를 통해 칼만 필터의 매개 변수를 변경합니다. 그러나 이로 인해 과거 데이터에 과도하게 적용될 수 있습니다. 자산 선택 - ETF의 추가 또는 대안 쌍을 선택하면 포트폴리오에 다양성을 추가하는 데 도움이되지만 전략의 복잡성뿐만 아니라 거래 횟수 (및 거래 비용)가 증가합니다.
앞으로의 기사에서는 다양한 거래 전략에 대해 이러한 절차를 수행하는 방법을 고려할 것입니다.
참조.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.

QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
2016 년 8 월 15 일 Michael Halls-Moore 작성
일반적인 퀀트 트레이딩 기법은 공적분 관계를 형성하고 평균 회귀 접근법을 활용하여 트레이딩 전략을 수립하는 두 가지 자산을 취하는 것을 포함합니다. 이는 두 자산 (ETF 쌍과 같은)간에 선형 회귀 분석을 수행하고이를 사용하여 각 자산의 얼마나 많은 부분을 특정 임계 값에서 길고 짧은지를 결정함으로써 수행 할 수 있습니다.
이러한 전략의 주요 관심사 중 하나는 두 자산 간의 헤징 비율과 같은 이러한 구조적 관계를 통해 도입 된 모든 매개 변수가 시간에 따라 변할 수 있다는 것입니다. 즉, 전략 기간 동안 고정되지 않습니다. 수익성을 높이기 위해 시간이 지남에 따라 헤징 비율을 조정하는 메커니즘을 결정할 수 있다면 유용 할 것입니다.
이 문제에 대한 한 가지 접근법은 룩백 (lookback) 윈도우가있는 롤링 선형 회귀를 이용하는 것입니다. 이것은 기울기와 절편이 공적분 관계의 최신 행태를 "따르도록"모든 막대의 선형 회귀를 업데이트하는 것을 포함한다. 그러나 전략에 또 다른 무료 매개 변수, 즉 전환 확인 기간이 도입됩니다. 이는 교차 검증을 통해 최적화되어야합니다.
보다 정교한 접근법은 "진정한"헤지 비율을 관찰되지 않은 숨겨진 변수로 취급하고 "시끄러운"관측으로 그것을 추정하려고하는 상태 공간 모델을 이용하는 것입니다. 여기서는 각 자산의 가격 데이터를 의미합니다.
칼만 필터는이 작업을 정확하게 수행합니다. 이전 기사에서 우리는 칼만 필터 (Kalman Filter)에 대해 심도있게 살펴 보았고 베이지안 업데이트 프로세스로 어떻게 보일 수 있는지 살펴 보았습니다.
이 기사에서는 Pykalman Python 라이브러리를 통해 Kalman Filter를 사용하여 ETF 쌍 사이의 기울기와 요격 비율 (따라서 헤징 비율)을 동적으로 추정하는 데 도움을줍니다.
이 기술은 궁극적으로 새로운 QSTrader 오픈 소스 거래 시스템으로 다시 시험 될 것이며, 이는 지난 몇 년 동안 그러한 전략의 성과가 어떻게 변화했는지를 알 수있게 해줄 것입니다.
이 게시물의 내용은 Algo Engineer 블로그를 운영하는 Aidan O'Mahoney가 작성한 게시물에서 크게 영향을 받았으며 확장되었습니다.
칼만 필터의 간략한 요약본.
칼만 필터에 대한 더 자세한 수학적 기사를 읽으려면 이전 기사를 읽어보십시오. 여기에서 요점을 간단히 요약 해 보겠습니다.
우리가 사용할 상태 공간 모델은 두 개의 행렬 방정식으로 구성됩니다. 첫 번째는 상태 또는 전이 방정식으로 알려져 있으며 상태 변수 집합 $ \ theta_t $이 한 기간에서 다음 기간으로 어떻게 변경되는지 설명합니다. 전이 행렬 $ G_t $와 정규 분포 시스템 잡음 $ w_t $에 의해 주어진 이전 상태에 대한 선형 의존성이있다. $ G = G_t $는 일반적인 의미에서 전환 행렬 자체가 시간에 따라 달라짐을 의미합니다.
\ begin \ theta_t = G_t \ theta_ + w_t \ end.
그러나 이러한 상태는 종종 관찰 할 수 없으며 우리는 $ y_t $로 주어진 시간 인덱스마다 관측에 액세스 할 수 있습니다. 관측치에는 관측 행렬 $ F_t $를 통한 선형 성분과 정상적으로 분포 된 측정 잡음 ($ v_t $)이 포함 된 관측식이 있습니다.
\ begin y_t = F_t \ theta_t + v_t \ end.
상태 공간 모델과 칼만 필터에 대한 자세한 내용은 이전 기사를 참조하십시오.
칼만 필터에 선형 회귀를 포함.
이 단계에서 가장 중요한 질문은이 상태 공간 모델을 활용하여 정보를 선형 회귀 분석에 통합하는 방법입니다.
선형 회귀 분석을위한 MLE의 이전 기사에서 다차원 회귀 분석에 따르면 응답 값 $ y $는 피쳐 입력 $ $의 선형 함수라고 나와 있습니다.
여기서 $ \ beta ^ T = (\ beta_0, \ beta_1, \ ldots, \ beta_p) $는 절편 $ \ beta_0 $와 기울임 $ \ beta_i $의 전치 벡터를 나타냅니다. $ \ ε \ sim \ mathcal (\ mu , \ sigma ^ 2) $는 오류 기간을 나타냅니다.
우리가 1 차원적인 환경에 있기 때문에 $ \ beta ^ T = (\ beta_0, \ beta_1) $ 및 $ = \ begin 1 \\ x \ end $로 간단히 쓸 수 있습니다.
우리는 우리 시스템의 (숨겨진) 상태를 벡터 $ \ beta ^ T $에 의해 주어 지도록 설정합니다. 이것은 우리의 선형 회귀의 절편과 기울기입니다. 다음 단계는 내일의 절편과 기울기가 오늘날의 절편과 기울기와 동일하고 임의의 시스템 잡음을 추가한다고 가정하는 것입니다. 이것은 랜덤 워크 (random walk)의 특성을 제공하며, 그 동작은 화이트 노이즈 및 랜덤 워크에 대한 이전 기사에서 자세히 논의됩니다.
변환 행렬이 2 차원 indentify 행렬 인 경우 $ G_t = $. 이것은 상태 공간 모델의 절반입니다. 다음 단계는 실제로 한 쌍의 ETF 중 하나를 "관측"으로 사용하는 것입니다.
칼만 필터를 ETF 쌍에 적용.
관찰 방정식을 형성하려면 ETF 가격 결정 시리즈 중 하나를 "관찰 된"변수, $ y_t $로 선택하고 $ x_t $로 주어지는 다른 하나는 위와 같이 선형 회귀 공식을 제공해야합니다.
\ begin y_t & = & F_t _t + v_t \\ & = & (\ beta_0, \ beta_1) \ begin 1 \\ x_t \ end + v_t \ end.
따라서 선형 공간 회귀 모형을 상태 공간 모델로 재구성하여 칼만 필터 (Kalman Filter)를 통해 새로운 가격 포인트가 도착할 때 절편과 기울기를 추정 할 수 있습니다.
TLT 및 ETF.
우리는 2 개의 고정 수입 ETF, 즉 iShares 20+ Treasury Bond ETF (TLT)와 IShares 3-7 년 Treasury Bond ETF (IEI)를 고려할 것입니다. 이 ETF는 모두 미국 재무부 채권의 변동성을 추적하므로 이와 유사한 시장 요인에 노출되어 있습니다. 우리는 지난 5 년 정도의 회귀 분석을 분석 할 것입니다.
ETF 가격 산포도.
이제 numpy, matplotlib, pandas 및 pykalman을 비롯한 다양한 Python 라이브러리를 사용하여이 두 증권 간의 동적 선형 회귀의 동작을 분석 할 것입니다. 모든 파이썬 프로그램에서와 마찬가지로 첫 번째 작업은 필요한 라이브러리를 가져 오는 것입니다.
참고 : PyKalman 라이브러리를 설치하려면 pip install pykalman을 실행해야합니다.
다음 단계는 draw_date_coloured_scatterplot 함수를 작성하여 자산 조정 마감 가격 (산산조각은 Aidan O'Mahony가 생산 한 것)에 대한 산점도를 작성하는 것입니다. 산점도는 matplotlib 컬러 맵, 특히 "Yellow to Red"를 사용하여 색상이 지정됩니다. 여기서 노란색은 가격 쌍을 2010 년에, 빨간색은 2016에 가까운 가격 쌍을 나타냅니다.
나는 코드를 주석 처리 했으므로 모든 명령이 무엇을하는지보기가 쉽다. 주요 작업은 colour_map, colors 및 scatterplot 변수 내에서 수행됩니다. 다음 플롯을 생성합니다.
고정 수입 ETF의 산란, TFT 대 IEI.
시간 변화하는 경사와 절편.
다음 단계는 실제로 pykalman을 사용하여 TFT와 IEI 사이의 절편과 기울기를 동적으로 조정하는 것입니다. 이 기능은 더 복잡하며 설명이 필요합니다.
먼저 델타라는 변수를 정의합니다. 이 변수는 시스템 잡음에 대한 전이 공분산을 제어하는 ​​데 사용됩니다. Kalman Filter에 대한 원래 기사에서 $ W_t $로 표시했습니다. 우리는 단순히 이러한 값에 2 차원 항등 행렬을 곱합니다.
다음 단계는 관측 행렬을 만드는 것입니다. 이전에이 행렬을 설명했듯이이 행렬은 TFT의 가격과 단일 값의 시퀀스로 구성된 행 벡터입니다. 이것을 구성하기 위해 numpy vstack 메소드를 사용하여이 두 가격 시리즈를 수직 열을 하나의 열 벡터로 수직으로 쌓은 다음 변환합니다.
이제는 pykalman의 KalmanFilter 클래스를 사용하여 Kalman Filter 인스턴스를 만듭니다. 우리는 관측의 차원 (이 경우 단일성), 상태의 차원 (이 경우 선형 회귀에서 절편과 기울기를 볼 때이 두 개)을 공급합니다.
우리는 또한 초기 상태의 평균과 공분산을 제공해야합니다. 이 경우 우리는 초기 상태 공분산에 대해 2 차원 항등 행렬을 취하는 동안 초기 상태 평균을 절편과 기울기 모두에 대해 0으로 설정합니다. 전이 행렬은 또한 2 차원 항등 행렬에 의해 주어진다.
지정해야 할 마지막 용어는 obs_mat에서 위와 같이 관찰 매트릭스이며, 공분산은 1과 같습니다. 마지막으로 전이 공분산 행렬 (델타에 의해 제어 됨)은 위에서 설명한 trans_cov에 의해 주어집니다.
kf Kalman Filter 인스턴스가 생겼으므로 IEI에서 조정 된 가격을 기준으로 필터링 할 수 있습니다. 이것은 우리에게 우리가 겪고있는 절벽과 사면의 국가 수단을 제공합니다. 또한 우리는 국가의 공분산을받습니다.
이것은 모두 calc_slope_intercept_kalman 함수에 래핑됩니다.
마지막으로이 값을 이전 함수에서 반환 된 값으로 그립니다. 이를 달성하기 위해 가격 DataFrame의 인덱스를 사용하여 시간 값 $ t $에서 슬로프의 팬더 DataFrame을 작성하고 가로 채기 만하고 각 열을 서브 그림으로 그립니다.
출력은 다음과 같이 표시됩니다.
ETF TFT와 IEI 간의 선형 회귀의 시변 기울기와 절편.
2011 년의 1.38에서 2016 년의 0.9까지 떨어지는 2011 년에서 2016 년까지 시차가 급격히 변하는 것은 분명합니다. 페어 트레이딩 전략에서 고정 된 헤지 비율을 사용하는 것이 너무 엄격 할 것임을 알기는 어렵지 않습니다.
또한 경사의 추정은 비교적 시끄 럽습니다. 위의 코드에서 제공 한 델타 변수로 제어 할 수 있지만 두 ETF 간의 "실제"관찰되지 않은 헤지 비율의 변화에 ​​대한 필터의 응답 성도 감소시키는 효과가 있습니다.
우리가 거래 전략을 개발하게되면 상호 유효성 확인을 다시 사용하여 ETF 쌍의 바구니를 통해이 매개 변수 델타를 최적화해야합니다.
다음 단계.
이제 두 ETF 간의 동적 헤징 비율을 구성 할 수 있었으므로이 정보를 바탕으로 실제로 거래 전략을 수행 할 방법이 필요합니다. 시리즈의 다음 기사에서는 QSTrader를 사용하여 다양한 쌍에 대해 백 테스트를 수행하여 매개 변수와 시간주기가 다양 할 때 성능이 어떻게 변하는 지 확인합니다.
서지 정보.
"온라인 선형 회귀 분석 (linear linear regression)"을위한 칼만 필터 (Kalman Filter) 활용은 많은 양의 거래자들에 의해 수행되었습니다. Ernie Chan은 EWA와 EWC의 두 가지 ETF 사이의 동적 선형 회귀 계수를 추정하기 위해이 책의 기술 [1]을 활용합니다.
Aidan O'Mahony는 matplotlib과 pykalman을 사용하여이 글의 다이어그램에서 영감을 얻은 회귀 계수를 추정했습니다 (2).
조나단 킨 레이 (Jonathan Kinlay)는 칼만 필터를 시뮬레이션 된 금융 데이터에 적용하는 것에 대해 논의하고 있으며, 잡음이 많은 기간에 생성 된 거래 신호를 억제하거나 잡음이 적은 쌍으로 할당을 늘리는 것이 KF를 사용하는 것이 좋습니다.
R 프로그래밍 언어를 사용하는 칼만 필터에 대한 소개 토론은 Cowpertwait 및 Metcalfe [4]에서 볼 수 있습니다.
참조.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.

칼만 필터 거래 전략
칼만 필터는 신호 처리에서 프로세스의 기본 상태를 평가하는 데 사용됩니다. 핵심 수량 및 거래 지표에 대한 시끄러운 견적을 지속적으로 얻고 있기 때문에 금융에 매우 유용합니다. 이 노트북은 칼만 필터 (Kalman Filters)를 소개하고 정량 금융에 대한 적용 예를 보여줍니다.
강의는이 모임에서 진행됩니다. 우리는 비디오 강연을 발표 할 예정이며이 스레드에서 링크를 볼 것입니다.
또한이 강연에서 :
이것은 Quantopian의 Summer Lecture Series의 일부입니다. 우리는 현재 퀀텀 파이낸스 커리큘럼을 개발 중이며 핵심 개념을 가르치기 위해 복제가 가능한 노트북과 알고리즘을 공개 할 예정입니다. 계속 지켜봐주십시오. 우리는 또한 모든 노트북을 영구적으로 관리하고 있습니다.
노트는 Evgenia & # 39; Jenny & # 39; Nitishinskaya 및 알고리즘에 대한 크레딧은 David Edwards에게 돌아갑니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
우리 칼만 필터 예제를 사용할 수있게 해준 Aidan O & Mahony 박사에게 큰 감사를 전합니다. 그의 블로그에서 더 많은 것을 찾을 수 있습니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
칼만 필터에 좋은 소개. 재정적 인면에서 하나의 작은 점이지만, 공적분 관계에서 헤지 비율을 산정하기 위해 가격을 사용할 수 있지만 가짜 관계를 피하기 위해 수익을 사용하여 알파와 베타를 추정해야합니다.
Matthieu는 완전히 정확합니다. 끝에 일반적으로 반품을 사용한다고 설명하는 메모가 있지만 그 사실을 명확히해야합니다. 증가 된 범위로 인해 사진이 선명하기 때문에 가격을 사용했습니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
나는이 두 사이트가 칼만 필터의 어떤 변수가 무엇을하는지 알아 내는데 엄청난 도움이된다는 것을 알았다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
다음은 칼만 필터 대화에 대한 동반자 알고리즘입니다. 이 게시물에서 Kalman 필터를 사용하여 가격을 매끄럽게하고 두 주식 간의 스프레드를 계산하는 쌍 거래의 구현입니다.
강연 해 주셔서 대단히 감사합니다. 그것은 매우 유익했다;). 출발 : 프랑스
매우 기뻤습니다. 타오. 의견을 공유하는 것을 주저하지 마십시오.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
2012 년부터 2013 년까지 히트 맵을 읽는 것이 어떻게 좋은 해였습니까? 2014 년은 나쁜 해입니다. 파란색에서 빨간색으로 ?? 어느 것이 .. 과열을 나타냅니다.
열지도는 올해의 품질에 대해 아무 것도 말하지 않습니다. 오히려 그것은 단지 두 증권 간의 관계, 따라서 회귀 계수가 시간에 따라 어떻게 변하는지를 나타냅니다. 색상으로 표시된 시간 공간을 통해 뚜렷한 움직임이 있습니다. 여기에서 요점은 회귀를 취할 때주의를 기울여야한다는 것입니다. 왜냐하면 주어진 시간에 실제 근본적인 조건이 변할 수 있기 때문입니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
상황을 명확히하기 위해 Delany에게 감사드립니다.
형평성 곡선의 골짜기는 무엇을 나타 냅니까? 칼만이 기저 상태를 완전히 잘못 잡았던 때?
안녕하세요 Bharath, 알고리즘의 반환 또는 노트북의 내용을 언급하고 있습니까?
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
안녕하세요, 동영상 링크를 풀어 봤니? 죄송 합니다만 놓치 셨습니다.
Quantopian Lectures 페이지를 확인하십시오. 노트북, 백 테스트 및 비디오를 포함한 Quantopian Lectures 시리즈의 모든 자료를 모아 놓은 것입니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
arxiv. org/abs/1509.04072 - 오늘 아침 기차에서 이것을 읽었지만 잘 보입니다. 그러나 실제 기능 변환을 위해 수학을 공부하지는 않았습니다.
또한이 스레드의 향후 독자를 위해 David는이 스레드에서 Kalman 기반 쌍 거래를 여러 쌍으로 일반화하는 알고리즘을 공유했습니다.
나는 칼만 필터 노트북을 통해 일하고 있었고 선형 회귀 분석에서 SPY에 대한 회귀 분석을 통해 1의 베타를 얻지 못했고 알파가 있다는 것을 알았습니다.
시간이 지남에 따라 1에 가까워 야합니까? 그것은 견적서입니다.
그래도 알파는 제로에 접근합니까? 그것은 0.96-0.99 주위에 달려있다.
나에게 알파가 어떻게 접근하는지 잘 모르겠습니다. 내 복제물을 첨부하고 있습니다.
나는 결코 파이썬의 전문가는 아니지만 두 번째 그래프의 상단에있는 + 9.916e-1이 0.900 주위의 두 번째 플롯에서 각 y 간격에 추가된다고 가정하고 있습니다.
당신의 노트는 제 것과 똑같습니다. 나는 노트북을 달았다. 시작일과 종료일을 변경했는데 2010-2016 년으로 변경되었습니다.
나는 칼만 필터에 대한 전문가가 아니므로 군중에게 맡겨야 할 것입니다.
오늘 밤에 간단한 회귀 조사를 진행할 것입니다. 그러나 그것이 입력 가격이 아닌 계산으로 인해 발생했다고 생각합니다.
동일한 유가 증권의 다른 쌍을 시도했으며 서로 배제한 경우 (예 : SPY & SPY, TSLA & TSLA 및 IWM & IWM 시도) 베타 1 또는 0의 알파에 접근하지 못했습니다.
마일즈, 문제는 이전 평균과 공분산의 선택과 관련이 있습니다. 사전 공분산 행렬로 np. ones ((2,2))를 선택하는 것이 정당한 이유가 무엇인지 모르겠다. 이 링크는 필터 작동 방식을 이해하는 데 매우 유용합니다. 첨부 된 노트북에서 사전 선택이 어떻게 수렴에 영향을 주는지 더 잘 이해할 수있는 실험을했습니다.
내가 EMA에서 더 적절한 입력을 가진 뭔가로 옮기고 싶을 때 이것을 확실히 들여다 볼 것입니다.
나는 이동 평균을 계산하기 위해 칼만 필터를 정확히 사용할 때와 같은 의견이 있다면 궁금합니다. 예를 들어 운동량 및 추세 추적 전략에서 이동 평균은 추세 또는 추세 변화를 나타내는 시계열을 부드럽게 만드는 데 사용됩니다. 실제 시계열에 더 가깝게 적용함으로써 칼만 필터를 사용하는 것이 스무딩 효과를 감소시키는 것처럼 보입니다. Delaney의 원래 노트에서 이동 평균의 예에서 90 일 MA는 MA의 Kalman 추정보다 매끄러운 30 일 MA보다 더 매끄러운 60 일 MA보다 부드럽게 보입니다. 따라서 이동 평균에 대한 칼만 (Kalman) 추정치를 운동량 및 추세 전략에 적용하면 일반적으로 불필요한 거래가 발생하게됩니다. 내가 뭘 놓치고 있니?
칼만 필터를 사용하여 노이즈를 제거하고 칼만 필터의 매개 변수를 조정하여 이동 평균과 마찬가지로 부드럽게 효과를 다소 완화 할 수 있습니다. 트레이드 오프는보다 부드러운 신호가 세계의 진정한 상태를 지연시키는 반면, 세계의 측정을 따르는 신호는 상당히 시끄럽다는 것입니다. 왜 어떤 사람들은 칼만 필터를 사용하는 것이 효과적으로 더 수학적으로 일반화 된 이동 평균이라는 것입니다. 다른 모델을 넣을 수 있으며, 부드러움을 제어하는 ​​매개 변수는 실제로 의미가 있습니다 (측정 오류 등). 이동 평균에서 29 일은 47 일을 의미합니까? 실제로 칼만 필터는 비 파라 메트릭 모델에 더 가까이 다가 갈 수 있습니다. 비 파라 메트릭 모델은 매개 변수를 조정할 필요가없는 모델로, 매우 바람직합니다. 매개 변수를 조정하면 지나친 조정이 많이 발생합니다. 다시 말하지만, 칼만 필터에 대한 매개 변수가 실제로 어떤 것을 의미하기 때문에 데이터 세트에서 분산을 측정하여이를 추정 할 수 있습니다. 이렇게하면 이동 평균을 수행해야하는 것과 같이 매끄럽고 조정할 필요가 없습니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
MA를 대체하기 위해 칼만을 사용하는 것에 대한 계속되는 질문 하나. I'm not sure what the "correct" values of transition covariance and observation covariance should be. According to me, we must take.
observation cov = variance of underlying data over some ballpark lookback window (how long?)
Without estimating these (and setting both to some default value like 1) will likely defeat the non-parametric nature of the Kalman filter?
Is my understanding correct? And if yes, is there a better way to estimate the observation / transition covariances?
You're correct, there's no easy answer, and in the end a Kalman filter may end up being just as parametric as a MA. However, with an MA there is no hope of being able to derive the proper parameter, as the window length really means nothing. With a Kalman filter you can at least have some hope of occasionally doing so. There may be a process (less frequent in finance, more frequent in other fields) in which you can estimate observation and transition covariances through another variable rather than the data itself, or maybe even derive theoretical values. The idea is that worst case you're just as parametric as a MA, and have to optimize covariance values, best case you find another way to estimate/derive covariances in a non-parametric fashion. The way in which you would derive the covariances is probably pretty specific to each system, so I'm not sure there's a general way of doing so.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
Can you please help calculate Q(t), the measurement variance prediction, in Python? I'm assuming that Q(t) can be calculated from the state_covs array in the notebook. The square root of Q(t) can then be used to determine entry/exit signals (as described in Ernest Chan's book Algorithmic Trading ). 감사.
Hello Peter. Unfortunately my plate is very full developing more lectures, and I will not have time to look into this for a few weeks. My recommendation is to clone the notebook and mess around with the code. You should be able to see how to retrieve the information from the state matrix. If not I can take a look when I have time.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
delany it doesnt work. I've tried run all.
Hello Vlademir. I just double-checked the lecture and it should all be working fine. There was a small bug in the first moving average example plots that I corrected.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다. 또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
Can anyone help me with the application of Kalman Filters (KF) in predicting returns vs prices - When I run KF on prices I get pretty stable coefficients but when I run the same on returns, as expected, very noisy coefficients.
Lets say daily return on day t is +2% and on t+1 is -3%. When I will use the coefficients of day t to trade on t+1 the coefficients on t+1 trading will be totally off. Is there a way to handle this or we should run KF on prices and not on returns when estimating betas.
I used the code from the following link to estimate betas -
I'm assuming by coefficients you mean the beta coefficients? My guess is you are using the same observation and transition covariance in both cases. Try adjusting the observation covariance to reduce the effect of the latest observation on the beta coefficients.
당신의 답변에 감사드립니다. Yes, chaging covariance matrices improved the beta coefficients.
Are there any good practices for the number of iterations we should run to stablize the beta coefficients ? I have daily data for around 15 years so to calculate today's betas should I run from the first data point or should I run for the last 100 or 300 days. In these two cases since covariance matrices will be different so I may get different beta coefficients.
I would say the more data the better but the only real way to know is to test it and see what works best.
죄송합니다. 무엇인가 잘못되었습니다. 다시 시도하거나 의견을 보내서 문의하십시오.
지원 티켓을 성공적으로 제출했습니다.
지원팀이 곧 연락을 드릴 것입니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다.
또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다.
또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.

Kalman filter trading strategy


This strategy is taken from Example 3.3 in Ernie Chan's book, Algorithmic Trading: Winning Strategies and Their Rationale. It's been posted here previously but that used constants for the linear regression coefficients.
In this case, a Kalman filter is used to dynamically update the linear regression coefficients between the EWA and EWC ETFs. It performs well up to 2009 but after that the performance degrades.
cool, thanks for this example.
The Kalman filter is very powerful once you grasp how it works. If you're doing offline work, check out the pykalman module. The order weighting idea is nice, I hadn't thought of that.
Is there a reason you only rebalance weekly? You can reduce the trading frequency by reducing the transition covariance (delta) and increasing the observation covariance (Ve). This has the effect of slowing down the rate at which the regression coefficients change.
Anyone know if the kalman filter can be extended to more than two securities where the dependent and independent variables are no so clear?
Simon, it's easy to extend to n-dimensional linear regression by increasing the dimensions of the observation matrix for the Kalman filter (variable x in the algo). This backtest does a regression between SPY and the sector ETF's XLE, XLF and XLI.
First, thank you for your great work. I was going to explore this Kalman Filter algorithm before you posted. You helped me and many people here.
Second, for most pair trading algos, we need to test cointegration of the pair by using mostly either ADF or Johansen test. In this example, EWA-EWC pair is tested with Johansen test and it showed that the pair has good eigenvector. Is there any way that a pair trading algo includes one of these tests and gives us a confirmation if the pair is good or not before it runs?
Third, going a little bit further, is there any way for an algo to search the best pair by using those tests, pick right pair(s) and run with Kalman Filter algo?
Lastly, I'm wondering why EWA-EWC pair model orders same shares for long and short. Does it already include risk adjusted factors? What if I set a pair that has very best eigenvectors but the price ratio and beta is too high? In this case, ordering same shares for long/short does not make any sense. How does Kalman Filter pair model work regarding risk adjustment ?
Is there any way that a pair trading algo includes one of these tests and gives us a confirmation if the pair is good or not before it runs?
You could use the adfuller function in the statsmodels package to test for cointegration. In my experience, a good Dickey-Fuller test statistic does not necessarily imply a profitable pair for trading. AFAIK, the Johansen test is not available in any public python library but there is an open issue to include it in statsmodels.
is there any way for an algo to search the best pair by using those tests, pick right pair(s) and run with Kalman Filter algo?
Finding good pairs for trading is a difficult and computationally expensive problem. Have a look at Simon's thread, Grid-searching for profitable cointegrating portfolios, for a good discussion on this.
I'm wondering why EWA-EWC pair model orders same shares for long and short.
It doesn't order the same number of shares for long and short. If we are going "long" on the EWA/EWC spread, we buy X amount of shares in EWC and we sell beta * X of shares in EWA. This is a hedged position and we are never long and short on the spread at the same time.
Oooops. Right, it was not same shares.
고맙습니다. I will look up adfuller function and Simon's thread.
Yes, finding right pairs is very difficult. Even this Kalman filter algo does not work with some other pairs. I guess we need to work more and harder.
Again, thank you for the great work.
Aidan - my point was that even with a Kalman filter, one must decide a priori which variable is the dependent variable and which are independent regressors. In a basket situation, this seems nonsensical?
The Kalman filter works under the assumptions that you have a prediction function good at approximating the behavior of the phenomenon you're trying to track and that the error in the output of that function is normally distributed. In simulations of physical phenomena this works out well, because you know that a missile you're trying to shoot with a laser, for example, will not suddenly turn left 90 degrees. Physical laws limit the possible next states of that missile to a pretty small range of values.
Markets on the other hand, can turn 180 degrees without notice and there is no physical momentum to make tracking them tractable. Maybe I'm missing something, but I don't see why a Kalman filter should do well.
A particle filter would at least improve the situation by removing the assumption about linear behavior. Thoughts?
While I don't consider myself a data scientist, I have done the modeling (programming) for some. Regarding it's apparent success for this example, to me this looks to just be a "black box" who's end result is to average the trends, and give you a predictor of the next timestep. I'm not saying that's all it is, but for those (like me) who don't fully understand the math behind the algorithm, that's what it is.
oh also, you don't need a separate "dependent" 변하기 쉬운. just one input stream, that's predicting the next value of itself.
edit: at least that's what the kalman filter as described on wikipedia is about. I didn't look at the implementation that Aidan gave.
Simon, you're right, this isn't a scientific experiment and it's not obvious which asset to use as the dependent variable. The important question is does it really matter which asset we choose to be dependent? In my own tests, I've found it doesn't make a lot of difference to the end result. As a rule of thumb, I choose the dependent variable that gives the largest value of the cointegration coefficient, which implies the asset with the lower volatility is independent.
Eric and Jason, there is reasoning behind using a Kalman filter for this application!
First, let's look at what we are trying to achieve. We want to construct a stationary time-series (spread) from two individually non-stationary time-series (EWA and EWC). Let's assume there exists a parameter (beta or cointegration coefficient) such that the residual from the linear combination of the non-stationary time-series is stationary and we can use the resulting stationary series to generate trading signals. In a perfect world, beta would be constant and our job would be done.
Our problem now is that beta is not constant and changes gradually (assuming the series stay cointegrated) over time. To use a Kalman filter, we need to formulate an observation and transition equation. The observation equation is the linear combination of the non-stationary time-series plus Gaussian white noise. This is really just a linear regression of EWA and EWC. The transition equation assumes that beta is equal the previous beta plus Gaussian white noise. This is a random walk.
Using more complex non-linear models probably won't improve things, as Ernie Chan said on non-linear models "experiences showed me that nonlinear models have mostly been unmitigated disasters in terms of trading profits" and "One is almost certain to overfit a nonlinear model to non-recurring noise".
haha, thanks mate :)
i just got a copy of Ernie Chan's book, so looking forward to reading about this in detail :)
Thanks for posting this. I haven't made it through Ernie's second book yet, but I'm curious why anyone would use this strategy given that it does horribly as soon as you factor in slippage and commissions. Even with 10 times as much capital it still loses money.
I'm new to trading, so it's likely I'm misunderstanding something here. Can someone explain when this strategy (or similar pair trading strategies) would make sense?
Using the current setup of the algo, it trades frequently, almost every day, and the profit from each trade is not sufficient to cover transaction costs. It trades frequently because the Kalman filter responds quickly to changes in the EWA/EWC spread. Reducing the sensitivity of the Kalman filter will decrease trading frequency and only trade larger deviations in the spread, which will increase the expected payoff. To answer your question, it only makes sense to use this strategy, or any other strategy, when the expected payoff of a trade is greater than transaction costs.
Here is a complete stab in the dark:
I wanted to ask what is the meaning of this line:
Why don't you want to plot values where the spread is >=5?
I can't remember exactly why I did that. It was something to do with keeping the y-scale on the record graph output small so it's easier to see. It won't have any effect on the results if you remove it.
Yes, I have cloned the algorithm and found out already. It is only there to filter out initial extremes from the graph output. 감사.
I can see one issue when trying to use Kalman filter for trading - the infinite memory. I just tried to include more samples preceding the backtest start date - it still affects the prediction of beta/alpha even when I use thousands of samples (no convergence). I think for trading application, the actual Kalman filter implementation should be more biased on recent data and be able to "forget" about data from ancient past. Of course, you can set the "pre-train" phase length to some arbitrary value, but to which one?
There are some implementations like this discussed (for instance, search for Adaptive Fading Kalman Filter). Does anyone have experiences with these modifications?
How would I change the algorithm for daily trading?
Is there a reason that orders only take place in the last 5 minutes of the trading day?
Also, when you run a full backtest and look at the transaction details, there are sometimes multiple orders on the same day. For example, on 5-03-06, there were the following order: -1137 EWA, -1125 EWA, +1000 EWC, and +1000 EWC. Why are there multiple orders on the same day?
On 4-26-06, there was only one order: -1000 EWC. Why was there only one order and no corresponding pairs trade, i. e. +EWA?
Thanks for sharing the algorithm and answering questions.
Is there a reason that orders only take place in the last 5 minutes of the trading day?
Ernie Chan's original algo runs on daily close data so to replicate that on Quantopian I used the close price at 3.55PM to update the Kalman filter and allow 5 minutes before market close for any orders to fill.
Thank you very much for your response.
Changing the time that orders take place by 15-30 minutes can significantly change the results of a backtest (for example, changing from 3:55 pm to 3:30 pm). Why does this happen? Is there an ideal time to execute trades? 감사.
Why does this happen? Is there an ideal time to execute trades?
I'm not certain of the reason but if I had to guess I would say that arbitrage algo's perform better with increasing volatility and, in general, volatility is higher around market open and market close. I'm not sure if there is an "ideal time" to execute trades, it really depends on what you're trying to exploit.
How is the entry and exit points chosen? A short position is opened when e>sqrt(Q). Then we should wait for e to decrease. But the we just exit when e revert to sqrt(Q) again. Why is it?
How come the transaction always start with one leg instead of two legs?
Why does this happen? Is there an ideal time to execute trades?
There is no specific ideal time to execute trades, however your thesis/analysis is based on daily close price data. Therefore, you should aim to minimise slippage against the forthcoming close price on each given day. Executing trades 15 mins before market close still subjects you to the probability of slippage against the close price on that day, but how do you decide the optimal time. maybe 5 mins before the close. or 2 mins? Setting the execution/order as close as possible towards the close increases the probability that your order may not be filled so you will need to assess the trade off between close price-slippage/probability of execution.
Thanks for sharing Aidan. This has been so helpful along with your Kalman Filter notebook.
I have a question though about the initialization setup you have here. In the notebook, you assumed the measurement error to be 10, or Ve to be 100, but here you set Ve to something dramatically smaller, 0.001. Is there a reason behind such huge discrepancy? This number can obviously change the results dramatically.
When I rerun the numbers, I can get negative value for Q which result in errors when I calculate sqrt(Q). How do you manage negative Qs?
problem solved for only one leg in the beginning.
However, mean reversion quality for bond product is very bad.
Better try on other equity or FX spreads.
If we are using a Kalman filter as in the the example above, would we still need to reblanace any open positions periodically to reflect the position in the latest spread as it is getting updated by the Kalman Filter?
(sorry but i dont seem to be able to see any rebalancing in the algorithm?)
hi thx aidan for the nice post. It certainly helps to enlightened more about Kalman filter application. Just wonder what will be the best practice in using this Kalman filter to find the cointegrated pairs. Will following two approaches both reasonable?
Testing cointegration based on simple OLS residual (spread) analysis.
I've found option 2 wasn't really appropriate since it makes an assumption on evolving state of beta which might impact the regression residual of the actual price measurement. Let me know what others think as well. 감사.
Agree with your analysis. Approach 1 is reasonable but you'll find most of the time the conitegration relationship will break down and will never revert to the mean. Approach 2 doesn't make a lot of sense as the relationship is constantly evolving.
thx aidan. Guess i will try to combine both analysis (i. e. in sample cointegration analysis based on simple OLS to find the pairs and out sample forecast based on Kalman filter for trading signal). Do you think this approach makes sense?
Are there any leverage used in this algo?
Hi, I'm seeking help here. While I'm understanding Kalman Filter and trying to apply this algorithm in real trades, there are something I don't quite understand.
In the sample algorithm, the kalman filter takes one price for each symbol, and get hedge ratio, mean, standard deviation etc. So that it further decides if we can enter long/short at a moment. However, in real trades, for every tick/bar, there are bid price and short price for every symbol, so they are two values of each symbol, four values for pair trading. Then how should we use the four values to calculate trading signal?
Actually this question is not only about Kalman Filter, but general to any backtest program. Back test data has only one value for each time (which might be OPEN or CLOSE), but in real trades, there are lowest ask, highest bid and other order prices. Which values should we use to decide trading signal?
Appreciate any help!
죄송합니다. 무엇인가 잘못되었습니다. 다시 시도하거나 의견을 보내서 문의하십시오.
지원 티켓을 성공적으로 제출했습니다.
지원팀이 곧 연락을 드릴 것입니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다.
또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.
이 웹 사이트의 자료는 정보 제공의 목적으로 만 제공되며 판매 제안, 구매 권유 또는 보안 또는 전략에 대한 추천이나 보증을 구성하지 않으며 Quantopian이 투자 자문 서비스를 제공하겠다는 제안을 구성하지 않습니다.
또한이 자료는 보안 또는 특정 투자의 적합성과 관련하여 의견을 제시하지 않습니다. 여기에 포함 된 어떤 정보도 콴토 피안이나 그 계열사가 투자 자문을 제공하려고 시도하지 않으며, 콴토 피안 또는 그 계열사의 자문 역할을 수행하지 않으므로 투자 관련 행동 강령에 관여하거나이를 자제하는 제안으로 간주되어서는 안됩니다. 1974 년 개정 된 근로자 퇴직 소득 보장법 (Employee Retirement Income Security Act), 개인 퇴직 연금 또는 개별 퇴직 연금, 또는 본 자료에 제시된 자료에 대한 신탁 능력에 관한 자문을 제공해야합니다. 개인 퇴직 또는 기타 투자자 인 경우 여기에 설명 된 투자 아이디어, 전략, 제품 또는 서비스가 귀하의 상황에 적합한 지 여부에 대해 Quantopian과 관련없는 재정 고문 또는 다른 신탁에게 문의하십시오. 모든 투자에는 원금 손실을 포함한 위험이 관련됩니다. Quantopian은 웹 사이트에 표현 된 견해의 정확성 또는 완전성에 대해 어떠한 보증도하지 않습니다. 견해는 변경 될 수 있으며 시장 상황이나 경제적 상황의 변화를 비롯하여 다양한 이유로 신뢰할 수 없게 될 수 있습니다.

No comments:

Post a Comment