체계적인 거래 전략 개발 및 백 테스팅


체계적인 거래 전략 개발 및 백 테스팅
QuantDesk는 모든 규모의 퀀트 펀드를위한 완벽한 엔드 - 투 - 엔드 솔루션입니다. 여기에는 OpenQuant IDE, QuantRouter (피드 복제, 통합, 집계 및 스마트 주문 라우팅이 포함 된 실행 서버), QuantBase (실시간 피드 캡처 및 중앙 집중식 내역 데이터 관리가 포함 된 시장 데이터 서버), QuantTrader (자동화 된 거래 전략을위한 생산 배포 엔진) with OpenQuant) 및 QuantController, SmartQuant의 분산 된 거래 아키텍처를 효율적으로 관리 할 수 ​​있도록 QuantDesk를 보완하는 서버 응용 프로그램입니다.
물론, 우리는 여전히 여러 전략을 실험하고 시도하고 테스트하는 데 많은 시간을 소비합니다. 좋은 개발 환경을 갖추고 있다고해서 반드시 그 단계를 건너 뛸 수있는 것은 아닙니다. 잘 설계된 프레임 워크의 진정한 장점은 테스트와 생산 사이의 시간을 최소한으로 줄이는 것, 인프라의 확장 가능한 성격으로 회사가 작은 자본을 관리하는 것에서 진정한 제도적 수준까지 성장할 수 있다는 것입니다. 이와 같은 시스템으로 신흥 관리자는 훨씬 더 큰 경쟁자와 동일한 시장에서 거래하면서 평등 한 경쟁 환경에서 느낄 수 있으며 민첩하고 적응력있는 고유의 이점을 완전히 실현할 수 있습니다.

QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
Frank Smietana, 2017 년 7 월 18 일
이 기사에서는 QuantStart의 전문 게스트 기고가 중 한 명인 Frank Smietana가 Python 오픈 소스 백 테스팅 소프트웨어 환경을 설명하고 자신의 프로젝트 요구에 적합한 백 테스팅 프레임 워크에 대한 조언을 제공합니다.
Backtesting은 STS (Systematic Trading Strategy) 프로덕션 프로세스의 가장 중요한 부분으로 전략 개발 및 배포 (라이브 거래) 사이에 놓여 있습니다. 전략에 결함이있는 경우 철저한 백 테스팅을 통해이 사실을 알릴 수 있기 때문에 손실 전략이 배포되는 것을 방지 할 수 있습니다.
트레이딩 시뮬레이션 및 라이브 거래를 비롯한 여러 관련 기능이 백 테스트와 겹칩니다. 백 테스트는 기록 데이터를 사용하여 STS 성능을 계량합니다. 트레이딩 시뮬레이터는 거래의 트리거링과 가격대 성능을 가시화함으로써 한 걸음 더 나아가서 백 테스팅을 수행합니다. 시뮬레이트 / 라이브 거래는 테스트 된 STS를 실시간으로 배포합니다. 즉, 거래 신호, 주문 생성, 브로커에게 주문 라우팅, 주문 실행과 함께 위치 유지 등이 있습니다.
대부분의 프레임 워크는 일부 실시간 거래 기능을 포함하여 백 테스팅을 뛰어 넘습니다. 선호하는 브로커 및 데이터 소스와 함께 작동하는 백 테스팅 프레임 워크에서 배포하려는 경우 편리합니다. Quantopian / Zipline은 한 단계 더 나아가 완벽하게 통합 된 개발, 백 테스팅 및 배포 솔루션을 제공합니다.
파이썬 커뮤니티는 6 개 이상의 오픈 소스 백 테스팅 프레임 워크를 사용할 수있어 잘 지원됩니다. 그러나 그들은 개발 및 문서화의 다양한 단계에 있습니다. 오픈 소스 백 테스팅 프레임 워크를 구축하는 팀에서 일하는 것을 즐긴다면 Github repos를 확인하십시오.
백 테스팅 프레임 워크를 평가하기 전에 STS의 요구 사항을 정의하는 것이 좋습니다.
어떤 종류의 자산을 거래하고 있습니까? 대부분의 프레임 워크가 YahooFinance를 통해 미국 주식 데이터를 지원하지만 전략에 파생 상품, ETF 또는 EM 증권이 포함되어 있으면 프레임 워크에서 데이터를 가져 오거나 제공해야합니다. 자산 클래스 범위는 데이터를 뛰어 넘습니다. 프레임 워크가 유한 길이의 미래 및 옵션을 처리하고 롤오버 거래를 자동으로 생성 할 수 있습니까? 비 유동성 시장은 대량 주문을 할 때 얼마나 현실적인 가정을해야합니까?
STS가 구축 한 데이터 빈도 및 세부 정보는 무엇입니까? 모든 틱이나 입찰 / 요청을 요구하는 거래 시스템은 5 분 또는 매시간 간격과는 매우 다른 데이터 관리 문제를 가지고 있습니다. 헤지 펀드 및 HFT 매장은 데이터 양과 빈도를 처리하기 위해 견고하고 확장 가능한 백 테스팅 프레임 워크를 구축하는 데 상당한 투자를했습니다. 일부 플랫폼은 S & P 주식과 같은 다양한 자산 클래스에 대해 1 분의 해결책으로 풍부하고 깊은 데이터 세트를 제공합니다.
STS는 어떤 주문 유형을 요구합니까? 최소, 한계, 정지 및 OCO가 프레임 워크에 의해 지원되어야합니다.
지원 수준 & amp; 필요한 서류. 초기 단계의 프레임 워크는 설명서가 부족하고 커뮤니티 보드 이외의 지원은 거의 없습니다.
Backtesting Framework의 구성 요소.
데이터 및 STS 수집 : 수집 구성 요소는 STS 스크립트 / 정의 파일을 사용하고 테스트에 필요한 데이터를 제공합니다. 프레임 워크가 backtesting 전에 어떤 STS를 다시 코딩해야한다면, 프레임 워크는 STS 테스트 속도를 높이기 위해 가장 유명한 기술 지표에 대한 준비된 기능을 지원해야합니다. 사용자는 프레임 워크에서 제공하는 항목 또는 가져올 수있는 항목을 기준으로 기간을 백 테스트 할 기간을 결정합니다.
성능 테스트는 STS 논리를 요청 된 기록 데이터 창에 적용하고 광범위한 위험 & amp; 최대 삭감, Sharpe & Sortino 비율을 포함한 성능 메트릭. 대부분의 모든 프레임 워크는 주식 곡선 및 deciled 통계를 포함하여 상당한 수의 시각화 기능을 지원합니다.
최적화는 STS 프로세스에서 컴퓨팅 자원의 상당 부분을 필요로하는 경향이 있습니다. STS에서 최적화가 필요한 경우 확장 가능한 분산 / 병렬 처리를 지원하는 프레임 워크에 중점을 둡니다.
기술 지표를 사용하여 개발 된 전략의 맥락에서 시스템 개발자는 각 지표에 대한 최적의 매개 변수 세트를 찾으려고 시도합니다. 가장 간단하게, 최적화는 6 일과 10 일 이동 평균 크로스 오버 STS가 1에서 20 사이의 다른 기간 조합보다 역사적인 테스트 데이터에서 더 많은 이익을 축적했음을 알 수 있습니다. 이미이 간단한 예제를 사용하면 20 * 20 = 400 매개 변수 조합이 계산 & amp; 순위.
포트폴리오 컨텍스트에서 최적화는 포트폴리오의 모든 자산에 대한 최적의 가중치 (단락 및 레버리지 된 수단 포함)를 찾으려고합니다. 주기적으로 포트폴리오가 재조정되어 최적화 된 가중치와 일치하도록 필요한 포트폴리오 보유 물의 매매가 이루어집니다.
위치 조정은 최적화의 추가 사용으로 시스템 개발자가 STS 및 포트폴리오 성능에 대한 레버리지 및 동적 위치 결정의 영향을 시뮬레이션 및 분석 할 수 있습니다.
파이썬에 대한 6 가지 백 테스팅 프레임 워크.
오픈 소스 파이썬 백 테스팅 플랫폼의 표준 기능에는 다음이 포함됩니다.
이벤트 주도 매우 유연하고 제한없는 라이센스 사전 정의 된 기술 지표의 적절한 수집 표준 성능 메트릭 계산 / 시각화 /보고 기능.
PyAlgoTrade.
PyAlgoTrade는 종이 및 라이브 거래 기능과 함께 완전하게 문서화 된 백 테스팅 프레임 워크입니다. 데이터 지원에는 Yahoo! Finance, Google Finance, NinjaTrader 및 Quandl과 같은 모든 유형의 CSV 기반 시계열. 지원되는 주문 유형에는 Market, Limit, Stop 및 StopLimit가 포함됩니다.
PyAlgoTrade는 Bitstamp를 통한 Bitcoin 거래 및 실시간 Twitter 이벤트 처리를 지원합니다.
bt - 파이썬 백 테스팅.
bt "는 복잡한 거래 전략의 신속한 개발을 촉진하기 위해 쉽게 테스트 할 수 있고, 재사용이 가능하며, 유연한 전략 논리 블록을 만드는 것을 목표로합니다."
이 프레임 워크는 특히 자산 가중치와 포트폴리오 재조정을위한 포트폴리오와 함께 포트폴리오 기반 STS를 테스트하는 데 적합합니다. 다른 시간 빈도 또는 대체 자산 가중치로 실행하는 전략을 수정하면 최소한의 코드 수정이 필요합니다. bt는 파이썬을위한 파이낸셜 함수 라이브러리 인 ffn 위에 구축되었습니다.
백 트레이더.
이 플랫폼은 블로그와 질문 및 기능 요청 게시를위한 활발한 온라인 커뮤니티와 함께 ​​매우 잘 문서화되어 있습니다. Backtrader는 CSV 파일, Pandas DataFrames, 블레이즈 반복기 및 세 브로커의 실시간 데이터 피드를 비롯한 다양한 데이터 형식을 지원합니다. 이러한 데이터 피드는 동시에 액세스 할 수 있으며 서로 다른 시간대를 나타낼 수도 있습니다. 지원되는 중개인은 FX 거래를위한 Oanda 및 대화 형 중개인 및 비주얼 차트를 통한 다중 자산 클래스 거래를 포함합니다.
pysystemtrade.
pysystemtrade 개발자 인 Rob Carver는 왜 또 다른 Python 백 테스팅 프레임 워크를 만들고 프레임 워크 개발에 대한 논쟁에 착수했는지 토론하는 훌륭한 글을 가지고 있습니다. pysystemtrade에 대한 백 테스팅 프레임 워크는 Rob의 책 "Systematic Trading"에서 논의됩니다.
pysystemtrade는 최적화 및 조정 기술이 포함 된 완전한 기능을 갖춘 백 테스터와 인터랙티브 브로커 (Interactive Brokers)를 통한 완전 자동 선물 거래를 비롯한 다양한 로드맵 기능을 나열합니다. 오픈 소스 참여자를 환영합니다.
Zipline은 종이 및 라이브 거래 기능을 갖춘 알고리즘 트레이딩 시뮬레이터입니다. Zipline은 브라우저 기반의 IPython 노트북 인터페이스를 통해 액세스 할 수있어 명령 줄 도구 대신 사용할 수 있습니다. Quantopian이 지원하고 개발 한 Zipline은 독립형 백 테스팅 프레임 워크 또는 완전한 Quantopian / Zipline STS 개발, 테스트 및 배포 환경의 일부로 사용할 수 있습니다. Zipline은 10 년간의 역사적인 미국 주식 데이터 및 많은 데이터 가져 오기 옵션을 제공합니다.
QSTrader는 실시간 거래 기능이있는 백 테스팅 프레임 워크입니다. 퀀트 스타트의 설립자 인 마이클 홀즈 무어 (Michael Halls-Moore)는 소매점 퀀트 헤지 펀드와 기관 퀀트 헤지 펀드의 요구에 부응 할 수있는 강력하고 확장 가능한 플랫폼을 구축하려는 의도로 QSTrader를 출시했습니다. Qstrader는 현재 다양한 시간 범위에서 OHLCV "바"해상도 데이터를 지원하지만 진드기 데이터를 사용할 수 있습니다.
백 테스팅과 라이브 거래는 모두 이벤트 중심으로 진행되므로 연구에서 테스트 및 최종 거래에 이르기까지 전략 전환을 간소화합니다. 핵심 전략 / 포트폴리오 코드는 두 배포 모두에서 종종 동일합니다.
Qstrader의 주요 이점은 모듈성이므로 특정 위험 또는 포트폴리오 관리 요구 사항을 가진 사람들을 위해 광범위한 사용자 정의 코드를 사용할 수 있습니다.
Backtest 채택.
(잘하면 수익성있는) STS 개발에 대한 보상에 집중하고 전략을 철저히 테스트하는 데 충분한 시간과 자원을 투자하지 않고 자금이 투입된 계좌를 배포하는 것은 인류의 본성입니다. 그러나 백 테스팅은 결함있는 전략을 배치하고 거래 자본을 잃지 않도록하는 게이트 키퍼 일뿐만 아니라 STS 개발 프로세스에 알릴 수있는 여러 가지 진단 기능을 제공합니다. 예를 들어, 두 개의 서로 다른 시간 프레임에 걸쳐 동일한 STS를 테스트하고, 자산 상관 관계의 맥락에서 전략의 최대 축소를 이해하며, 여러 지역에 걸쳐 자산 할당을 백 테스팅하여 더 똑똑한 포트폴리오를 만들 수 있습니다.
향후 게시물에서는 Python이 아닌 환경의 백 테스팅 프레임 워크와 예측 거래 모델 백 테스팅을위한 부트 스트래핑 및 잭 나이프와 같은 다양한 샘플링 기술의 사용에 대해 다룰 예정입니다.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.

QuantStart.
빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.
퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.
Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.
Michael Halls-Moore (2013 년 4 월 26 일)
이 기사에서는 Beginner 's Guide 및 Strategy Identification으로 시작된 양적 거래에 대한 시리즈를 계속합니다. 이 길고, 더 관여하는 기사는 매우 인기가 있었기 때문에이 글에서 계속해서 전략 백 테스팅에 대한 세부 사항을 제공 할 것입니다.
알고리즘 백 테스팅은 심리학, 수학, 통계, 소프트웨어 개발 및 시장 / 교환 미세 구조를 포함한 많은 분야에 대한 지식이 필요합니다. 하나의 기사에서 모든 주제를 다룰 수는 없으므로 두 개 또는 세 개의 작은 조각으로 나눌 것입니다. 이 섹션에서 우리는 무엇을 논의 할 것인가? 우선 백 테스팅을 정의한 다음 시작하는 방법에 대한 기본 사항을 설명하겠습니다. 그런 다음 양적 교역에 대한 초보자 안내서에서 다루었던 편견을 설명 할 것입니다. 다음으로 다양한 백 테스팅 소프트웨어 옵션을 비교해 보겠습니다.
다음 기사에서는 간혹 언급되거나 무시되는 전략 구현의 세부 사항을 살펴볼 것입니다. 거래 교환의 특성을 포함시켜 백 테스팅 프로세스를보다 현실적으로 만드는 방법도 고려할 것입니다. 그런 다음 거래 비용과 백 테스트 설정에서이를 올바르게 모델링하는 방법에 대해 설명합니다. 우리는 백 테스팅의 성과에 대한 논의를 마칠 것이고 마침내 반전 쌍 거래라고 알려진 일반적인 퀀텀 전략의 예를 제공 할 것입니다.
백 테스팅이 무엇인지, 왜 우리가 알고리즘 트레이딩에서 그것을 수행해야하는지에 대해 논의함으로써 시작하겠습니다.
Backtesting이란 무엇입니까?
알고리즘 거래는 다른 유형의 투자 클래스와 차별화됩니다. 왜냐하면 풍부한 데이터 가용성으로 인해 과거 실적에서 미래의 성과에 대한 기대치를보다 정확하게 제공 할 수 있기 때문입니다. 이를 수행하는 프로세스를 역 테스팅 (backtesting)이라고합니다.
간단히 말해서 백 테스팅은 특정 전략 알고리즘을 과거 재무 데이터의 흐름에 노출시킴으로써 이루어지며 이는 일련의 거래 신호로 연결됩니다. 각 거래 (여기서는 두 신호의 '왕복'이라는 의미)는 관련 이익 또는 손실을 가져옵니다. 전략 백 테스트 기간 동안이 이익 / 손실이 축적되면 총 손익 ( 'P & L'또는 'PnL'이라고도 함)이 발생합니다. 그것이 "악마는 언제나 세부 사항에있다"고하지만, 이것이 아이디어의 본질입니다!
알고리즘 전략을 백 테스트하는 주요 이유는 무엇입니까?
여과 - 전략 식별에 대한 기사에서 상기 한 초기 연구 단계의 목표는 전략 파이프 라인을 설정 한 다음 특정 기준을 충족시키지 못한 전략을 필터링하는 것이 었습니다. Backtesting은 성능 요구를 충족시키지 못하는 전략을 제거 할 수 있으므로 다른 필터링 메커니즘을 제공합니다. 모델링 - 백 테스트를 통해 거래 비용, 주문 라우팅, 대기 시간, 유동성 또는 기타 시장 미세 구조 문제와 같은 특정 시장 현상에 대한 새로운 모델을 테스트 할 수 있습니다. 최적화 - 전략 최적화는 편향성이 있지만 백 테스팅을 통해 전략과 관련된 매개 변수의 양 또는 값을 수정하고 성능을 다시 계산함으로써 전략의 성능을 향상시킬 수 있습니다. 검증 - 우리의 전략은 전략 파이프 라인을 통해 외부에서 공급되는 경우가 종종 있습니다. 전략을 백 테스팅하면 잘못 구현되지 않았 음을 보증 할 수 있습니다. 외부 전략에 의해 생성 된 신호에 거의 액세스하지는 않지만 Sharpe Ratio 및 Drawdown 특성과 같은 성능 메트릭에 액세스 할 수 있습니다. 따라서 우리는 그것을 우리 자신의 구현과 비교할 수 있습니다.
Backtesting은 알고리즘 거래에 많은 이점을 제공합니다. 그러나 전략을 직접 백 테스팅하는 것이 항상 가능한 것은 아닙니다. 일반적으로 전략의 빈도가 증가함에 따라 시장 및 거래소의 미세 구조 효과를 정확하게 모델링하는 것이 어려워진다. 이로 인해 신뢰성이 떨어지는 백 테스트가 발생하고 선택한 전략을보다 까다롭게 평가하게됩니다. 이것은 실행 시스템이 초 고주파 알고리즘처럼 전략 성능의 핵심 인 경우 특히 문제입니다.
불행히도, 백 테스팅은 모든 유형의 편견으로 가득 차 있습니다. 우리는 이전 기사에서 이러한 문제 중 일부를 다루었으나 이제는 심도있게 논의 할 것입니다.
전략 배점에 영향을주는 편견.
백 테스트 된 전략의 성능에 영향을 줄 수있는 많은 편견이 있습니다. 불행히도 이러한 편향은 성능을 저하시키는 것보다 성능을 부 풀리는 경향이 있습니다. 따라서 항상 전략의 실제 성과에 대한 이상적인 상한선 인 백 테스트를 고려해야합니다. 알고리즘 거래에서 편견을 제거하는 것은 거의 불가능하므로 알고리즘 전략에 대한 충분한 정보를 바탕으로 의사 결정을 내릴 수있는 최선의 방법으로 최소화해야합니다.
최적화 바이어스, 미리보기 바이어스, 생존자 편견 및 심리적 공차 바이어스와 같은 네 가지 주요 편견에 대해 논의하고 싶습니다.
최적화 바이어스.
이것은 아마 모든 backtest 편견 중에서 가장 교활한 것입니다. 백 테스트 데이터 세트의 전략 성과가 매우 매력적 일 때까지 추가 거래 매개 변수를 조정하거나 도입해야합니다. 그러나 일단 라이브가되면 전략의 성능이 크게 달라질 수 있습니다. 이 편견의 또 다른 이름은 "curve fitting"또는 "data-snooping bias"입니다.
알고리즘 전략은 종종 많은 매개 변수를 포함하기 때문에 최적화 바이어스를 제거하기가 어렵습니다. 이 경우의 "매개 변수"는 진입 / 퇴출 기준, 되돌아 오기 기간, 평균 기간 (즉, 이동 평균 평활화 매개 변수) 또는 변동성 측정 빈도 일 수 있습니다. 최적화 바이어스는 매개 변수의 수를 최소로 유지하고 트레이닝 세트의 데이터 요소 양을 늘려 최소화 할 수 있습니다. 사실, 오래된 교육 포인트는 이전의 정권 (예 : 규제 환경)에 종속 될 수 있으므로 현재 전략과 관련되지 않을 수 있으므로 후자에주의해야합니다.
이 편향을 완화하는 한 가지 방법은 민감도 분석을 수행하는 것입니다. 이는 매개 변수를 점진적으로 변경하고 성능의 "표면"을 그려야 함을 의미합니다. 매개 변수 선택에 대한 건전하고 근본적인 추론은 다른 모든 요인을 고려할 때보다 매끄러운 매개 변수 표면을 유도해야합니다. 성능이 급격히 떨어지는 경우 매개 변수가 현상을 반영하지 않고 테스트 데이터의 결과 인 경우가 많습니다. 다차원 최적화 알고리즘에 대한 방대한 문헌이 있으며 매우 활발한 연구 분야입니다. 환상적인 백 테스트 전략을 찾으면 여기에 머물러 서지 말고 마음의 뒤쪽에 두십시오!
미리보기 바이어스.
Look-Ahead 바이어스는 미래의 데이터가 실수로 시뮬레이션에서 그 데이터가 실제로 이용 가능하지 않은 지점에 포함될 때 백 테스팅 시스템에 도입됩니다. 백 테스트를 시간순으로 실행하고 시점을 $ N $로하면 $ k> 0 $ 인 $ N + k $ 점에 데이터가 포함되어 있으면 look-ahead bias가 발생합니다. Look-Ahead 바이어스 오류는 엄청나게 미묘합니다. 미리보기 바이어스를 도입하는 방법에 대한 세 가지 예가 있습니다.
기술적 인 버그 - 코드의 배열 / 벡터에는 종종 반복자 또는 인덱스 변수가 있습니다. 이러한 인덱스의 잘못된 오프셋은 0이 아닌 $ k $에 대해 $ N + k $에 데이터를 통합하여 미리보기 편향을 유발할 수 있습니다. 매개 변수 계산 - 두 가지 시계열 간의 선형 회귀와 같이 최적의 전략 매개 변수를 계산할 때 미리보기 바이어스의 또 다른 일반적인 예가 발생합니다. 전체 데이터 세트 (미래 데이터 포함)가 회귀 계수를 계산하는 데 사용되고 따라서 소급 적용을 위해 거래 전략에 소급 적용되는 경우 향후 데이터가 통합되고 미리보기 편견이 존재합니다. Maxima / Minima - 특정 거래 전략은 OHLC 데이터에 고가 또는 저가를 통합하는 것과 같이 모든 기간에 극단 치를 사용합니다. 그러나 이러한 최대 / 최소 값은 기간 만료시에만 계산할 수 있으므로이 값이 현재 기간 동안 사용되면 미리보기 바이어스가 도입됩니다. 그것들을 사용하는 모든 거래 전략에서 적어도 하나의 기간만큼 고 / 저값을 래깅 할 필요가 있습니다.
최적화 편견과 마찬가지로, 도입을 피하기 위해 매우 조심해야합니다. 종종 "라이브 거래"에서 거래 전략이 백 테스팅을 크게 하회하는 주된 이유입니다.
생존자 편견.
생존자 편견은 특히 위험한 현상이며 특정 전략 유형에 대해 상당히 과장된 성과로 이어질 수 있습니다. 특정 시점에 선택되었을 수도있는 이전 자산의 전체 유니버스를 포함하지 않는 데이터 세트에서 전략을 테스트 할 때 발생하지만 현재 시간까지 "살아남은"자산 만 고려해야합니다.
예를 들어, 2001 년 시장 추락 전과 후에 무작위로 주식을 선택하는 전략을 시험해보십시오. 일부 기술주는 파산했고, 다른 일부는 살아남을 수 있었고 심지어 번영했습니다. 우리가 시장 하락 기간을 통해 주식을 생산 한 주식에만이 전략을 제한했다면, 이미 우리에게 성공을 입증했기 때문에 생존자 편견을 도입 할 것입니다. 실제로 이것은 미래 정보가 과거 분석에 통합되므로 미리보기 편향의 또 다른 특별한 경우입니다.
전략 백 테스트에서 생존자 편향을 완화하는 두 가지 주요 방법이 있습니다.
Survivorship Bias Free Datasets - 형평 데이터의 경우에는 값이 싸지 않고 제도 기관에서 활용하는 경향이 있지만 상장 데이터를 구매할 수 있습니다. 특히 야후 파이낸스 데이터는 생존자 편견이 없으며, 이는 많은 소매업 자들에게 일반적으로 사용됩니다. 생존자 편견에 취약하지 않은 자산 클래스 (예 : 특정 상품 (및 미래 파생 상품))와 거래 할 수도 있습니다. 최근 데이터 사용 - 주식의 경우 최신 데이터 세트를 사용하면 선택한 주식 선택이 단기간에 전체 재고 상장 가능성이 줄어들 기 때문에 "생존자"에게 가중치를 적용 할 가능성이 줄어 듭니다. 현재 시점부터 데이터를 수집하여 개인 생존자 편견없는 데이터 집합을 구축하기 시작할 수도 있습니다. 3 ~ 4 년이 지난 후에는 추가 생존 전략을 뒷받침 할 수있는 견고한 생존자 편견이없는 주식 데이터 세트를 갖게됩니다.
우리는 이제 귀하의 거래 실적에 영향을 미칠 수있는 특정 심리적 현상을 고려할 것입니다.
심리적 인 공차 편견.
이 특별한 현상은 양적 거래의 맥락에서 종종 논의되지 않는다. 그러나 더 자유 재량 적 거래 방법에 관해서는 광범위하게 논의되고있다. 그것은 다양한 이름을 가지고 있지만 문제의 본질을 포착하기 때문에 "심리적 인 편견"이라고 부르기로했습니다. 5 년 이상의 기간에 걸쳐 백 테스트를 작성하는 경우, 상승 추세 형평성 곡선을보고, 복합 연간 수익률, 샤프 비율 및 드랍 다운 특성을 계산하고 결과에 만족할 수 있습니다. 예를 들어, 이 전략은 25 %의 최대 상대 배출량과 4 개월의 최대 배출 감소 기간을 가질 수 있습니다. 이것은 운동량 전략에 비 전형적인 것은 아니다. 전반적인 그림이 장밋빛이기 때문에 그러한 손실 기간을 용인하는 것이 쉽다는 것을 확신하는 것은 간단합니다. 그러나 실제로는 훨씬 더 어렵습니다!
역 테스크에서 25 % 또는 그 이상의 역사적 감소가 발생한다면, 라이브 거래에서 비슷한 수준의 손실을 볼 수 있습니다. 이러한 삭감 기간은 심리적으로 견딜 수 없습니다. 나는 제도적 상황에서 연장 축소가 어떤 모습 일 수 있는지를 직접 목격했으며, 백 테스트가 그러한 기간이 발생할 것이라고 제안하더라도 유쾌하지 않다. 내가 "편견"이라고 불렀던 이유는 종종 그렇지 않은 전략이 연장 된 드래그 다운 시간에 거래가 중단되어 백 테스트에 비해 크게 부진 할 수 있다는 것입니다. 따라서 전략이 본질적으로 알고리즘이기는하지만 심리적 요인은 여전히 ​​수익성에 큰 영향을 줄 수 있습니다. 테이크 어웨이는 백 테스터에서 일정 비율 및 기간의 약정을 볼 경우 라이브 거래 환경에서 발생할 것으로 예상해야하며 수익성에 다시 도달하려면 인내해야합니다.
Backtesting을위한 소프트웨어 패키지.
전략 backtesting을위한 소프트웨어 경관은 광대합니다. 솔루션은 완벽하게 통합 된 기관 급의 정교한 소프트웨어부터 C ++, Python 및 R과 같은 프로그래밍 언어에 이르기까지 거의 모든 것이 처음부터 (또는 적절한 '플러그인'이 확보 된) 작성되어야합니다. 퀀트 트레이더로서 우리는 우리의 거래 기술 스택 대 개발 전략의 속도와 신뢰성을 "소유"할 수있는 균형에 관심이 있습니다. 다음은 소프트웨어 선택에 대한 주요 고려 사항입니다.
프로그래밍 기술 - 환경 선택은 대부분 소프트웨어를 프로그래밍 할 수있는 능력에 달려 있습니다. 나는 전체 스택을 제어하는 ​​것이 공급 업체 소프트웨어에 가능한 한 많이 아웃소싱하는 것보다 장기 P & L에 더 큰 효과가있을 것이라고 주장합니다. 이것은 벤더 소프트웨어에서 해결할 수없는 외부 버그 나 특이점을 가질 수있는 단점이 있기 때문입니다. 그렇지 않으면 "기술 스택"을보다 잘 제어 할 수 있다면 쉽게 해결할 수 있습니다. 또한 생산성, 라이브러리 가용성 및 실행 속도 사이에서 올바른 균형을 유지하는 환경이 필요합니다. 나는 아래에 나 자신의 개인적인 추천을한다. 실행 기능 / 브로커 상호 작용 - Tradestation과 같은 특정 백 테스팅 소프트웨어는 중개 회사와 직접 연결됩니다. 나는 트랜잭션 비용을 줄이는 것이 종종 더 높은 Sharpe 비율을 얻는 큰 구성 요소이기 때문에이 접근 방식의 팬이 아닙니다. 특정 브로커에 묶여 있다면 (Tradestation은 이것을 수행하도록 강제합니다.) 필요가 생기면 새로운 소프트웨어 (또는 새 브로커)로 전환하는 것이 더 힘들어집니다. 인터랙티브 중개인은 약간 둔한 인터페이스를 가지고 있지만 견고한 API를 제공합니다. 커스터마이징 - MATLAB 또는 Python과 같은 환경은 예상 가능한 거의 모든 수학 연산에 대해 환상적인 라이브러리를 제공 할뿐만 아니라 필요한 경우 광범위한 커스터마이징을 허용하여 알고리즘을 생성 할 때 상당한 유연성을 제공합니다. 전략의 복잡성 - 특정 소프트웨어는 엄청난 규모의 복잡성이나 수학적 복잡성 때문에 잘려나 가지 않습니다. Excel은 이러한 소프트웨어 중 하나입니다. 보다 단순한 전략에 유리하지만 많은 자산이나 복잡한 알고리즘을 빠르게 처리 할 수는 없습니다. 편향 최소화 - 소프트웨어 또는 데이터의 특정 부분이 거래 바이어스에 더 많이 도움이됩니까? 모든 기능을 직접 만들고 싶다면 편견을 유발할 수있는 버그가 있는지 확인해야합니다. 개발 속도 - 백 테스트 엔진을 구현하는 데 수개월이 걸릴 필요가 없습니다. 프로토 타이핑은 몇 주 밖에 걸리지 않습니다. 귀하의 소프트웨어가 귀하의 진보를 방해하지 않는지, 단지 몇 퍼센트의 실행 속도를 얻는 지 확인하십시오. C ++은 "방안의 코끼리"입니다! 실행 속도 - 전략이 실행 적시성 (HFT / UHFT 에서처럼)에 완전히 의존하는 경우 C 또는 C ++와 같은 언어가 필요합니다. 그러나이 기사의 범위를 벗어나는 이러한 도메인에 대한 Linux 커널 최적화 및 FPGA 사용에 대해 조사 할 예정입니다. 비용 - 알고리즘 거래 전략을 프로그래밍 할 수있는 많은 소프트웨어 환경은 완전히 무료이며 오픈 소스입니다. 사실, 많은 헤지 펀드는 전체 algo trading 스택을 위해 오픈 소스 소프트웨어를 사용합니다. 또한 Excel과 MATLAB은 모두 비교적 저렴하며 각각 무료 대안이 있습니다.
이제 우리는 소프트웨어 인프라를 선택해야하는 기준을 나열 했으므로 인기있는 패키지와 비교 방법을 살펴보고자합니다.
참고 : 대부분의 소매업 종사자 및 소프트웨어 개발자가 사용할 수있는 소프트웨어 만 포함 할 예정입니다. 이는이 사이트의 독자층이기 때문입니다. 기관용 등급 도구와 같은 다른 소프트웨어를 사용할 수는 있지만 소매 가격 환경에서는 이러한 소프트웨어가 너무 비싸고 개인적으로 경험이 없습니다.
라이센스 1,000 달러.
전략에 따라 다른 소프트웨어 패키지가 필요합니다. HFT 및 UHFT 전략은 C / C ++로 작성되며 (요즘은 GPU 및 FPGA에서 수행되는 경우가 많음), 반면에 저비용 방향성 지분 전략은 TradeStation에서 구현하기 쉽습니다. 소프트웨어 / 중개.
필자의 개인적 선호는 파이썬이 내 필요와 전략에 맞는 적절한 수준의 커스터마이즈, 개발 속도, 테스트 기능 및 실행 속도를 제공하기 때문입니다. 더 빠른 것이 필요한 경우 Python 프로그램에서 직접 C ++로 "끌어 들일"수 있습니다. 많은 퀀트 트레이더가 선호하는 한 가지 방법은 Python에서 전략을 프로토 타입하고 느린 실행 섹션을 반복적으로 C ++로 변환하는 것입니다. 결국 전체 algo는 C ++로 작성되었으며 "교역 용으로 남겨 둘 수 있습니다"!
backtesting에 대한 다음 몇 기사에서는 알고리즘 거래 backtesting 시스템의 구현을 둘러싼 특정 문제와 거래 교환의 효과를 통합하는 방법을 살펴볼 것입니다. 전략 성과 측정에 대해 논의하고 마지막으로 예제 전략으로 결론을 맺을 것입니다.
양적 거래 시작하기?
QuantStart 목록을 구독해야하는 3 가지 이유 :
1. 퀀트 트레이딩 레슨.
계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!
2. 모든 최신 내용.
매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.
현실감 넘치는 퀀 트레이딩 팁.

체계적인 거래 전략 개발 및 백 테스팅
당겨 요청 0.
오늘 GitHub에 가입하십시오.
GitHub은 코드를 호스팅하고 검토하고, 프로젝트를 관리하고, 소프트웨어를 함께 구축하기 위해 함께 일하는 2,000 만 명이 넘는 개발자들의 본거지입니다.
HTTPS로 복제하십시오.
Git을 사용하거나 웹 URL을 사용하여 SVN에서 체크 아웃하십시오.
Strategems는 알고리즘 / 체계적인 거래 전략을 개발, 테스트 및 최적화하는 프로세스를 간소화하고 능률화하기위한 Julia 패키지입니다. 이 패키지는 대부분 R의 quantstrat 1, 2 패키지에서 영감을 얻어 전략을 구성하는 빌딩 블록과 유사한 일반 구조를 채택합니다.
이벤트 중심의 트레이딩 전략 개발의 반복적 인 특성을 감안할 때 Julia의 고성능 디자인 (특히 루프의 맥락에서)과 간단한 구문은 체계적인 전략 연구 및 개발을위한 언어로서 자연스럽게 적합합니다. 이 패키지는 개발 초기에 남아 있지만 시간이 지남에 따라 거래 아이디어를 신속하게 구현하고, 역사적 백 테스트를 작성하고, 결과를 분석하고, 주어진 매개 변수 세트를 최적화하고, 모든 것을 매우 상세하게 시각화 할 수 있기를 희망합니다.
이 패키지는 Temporal 패키지의 TS 시간 시리즈 유형을 많이 사용하여 클리닝 & amp; 전략을 테스트 할 때 사용 된 데이터를 사전 처리합니다. 또한, 지표 패키지는 고도로 체계화 된 체계적인 거래 전략 연구 엔진의 목표를 염두에두고 작성 / 설계된 많은 기술 분석 기능을 제공하므로이 데이터로 작업하는 프로세스를 간소화해야합니다.
Strategems 패키지는 표준 Julia 패키지 관리자 기능을 사용하여 설치할 수 있습니다.
아래에는 Strategems. jl 패키지 디자인 및 연구 워크 플로를 용이하게하기 위해 사용되는 유형 정의와 관련하여 전략의 일반적인 해부학을 구성하는 기본 빌딩 블록이 있습니다.
Universe : encapsulation of the assets/securities the strategy is to be allowed to trade Indicator : calculation done on each asset in the universe whose results we think have predictive potential for future price movement ParameterSet : inputs/arguments to the indicator calculations Signal : boolean flag sending messages to the trading logic/rules to be interpreted and acted upon Rule : applications of trading logic derived from interpretations of prior calculations & signals at each time step Strategy : overarching object encapsulating and directing all of the above logic and data to power the backtesting engine.
Below is a quick example demonstrating a simple use-case that one might use to get acquainted with how the package works. Note that the custom infix operators denoted by the uparrow and downarrow below are defined in this package as another way of expressing that one variable crosses over another. The intention of this infix operator definition is to hopefully make the definition of a strategy more syntactically expressive and intuitive.
The key indicator used in this strategy is John Ehlers's MESA Adaptive Moving Average (or MAMA for short). This functionality is implemented in the Indicators. jl package described above, and outputs a Matrix (or TS object if one is passed as an input) of two columns, the first being the MAMA itself and the second being the FAMA , or following adaptive moving average.
This strategy simply goes long when the MAMA crosses over the FAMA , and goes short when the FAMA crosses over the MAMA . Below is an implementation that shows how to set default arguments to the Indicators. mama function and run a simple backtest using those parameters, and also define specified ranges over which we might like to see how the strategy behaves under different parameter sets.
Get a sufficiently full-featured type system established to facilitate easy construction of simple strategies Allow more intelligent logic for trading rules Adjust order sizing based on portfolio/account at time t Portfolio optimization logic Risk limits Stop loss rules Define a more diverse set of order types Limit orders Stop orders.
&부; 2017 GitHub, Inc. 용어 개인 정보 보안 상태 도움말.
현재이 작업을 수행 할 수 없습니다.
다른 탭이나 창을 사용하여 로그인했습니다. 새로 고침하여 세션을 새로 고침하십시오. 다른 탭이나 창에서 로그 아웃했습니다. 새로 고침하여 세션을 새로 고침하십시오.

Comments