Thursday 22 March 2018

거래 전략 코드


트레이딩 시스템 코딩.
Justin Kuepper 저.
자동화 된 거래 시스템은 어떻게 생성됩니까?
이 튜토리얼에서는이 프로세스의 두 번째 및 세 번째 부분에 초점을 맞춰 설명합니다. 여기서 규칙은 거래 소프트웨어가 이해하고 사용할 수있는 코드로 변환됩니다.
장점과 단점.
자동화 된 시스템은 거래에서 감정과 바쁜 업무를 취하므로 전략 및 자금 관리 규칙을 개선하는 데 주력 할 수 있습니다. 수익성있는 시스템이 개발되면 중단되거나 시장 상황에 변화가 필요할 때까지 작업을 할 필요가 없습니다. 단점 :
시스템이 올바르게 코딩되고 테스트되지 않으면 큰 손실이 매우 빠르게 발생할 수 있습니다. 때로는 특정 규칙을 코드에 넣는 것이 불가능하기 때문에 자동화 된 거래 시스템을 개발하기가 어렵습니다. 이 자습서에서는 자동화 된 거래 시스템을 계획하고 설계하는 방법, 이 디자인을 컴퓨터가 이해할 수있는 코드로 변환하는 방법, 최적의 성능을 보장하기위한 계획을 테스트하는 방법 및 마지막으로 시스템을 사용하는 방법에 대해 학습합니다.

거래 전략 코드
데모 전략 코드.
Jurik Research는 TradeStation의 샘플 거래 전략에 대한 수요가 커짐에 따라 TradeStation에서 실행되는 Easy Language로 13 가지 전략 모음을 제공합니다. 이 데모 연구는 자신의 전략에 포함시킬 수있는 Jurik Tools (JMA, VEL, RSX, DMX 및 CFB)를 적용하는 여러 가지 방법을 설명하기위한 자습서로 사용됩니다. 각 연구는 거래 로직, 검증을 위해 사용한 차트 및 매개 변수 설정, 열어서 읽고 수정할 수있는 쉬운 언어 코드에 대한 자세한 설명과 함께 완성됩니다.
아래에 표시된 것은 특정 시장에 적용된 이러한 전략의 스크린 샷입니다. 일부 스크린 샷에는 지표가 표시됩니다. 이 지표는 전략 모음에 포함되지 않습니다. 그러나 TradeStation 용 Jurik Tools를 구매할 때 이러한 사용자 정의 표시기가 무료로 제공됩니다. 무료 맞춤 표시기에 대한 자세한 내용은 여기를 참조하십시오.
데모 전략 모음을 주문하거나 Jurik Toolset을 업그레이드하는 방법에 대한 자세한 내용은이 페이지의 맨 아래로 이동하십시오.
차트의 다른 시간 프레임이 다른 결과를 생성 할 수 있습니다.
표시기 매개 변수 설정을 요청하지 마십시오. 모든 시장은 다릅니다.
모든 거래 시스템의 과거 실적은 결코 미래의 성과를 보장하지 않습니다.
모든 거래 전략에는 위험이 있으며 상품 / 선물 거래는 위험을 이용합니다.
이 데모 전략과 관련한 튜토리얼 세트는 사용자가 추가로 수정하지 않고 거래 할 수 있도록 설계되지 않았습니다. 예를 들어, 코드에는 대체 확인 신호 및 위험 관리와 같은 다양한 중요한 요소가 없습니다. 그것은 단지 튜토리얼을위한 것입니다.
JMA 패스트 - K 확률 적.
JMA 이중 확률론.
CFB 동적 오실레이터.
차트의 다른 시간 프레임이 다른 결과를 생성 할 수 있습니다.
표시기 매개 변수 설정을 요청하지 마십시오. 모든 시장은 다릅니다.
모든 거래 시스템의 과거 실적은 결코 미래의 성과를 보장하지 않습니다.
모든 거래 전략에는 위험이 있으며 상품 / 선물 거래는 위험을 이용합니다.
이 데모 전략과 관련한 튜토리얼 세트는 사용자가 추가 수정하지 않고도 거래 할 수 있도록 설계되지 않았습니다. 예를 들어, 코드에는 대체 확인 신호 및 위험 관리와 같은 다양한 중요한 요소가 없습니다. 그것은 단지 튜토리얼을위한 것입니다.
데모 전략의 전체 수집 가격은 $ 50입니다.
귀하의 상황을 가장 잘 나타내는 다음 조건 중 하나를 선택하십시오.
네 가지 기본 Jurik Tools가 모두없는 경우 누락 된 도구를 구입해야합니다. 구매하면 이미 보유한 다른 Jurik 도구가 자동으로 업데이트됩니다. 자세한 내용은 PLAN A로 이동하십시오.
네 가지 기본 Jurik 도구를 이미 갖고 있지만 2014 년 7 월 1 일 전까지 최신 업그레이드가 있었다면 도구가 최신 버전이 아닙니다. 전략 데모 모음을 설치하기 전에 업그레이드해야합니다. 자세한 내용은 PLAN B로 이동하십시오.
네 가지 기본적인 Jurik 도구 (JMA + VEL + CFB + RSX)가 모두 최신이라면 전략 세트 만 있으면됩니다. 계획 C로 이동하십시오.
이 그림은 삽화입니다. 활성 상태가 아닙니다. 실제 제품 부서 메뉴에 관한 왼쪽의 지침을 읽으십시오.
이 그림은 삽화입니다. 활성 상태가 아닙니다. 실제 제품 부서 메뉴에 관한 왼쪽의 지침을 읽으십시오.
이 그림은 삽화입니다. 활성 상태가 아닙니다. 실제 제품 부서 메뉴에 관한 왼쪽의 지침을 읽으십시오.

거래 전략 코드
시장에서 여전히 우위를 찾고 있다면 자동 거래 시스템이 최상의 방법입니다. 자세히 알아보기.
Copyright (c) 2010 Adaptrade Software. 판권 소유.
HYPOTHETICAL 또는 SIMULATED PERFORMANCE 결과에는 고유 한 내재 된 제한이 있습니다. 실제 성과 기록과 달리, 시뮬레이션 된 결과는 실제 거래를 나타내지 않습니다. 또한 거래가 실제로 실행되지 않았기 때문에 결과가 유동성 부족과 같은 특정 시장 요인에 영향을 미치거나 과다 또는 과소 보상을받을 수 있습니다. 시뮬레이션 된 거래 프로그램은 일반적으로 통보의 이익을 고려하여 설계되었다는 사실을 인정합니다. 어떠한 계정도 이익이나 손실을 달성 할 가능성이있는 것으로 나타나지 않습니다.
EasyLanguage와 TradeStation은 TradeStation Technologies, Inc. 의 등록 상표입니다.
지난 10 년간의 소매 거래에서 가장 큰 트렌드 중 하나는 자동 거래의 인기 증가입니다. 자동화 된 주문 실행이라고도하는 이러한 유형의 거래에서 거래 시스템에 의해 생성 된 매매 신호는 거래자의 중개 계좌에 연결된 플랫폼에 의해 자동으로 실행됩니다. 이를 통해 핸즈프리 거래가 가능해 지므로 실행 속도가 빠르고 오류가 적으며 빈도가 높은 전략으로 짧은 시간대를 거래 할 수 있습니다.
자동 코드 생성을 사용하여 거래 시스템을 구축하기위한 기본 알고리즘은 아래 그림 1과 같습니다. 거래 전략의 여러 요소를 결합하는 방법부터 시작합니다. 이러한 요소에는 이동 평균, stochastics 등과 같은 다양한 기술 지표가 포함될 수 있습니다. 다양한 유형의 출입 명령. 시장 진입 및 탈출을위한 논리적 조건
그림 1. 자동화 된 전략 수립을위한 기본 알고리즘.
서로 다른 요소들이 일관된 전략으로 결합 된 후에는 시장 또는 관심 대상 시장에서 평가할 수 있습니다. 이를 위해서는 각 시장에 대한 시장 데이터 (가격, 수량, 미결제 등)가 필요합니다. 일반적으로 각 전략의 순위를 매기거나 점수를 매기는 데 도움이되는 일련의 빌드 목표를 가지고 있습니다. 구축 목표의 예로는 순익, 인출, 승자의 비율, 수익 요인 등과 같은 다양한 성과 지표가 있습니다. 최소 2.0 이상의 수익 요소와 같은 최소 요구 사항 또는 순이익 극대화와 같은 최대 목표로 명시 할 수 있습니다.
자동 코드 생성의 이론적 근거.
위에서 설명한 것처럼 자동 코드 생성을 사용하여 거래 시스템을 구축하는 것이 본질적으로 최적화 문제입니다. 빌드 목표를 최대화하는 전략 요소의 조합이 최종 전략으로 간주됩니다. 일부 거래자는 시장 행동이나 행동에 대한 가설에 기초하여 거래 시스템을 구축해야한다는 것을 반대합니다. 시장이 어떻게 작동하는지에 대한 좋은 가설이 있다면 그 가설을 바탕으로 전략을 세우고 테스트 할 수 있습니다. 그것이 작동하면 가설을지지하고 전략 거래를 정당화합니다.
TradeStation 용 패턴 시스템 코드 생성기.
이 섹션에서는 TradeStation 용 트레이딩 시스템이 TradeStation 용 다른 패턴 기반 트레이딩 시스템을 자동으로 생성하는 자동 코드 생성에 대한 임시 접근 방식에 대해 설명합니다. AutoSystemGen 시스템은 지정된 성능 요구 사항 집합을 충족시키는 관련 매개 변수 값과 함께 일련의 거래 규칙을 검색합니다.
거의 모든 유형의 표시기 또는 거래 논리가 여기에 설명 된 거래 시스템 생성기에 포함될 수 있지만 상당히 단순하게 유지하기 위해 생성 된 시스템의 규칙은 가격 패턴으로 제한됩니다. 생성 된 거래 시스템의 각 입력 규칙은 다음 형식을 갖습니다.
이 과정의 핵심은 후보 거래 시스템을 찾는 것입니다. 시스템은 위에 표시된 양식의 규칙 1 개에서 10 개 사이로 구성 될 수 있습니다. 모든 규칙이 사실이라면 거래가 시장에 시작되고 거래는 나중에 일정 수의 바에서 종료됩니다. 이것이 최대 10 개의 규칙이있는 전통적인 TradeStation 시스템으로 코딩 된 경우 52 개의 입력이 있습니다. 이것은 성가신 전략을 만들 것입니다.
AutoSystemGen 시스템 및 관련 기능 코드는 무료 다운로드 페이지의 Breakout Futures (breakoutfutures /)에서 사용할 수 있습니다.
예를 들어, 30 년 만기 국채 선물 시장 (TradeStation 8의 기호 US. P)을 고려하십시오. AutoSystemGen은 OptStep 입력이 1에서 10000까지 증가한 T-bond 가격의 지난 20 년 동안 최적화되었습니다. 이것은 시스템이 10,000 개의 서로 다른 거래 시스템을 평가했음을 의미합니다. 최적화는 긴 거래의 경우 한 번, 짧은 거래의 경우 한 번 두 번 실행되었습니다. 다음 성능 요구 사항이 사용되었습니다. 최소 30,000 달러의 순 이익, 7500 달러 이하의 최악의 경우 감소, 최소 200 회 이상의 거래, 최소 50 %의 수익률 및 최소 1.2의 수익률이 사용되었습니다. Vista를 실행하는 듀얼 코어 컴퓨터에서 각 최적화를 실행하는 데 약 10 분이 걸렸습니다 (최적화 당 10,000 시스템).
System 2332, US. P, 9/17/2007 12:23:00, Long Trades.
순이익 = 53562.50, 최대 DD = -7381.25, 거래 횟수 = 250, 승리 비율 = 56.80, Prof factor = 1.631.
변수 : EntNext (거짓);
EntNext = Open [2] & gt; = Low [16].
닫기 [14] ≤ 낮음 [6] 및.
EntNext이면.
시장에서 다음 술집을 사세요.
BarsSinceEntry = 2이면.
시장에서 다음 바 판매;
System 5771, US. P, 9/17/2007 12:27:00, Long Trades.
순이익 = 42145.00, 최대 DD = -5733.75, 거래 횟수 = 207, 승리 비율 = 57.00, Prof factor = 1.631.
변수 : EntNext (거짓);
EntNext = 하이 [7] ≥ 로우 [19] 및.
닫기 [20] ≥ 닫기 [5] 및.
High [18]> Low [2] 및.
EntNext이면.
시장에서 다음 술집을 사세요.
BarsSinceEntry = 2이면.
시장에서 다음 바 판매;
시스템 7622, ​​US. P, 9/17/2007 12:29:00, Long Trades.
순이익 = 59348.75, 최대 DD = -7222.50, 거래 횟수 = 208, WINS = 60.58, Prof factor = 1.924.
변수 : EntNext (거짓);
EntNext = Low [2] ≤ High [9] 및.
열기 [11] & gt; = 열기 [18] 그리고.
EntNext이면.
시장에서 다음 술집을 사세요.
BarsSinceEntry = 3이면.
시장에서 다음 바 판매;
System 7718, US. P, 9/17/2007 12:29:00, Long Trades.
순이익 = 35526.25, 최대 DD = -6936.25, 거래 횟수 = 292, 승리 비율 = 56.85, Prof factor = 1.418.
변수 : EntNext (거짓);
EntNext = Close [3] & gt; = High [19]와.
High [6] ≤ Open [10] 및.
EntNext이면.
시장에서 다음 술집을 사세요.
BarsSinceEntry = 1이면.
시장에서 다음 바 판매;
System 6160, US. P, 9/17/2007 12:42:00, 짧은 거래.
순이익 = 31277.50, 최대 DD = -6846.25, 거래 횟수 = 369, 승리 비율 = 51.76, Prof factor = 1.297.
변수 : EntNext (거짓);
EntNext = 하이 [9] ≥ 로우 [6] 및.
닫기 [15] ≥ 하이 [8] 및.
High [7] ≤ Low [20] 및.
EntNext이면.
시장에서 짧은 다음 바 판매;
BarsSinceEntry = 1이면.
시장에서 다음 바를 충당하기 위해 구입하십시오.
각 시스템의 목록에는 시스템 번호 (OptStep 입력에 해당), 마켓 심볼, 현재 날짜 및 시스템이 long-only인지 또는 short-only인지가 포함됩니다. 다음 줄에는 각 시스템을 평가하는 데 도움이되는 몇 가지 요약 성능 통계가 포함되어 있습니다. 마지막으로 시스템 코드가 표시됩니다. TradeStation의 시스템을 평가하기 위해 두 개의 주석 행 () 사이의 코드를 복사하여 TradeStation의 전략에 붙여 넣은 다음 차트 창에서 실행할 수 있습니다.
출력 파일의 마지막 시스템은 짧은 시스템 (# 6160)입니다. TradeStation에서 전략으로 저장하고 동일한 T - 채권 차트에 적용하면 다음과 같은 형평 곡선이 생성됩니다.
그림 3. 시스템 AutoSystemGen에서 생성 한 거래 당 15 달러의 T - 채권에 대한 Short-only 시스템. 지난 20 년.
자동 코드 생성을위한 유전 프로그래밍.
이전 단원에서 설명한 임시 방편은 간단하지만 두 가지 제한이 있습니다. (1) 무작위로 생성 된 전략이 빌드 목표에 수렴하지 않음, (2) 패턴 시스템의 템플릿이 더 복잡한 전략으로 일반화하기 어렵다 . 이것은보다 정교한 접근법이 필요하다는 것을 의미합니다.
이 두 가지 문제를 모두 해결하는 자동 코드 생성 방법을 진화 알고리즘이라고하는 일련의 기술에 속하는 유전 프로그래밍 (GP)이라고합니다. 특히 진화 알고리즘과 GP는 생식과 진화의 생물학적 개념을 기반으로하는 인공 지능 연구원에 의해 개발되었습니다. GP 알고리즘은 무작위로 생성 된 구성원의 초기 모집단에서 거래 전략의 인구를 "발전"시킵니다. 인구의 구성원은 자신의 "적합성"에 따라 서로 경쟁합니다. 구성원은 신입 회원을 창출하기 위해 "부모"로 선택되며 약한 (덜 적합) 회원을 대신합니다.
기술 지표 및 전략 설계 지식에 대한 필요성을 줄입니다. GP 알고리즘은 개별 거래 규칙, 지표 및 기타 전략 요소를 선택합니다.
규칙 구축 프로세스는 비선형 거래 규칙을 포함하여 상당한 복잡성을 허용합니다.
GP 프로세스는 전통적인 전략 개발 프로세스에서 가장 노동 집약적이고 지루한 요소를 제거합니다. 즉, 새로운 거래 아이디어를 얻고, 프로그래밍하고, 코드를 검증하고, 전략을 테스트하고, 코드를 수정하고, 반복하는 것입니다. 이것은 모두 GP에서 자동으로 수행됩니다.
GP 프로세스는 편견이 없습니다. 대부분의 거래자들은 특정 지표 및 / 또는 거래 논리에 대해 또는 그에 대한 편향을 일으켰지 만, GP는 무엇이 작동하는지에 의해서만 안내됩니다.
적절한 거래 규칙 의미론을 통합함으로써 GP 프로세스는 논리적으로 정확한 거래 규칙과 오류없는 코드를 생성하도록 설계 될 수 있습니다.
GP 프로세스는 종종 고유하지만 명백하지 않은 결과를 생성합니다. 대부분의 경우 이러한 숨겨진 보석은 다른 방법으로 찾기가 거의 불가능합니다.
빌드 프로세스를 자동화함으로써 실행 가능한 전략을 개발하는 데 필요한 시간을 입력 가격 데이터 파일 및 기타 빌드 설정의 길이에 따라 수 주 또는 수개월에서 몇 분으로 단축 할 수 있습니다.
유전자 프로그래밍은 신호 및 이미지 처리, 프로세스 제어, 생물 정보학, 데이터 모델링, 프로그래밍 코드 생성, 컴퓨터 게임 및 경제 모델링 등 다양한 분야에서 성공적으로 사용되었습니다. 예를 들어 Poli et al. 2 재무에서 GP 사용에 대한 개요는 Chen이 제공합니다. 3 Colin 4는 거래 전략에 대한 규칙의 조합을 최적화하기 위해 GP를 사용하는 방법을 처음으로 설명했습니다.
코자. 유전 프로그래밍. MIT Press, Cambridge, MA. 1992.
R. Poli, W. B. Langdon 및 N. F. McPhee. 유전자 프로그래밍 분야 가이드. lulu를 통해 배포되고 gp-field-guide. org. uk, 2008에서 무료로 사용할 수 있습니다 (J. R. Koza의 기고).
Shu-Heng Chen (편집자). 전산 금융에서 유전 알고리즘과 유전 프로그래밍. Kluwer Academic Publishers, Norwell, MA. 2002.
A. 콜린. 금융 모델링을위한 유전 알고리즘, Edge on Trading. 1994, pages 165-168. John Wiley & amp; Sons, Inc. 뉴욕.
Risto Karjalainen. S & P 500 선물에 대한 진화하는 기술적 거래 규칙, Advanced Trading Rules, 2002, Pages 345-366. Elsevier Science, Oxford, 영국.
진 이브 스 Potvin, Patrick Soriano, Maxime Vallee. 유전 프로그래밍으로 주식 시장에서 거래 규칙 생성. 컴퓨터 & amp; Operations Research, Volume 31, Issue 7, 2004 년 6 월, 페이지 1033-1047.
Massimiliano Kaucic. 진화 학습 방법과 기술 규칙을 이용한 투자. European Journal of Operational Research, Volume 207, Issue 3, 2010 년 12 월 16 일, 페이지 1717-1727.
유전자 프로그래밍을 이용한 빌드 알고리즘.
이전에 제시된 빌드 알고리즘 (그림 1 참조)을 확장하면 유전 알고리즘을 기반으로 한보다 자세한 알고리즘이 그림 4에 나와 있습니다. 회색 음영 상자는 관심있는 시장에 대한 가격 데이터, 이른바 빌드 세트의 지표 및 주문 유형, 그리고 해당 시장의 가격 옵션 데이터에 의해 선택된 옵션 및 성능 기준 (빌드 목표)을 포함하는 입력 데이터를 나타냅니다. 사용자.
그림 4. 유전자 프로그래밍으로 자동 코드 생성을위한 빌드 알고리즘.
GP 프로세스는 진입 조건 및 진입 및 퇴장 명령과 같은 두 가지 필수 전략 요소를 동시에 진화시키는 데 사용할 수 있습니다. 엔트리 조건은 일반적으로 아래 그림 5와 같이 트리 구조로 표시됩니다.
유전 프로그래밍을 사용하여 진화하는 진입 및 퇴출 명령의 핵심은 일반화 된 방식으로 다양한 유형의 주문을 나타내는 것입니다. 예를 들어, stop 및 limit entry 가격은 다음과 같이 나타낼 수 있습니다.
유전 프로그래밍은 상당한 다양성을 가진 거래 전략을 생성 할 수 있지만, 따라야 할 전략에 대한 일반화 된 구조로 시작하는 것이 필요합니다. 아래에서 의사 코드로 표시된 전략 구조는 위에서 언급 한 것과 같은 진입 조건 및 주문 유형을 기반으로 전략을 수립하기위한 프레임 워크를 제공합니다.
입력 : N1, N2, N3, ...
position이 일정하고 LongEntryCondition이 true 인 경우
긴 입력 주문 ...
필요한 경우 긴 종료 주문 초기화 ...
position가 편평하고 ShortEntryCondition이 true 인 경우
짧은 주문 주문 ...
필요한 경우 짧은 이탈 명령 초기화 ...
위치가 길다면
긴 종료 주문 1 ...
긴 종료 주문 2 ...
자세가 짧은 경우.
짧은 출구 주문 1 ...
짧은 이탈 명령 2 ...
[선택 종료일 종료]
전략은 입력 목록으로 시작합니다. 표시기 매개 변수, 가격 패턴 룩백 길이 및 ATR의 룩 백 길이와 같은 입력 및 종료 명령에 필요한 매개 변수에 대한 입력이 제공됩니다.
전략적 건물에서 자동 코드 생성을 위해 유전 프로그래밍을 사용하는 방법을 설명하기 위해, 프로그램 Adaptrade Builder는 소규모 인구와 한정된 수의 세대를 대상으로 주식 인덱스 선물 시장의 일일 막대에서 운영되었습니다. 프로세스를 안내하기 위해 선택한 성과 메트릭스는 순익, 거래 수, 상관 계수, 통계적 유의성 및 수익률 / 수익률입니다. 거래 수 및 수익률 / 수익률에 대한 구체적인 목표가 설정되었습니다. 다른 선택된 측정 항목이 최대화되었습니다. 적합성 기능은 각 측정 항목에 대한 용어의 가중치 평균이었습니다.
그림 6. 표본 순이익이 1,000 달러 이상인 인구 집단의 비율.
유사하게, 인구의 OOS 순이익의 평균은 5 세대와 10 세대 후에 그림 7과 같이 증가했다. 이 결과는 OOS 순이익에 대한 것이다. 정의에 따르면, 샘플 밖의 데이터는 빌드에서 사용되지 않으므로 OOS 결과는 편향되지 않습니다. 그들은 뒤늦은 지혜에서 이익을 얻지 못한다. 이것은 GP 프로세스가 GP 알고리즘의 직접적인 효과 인 연속 세대에 걸친 샘플 내 결과를 향상시키는 경향이있을뿐만 아니라 OOS 결과도 전략이 발전함에 따라 향상되는 경향이 있음을 의미합니다. 이것은 고품질 빌드를 나타냅니다.
TradeStation의 EasyLanguage 전략 코드.
인구 회원 : 46.
만든 사람 : Adaptrade Builder 버전 1.1.0.0.
작성일 : 10/19/2010 2:19:52 PM.
TS 6 이상의 TradeStation 코드.
가격 파일 : C : \ TestData. txt.
변수 : EntCondL (거짓),
EntCondL = (가장 높은 (볼륨, NL1) & gt; = 가장 낮음 (볼륨, NL2)) 또는 (볼륨 & lt; 평균 (볼륨, NL3));
MarketPosition = 0이고 EntCondL이 시작되면.
XAverage (L, NBarEnL1) + EntFrL * ATREnL 정류장에서 다음 바 구매.
MarketPosition = 0이고 EntCondS가 시작되면.
Highest (H, NBarEnS1) - EntFrS * AbsValue (최저 (L, NBarEnS2) - 최저 (H, NBarEnS3))에서 다음 바로 가기 바 중지;
SStop = 전력 (10, 10);
MarketPosition & gt; 0으로 시작합니다.
BarsSinceEntry & gt; = NBarExL이면.
시장에서 다음 바 판매;
EntryPrice + TargFrL * ATRTargL 한도에서 다음 바 판매.
MarketPosition & lt; 0으로 시작합니다.
EntryPrice-C & gt; 그런 다음 ATRFrTrailS * ATRTrailS.
그러면 STrailOn이 시작됩니다.
NewSStop = EntryPrice - TrailPctS * (EntryPrice-C) / 100 .;
SStop = MinList (SStop, NewSStop);
BarsSinceEntry & gt; = NBarExS이면
시장에서 다음 바를 충당하기 위해 구입하십시오.
그렇다면 STrailOn.
SStop 정류장에서 다음 바를 덮기 위해 구입하십시오.
자동 코드 생성을 통한 거래 시스템 구축은 일종의 최적화입니다. 대부분의 체계적인 거래자는 전략에 대한 입력을 최적화하는 매개 변수 최적화에 익숙합니다. 매개 변수 최적화와 달리 자동 코드 생성은 전략의 거래 논리를 최적화합니다. 그럼에도 불구하고 매개 변수 최적화와 마찬가지로 자동 최적화 코드에 대한 과도한 최적화 또는 "과다 맞춤"의 위험이 자동 코드 생성에 중요합니다.
유전 프로그래밍을 이용한 거래 전략 수립 소프트웨어에 대한 정보는 여기를 클릭하십시오.
Adaptrade Software의 새로운 개발, 뉴스 및 특별 제안에 대한 정보를 얻으려면 당사 목록에 가입하십시오. 고맙습니다.
저작권 © 2004-2015 Adaptrade Software. 판권 소유.

R 상인.
Quantitative Finance에서 R 및 관련 도구 사용
& # 8216; Trading Strategies & # 8217;에 대한 아카이브 범주.
R을 IQFeed에 QuantTools 패키지로 연결.
IQFeed는 농업, 에너지 및 금융 시장을 포괄하는 스트리밍 데이터 서비스 및 거래 솔루션을 제공합니다. 소매 사용자 및 소규모 기관을 대상으로하는 잘 알려진 데이터 공급 업체입니다. 구독료는 약 $ 80 / 월부터 시작됩니다.
Stanislav Kovalevsky는 QuantTools라는 패키지를 개발했습니다. 양적 거래 모델링을 향상시키기 위해 설계된 일체형 패키지입니다. Yahoo, Google, Finam, MOEX 및 IQFeed와 같은 여러 소스에서 과거 시장 데이터를 다운로드하고 구성 할 수 있습니다. 가장 관심을 끄는 기능은 IQFeed를 R에 연결하는 기능입니다. 저는 몇 년 동안 IQFeed를 사용해 왔으며 이에 만족합니다 (저는 어떤 회사에서도 회사와 아무 관련이 없습니다). 방법). 자세한 내용은 여기를 참조하십시오. 나는 잠시 동안 R 내에서 통합을 찾고 있었지만 여기에 있습니다. 결과적으로 몇 가지 테스트를 마친 후에도 Python에 있던 코드를 R로 옮겼습니다. 완성을 위해 여기에 Python을 사용하여 IQFeed에서 기록 데이터를 다운로드하는 방법을 설명하는 링크를 제공합니다.
QuantTools는 네 가지 주요 기능을 제공합니다 : 시장 데이터 입수, 시장 데이터 저장 / 회수, 시계열 데이터 플롯 및 백 테스트.
먼저 IQfeed가 열려 있는지 확인하십시오. 매일 또는 일중 데이터를 다운로드 할 수 있습니다. 아래 코드는 2017 년 1 월 1 일부터 2017 년 6 월 1 일까지 SPY의 일일 가격 (개방, 고가, 저가, 마감)을 다운로드합니다.
아래 코드는 2017 년 5 월 1 일부터 2017 년 5 월 3 일 사이의 데이터를 다운로드합니다.
period 매개 변수에 유의하십시오. 틱, 1 분, 5 분, 10 분, 15 분, 30 분, 시간, 일, 주, 월 중 원하는 값을 취할 수 있습니다.
QuantTools는 진드기 마켓 데이터를 쉽게 관리하고 저장하는 프로세스를 만듭니다. 스토리지 매개 변수를 설정하기 만하면 바로 사용할 수 있습니다. 매개 변수는 저장하려는 날짜와 기호가있는 곳입니다. 더 많은 기호를 추가 할 수 있고 언제든지 저장 장치에 표시되지 않으면 QuantTools는 지정된 시작 날짜부터 데이터를 가져 오려고합니다. 아래 코드는 C : / Users / Arnaud / Documents / Market Data / iqfeed 디렉토리에 데이터를 저장합니다. 계측기별로 하나의 하위 폴더가 있으며 데이터는. rds 파일로 제공됩니다.
특정 날짜 사이에 데이터를 저장할 수도 있습니다. 위 코드의 마지막 행을 다음 중 하나로 바꾸십시오.
이제 저장된 데이터 중 일부를 되돌리고 싶다면 다음과 같이 실행하십시오.
진드기 만 로컬 저장소에서 지원되므로 기간은 & # 8216; tick & # 8217;이어야합니다.
QuantTools는 주말, 공휴일 및 야간 간격없이 시계열 데이터를 플로팅하는 plot_ts 함수를 제공합니다. 아래 예제에서 나는 먼저 위에 저장된 데이터를 검색 한 다음 처음 100 개의 가격 관측을 선택하고 마지막으로 차트를 그립니다.
두 가지주의 사항 : 첫 번째 스파이는 data. table 객체이므로 위의 구문을 사용하십시오. data. table 기능에 대한 간략한 개요를 보려면 DataCamp의 우수한 치트 시트를 살펴보십시오. 두 번째로 로컬 매개 변수는 데이터가 내부 저장소에서 검색 될 때 TRUE입니다.
QuantTools는 C ++ API를 사용하여 자신의 거래 전략을 작성할 수 있습니다. 기본적으로 C ++ 코드이므로이 부분을 자세히 설명하지 않을 것입니다. QuantTools 웹 사이트의 예제 섹션을 참조하십시오.
전반적으로이 패키지는 매우 유용하고 잘 문서화되어 있습니다. 누락 된 유일한 비트는 R과 IQFeed 사이의 라이브 피드로 실제 솔루션을 최종 솔루션으로 만듭니다.
평소처럼 모든 의견 환영합니다.
BERT : R Excel 연결의 신참입니다.
몇 달 전에 독자가 R과 Excel을 연결하는이 새로운 방법을 지적합니다. 나는이 문제가 얼마나 오랫동안 지속되었는지 알지 못한다. 그러나 나는 그것에 대해 전혀 알지 못했으며 블로그 게시물이나 기사를 보지 못했다. 그래서 도구가 실제로 가치가있는 것처럼 게시물을 쓰기로 결정했는데 누군가가 묻기 전에는 어떤 방식 으로든 회사와 관련이 없습니다.
BERT는 기본 Excel R Toolkit의 약자입니다. 무료 (GPL v2에 따라 라이선스가 있음)이며 Structured Data LLC에서 개발했습니다. 현재 BERT의 최신 버전은 1.07입니다. 자세한 내용은 여기를 참조하십시오. 보다 기술적 인 관점에서 볼 때 BERT는 Excel 스프레드 시트 셀에서 R 함수를 실행할 수 있도록 설계되었습니다. Excel 용어로, R에 사용자 정의 함수 (UDF)를 작성했습니다.
이 게시물에서 저는 R과 Excel이 BERT를 통해 어떻게 상호 작용하는지 보여주지 않을 것입니다. 여기, 여기, 여기 아주 좋은 자습서가 있습니다. 대신 BERT를 사용하여 제어 타워를 구축하는 방법을 보여 드리고자합니다. 내 거래를 위해서.
내 거래 신호는 긴 R 파일 목록을 사용하여 생성되지만 결과를 빠르고 효율적으로 표시하려면 Excel의 유연성이 필요합니다. 위에서 볼 수 있듯이 BERT는 나를 위해이 작업을 수행 할 수 있지만 필요에 맞게 응용 프로그램을 조정하고 싶습니다. XML, VBA, R 및 BERT의 기능을 결합하여 VBA 코드가 최소 인 Excel 파일 형태로 멋지면서도 강력한 응용 프로그램을 만들 수 있습니다. 궁극적으로 데이터베이스 관리, 신호 생성, 주문 제출 등 내 포트폴리오를 관리하는 데 필요한 모든 작업을 수집하는 단일 Excel 파일이 있습니다. 내 접근 방식은 아래의 세 단계로 세분화 될 수 있습니다.
XML을 사용하여 사용자 정의 메뉴 및 단추를 Excel 파일로 작성하십시오. 위의 메뉴와 버튼은 기본적으로 VBA 함수를 호출합니다. 이러한 VBA 함수는 BERT를 사용하여 정의 된 R 함수를 포괄합니다.
이 접근법을 통해 R, SQL 및 Python에 보관 된 코드의 핵심과 Excel, VBA & amp; XML. 다음 섹션에서는 이러한 접근 방식을 개발하기위한 전제 조건과 최소한의 VBA 코드로 R에서 Excel로 데이터를 단순히 전달하는 데 BERT가 어떻게 사용될 수 있는지 설명하는 단계별 가이드를 제시합니다.
1 & # 8211; 이 링크에서 BERT를 다운로드하여 설치하십시오. 설치가 완료되면 아래와 같이 단추가있는 Excel에 새 추가 기능 메뉴가 있어야합니다. 이것이 BERT가 Excel에서 구체화 된 방법입니다.
2 & # 8211; 사용자 지정 UI 편집기 다운로드 및 설치 : 사용자 지정 UI 편집기를 사용하면 Excel 리본에서 사용자 정의 메뉴 및 단추를 만들 수 있습니다. 단계별 절차가 여기에서 사용할 수 있습니다.
1 & # 8211; R 코드 : 아래의 R 함수는 설명의 목적으로 만 사용되는 매우 간단한 코드입니다. 선형 회귀 분석에서 잔차를 계산하여 반환합니다. 이것은 우리가 Excel에서 검색하고자하는 것입니다. 원하는 디렉토리에 myRCode. R이라는 파일 (다른 이름은 괜찮습니다)에 저장하십시오.
2 & # 8211; BERT의 function. R : Excel에서 Add-Ins - & gt; 홈 디렉토리를 열고 functions. R이라는 파일을 엽니 다. 이 파일에 다음 코드를 붙여 넣으십시오. 올바른 경로를 삽입했는지 확인하십시오.
이것은 위에서 만든 R 파일을 BERT로 가져 오는 것입니다. 그런 다음 파일 functions. R을 저장하고 닫습니다. 1 단계에서 만든 R 파일을 변경하려면 BERT 버튼 & # 8220; 시작 파일 다시로드 & # 8221;를 사용하여 다시로드해야합니다. Excel의 추가 기능 메뉴에서.
3 & # 8211; Excel에서 : myFile. xslm이라는 파일을 만들고 저장하십시오 (다른 이름은 상관 없습니다). 이 파일은 원하는 디렉토리에 저장 한 매크로 사용 가능 파일입니다. 파일이 저장되면 닫습니다.
4 & # 8211; 위에서 만든 파일을 사용자 정의 UI 편집기에서 엽니 다. 파일이 열리면 아래 코드를 붙여 넣습니다.
XML 편집기에서 다음과 같은 내용을 가져야합니다.
본질적으로이 XML 코드는 Excel 리본에 추가 메뉴 (RTrader), 새 그룹 (My Group) 및 사용자 정의 단추 (New Button)를 만듭니다. 일단 끝나면 Excel에서 myFile. xslm을 열고 사용자 정의 UI 편집기를 닫습니다. 너는 이와 비슷한 것을보아야한다.
5 & ​​# 8211; VBA 편집기 열기 : myFile. xlsm에서 새 모듈을 삽입하십시오. 아래 코드를 새로 만든 모듈에 붙여 넣으십시오.
그러면 새로운 결과를 처리하기 전에 워크 시트의 이전 결과가 지워집니다.
6 & # 8211; 새 버튼 클릭 : 이제 스프레드 시트로 돌아가서 RTrader 메뉴에서 & # 8220; 새 버튼 & # 8221;을 클릭하십시오. 단추. 아래에 보이는 것과 같은 것이 보일 것입니다.
위의 가이드는 BERT를 사용하여 달성 할 수있는 것의 아주 기본적인 버전이지만 여러 가지 특정 도구의 기능을 결합하여 사용자 지정 응용 프로그램을 빌드하는 방법을 보여줍니다. 필자의 관점에서 볼 때 이러한 접근법에 대한 관심은 R과 Excel을 분명하게 결합 할 수있는 능력뿐 아니라 Python, SQL 등의 XML 코드 (및 일괄 처리)를 통해 포함 할 수있는 능력이다. 이것은 내가 필요한 것입니다. 마지막으로 BERT에 대한 경험이있는 사람이 있는지 궁금 할 것입니다.
거래 전략 : 샘플 데이터를 최대한 활용합니다.
거래 전략을 테스트 할 때 공통적 인 접근 방법은 초기 데이터 세트를 샘플 데이터로 나누는 것입니다 : 모델의 교정을 위해 설계된 데이터 부분과 샘플 데이터가 부족한 경우 : 캘리브레이션의 유효성을 검사하고 성능을 보장하기 위해 사용되는 데이터 부분 샘플에서 생성 된 내용은 실제 세계에 반영됩니다. 일반적으로 초기 데이터의 약 70 %는 교정 (즉, 샘플)에 사용되며 30 %는 유효성 검사 (즉, 샘플 외)에 사용될 수 있습니다. 그런 다음 샘플 데이터의 내부 및 외부를 비교하면 모델이 충분히 견고한 지 여부를 결정하는 데 도움이됩니다. 이 게시물은 한 단계 더 나아가는 것을 목표로하고 샘플 데이터가 샘플에서 생성 된 것과 일치하는지 여부를 결정하는 통계적 방법을 제공합니다.
아래의 차트에서 파란색 영역은 내 전략 중 하나에 대한 샘플 성능이 좋지 않음을 나타냅니다.
간단한 육안 검사는 샘플 성능의 안팎에서 좋은 적합성을 보여 주지만이 정도의 확신은 어느 정도입니까? 이 단계에서는 별다른 문제가 아닙니다. 진정으로 필요한 것은 샘플 데이터 세트 안팎의 유사성을 측정하는 것입니다. 통계적으로 보면 이는 동일한 분포에서 나오는 표본 성과 수치에 대한 가능성으로 해석 될 수 있습니다. Kruskall-Wallis Test와 정확히 같은 비모수 통계 테스트가 있습니다. 이 테스트의 좋은 정의는 R-Tutor에서 찾을 수 있습니다. 데이터 샘플 모음은 관련없는 모집단에서 왔고 샘플이 서로 영향을주지 않으면 독립적입니다. Kruskal-Wallis Test를 사용하여 인구 분포가 정규 분포를 따르는 것으로 가정하지 않고 동일한지 여부를 결정할 수 있습니다. & # 8221; 이 테스트의 추가 이점은 정규 분포를 가정하지 않는 것입니다.
이 프레임 워크에 들어 맞는 동일한 특성의 다른 테스트가 있습니다. Mann-Whitney-Wilcoxon 테스트 또는 Kolmogorov-Smirnov 테스트는 여기에 설명 된 프레임 워크에 완벽하게 어울립니다. 그러나이 문서에서는이 테스트의 장단점에 대해 논의하지 않습니다. R 예제와 함께 좋은 설명을 여기서 찾을 수 있습니다.
위 차트와 분석을 생성하는 데 사용 된 코드는 다음과 같습니다.
위의 예에서 샘플 기간은 샘플 기간 외보다 길으므로 임의로 샘플 데이터의 1000 개의 하위 집합을 생성했으며 각 하위 집합의 샘플 데이터는 샘플 데이터와 동일한 길이를가집니다. 그런 다음 샘플 하위 집합에 대해 각각 샘플 하위 집합에 대해 테스트하고 p 값을 기록했습니다. 이 프로세스는 Kruskall-Wallis 테스트에 대한 단일 p 값을 생성하지 않고 분석을보다 강력하게 해주는 분포를 생성합니다. 이 예에서 p - 값의 평균은 영가설이 받아 들여 져야 함을 나타내는 영 (0.478)보다 훨씬 큽니다. 샘플 데이터의 안팎이 동일한 분포에서 나온다는 강력한 증거가 있습니다.
평소처럼이 포스트에서 제시된 것은 문제의 표면을 긁어 내고 개인의 필요에 맞춰야 만하는 장난감의 예입니다. 그러나 나는 그것이 샘플 결과를 평가하는 흥미롭고 합리적인 통계 틀을 제안한다고 생각한다.
이 게시물은 다음 두 개의 논문에서 영감을 얻었습니다.
Vigier Alexandre, Chmil Swann (2007), "유전 적으로 진화 된 무역 전략의 샘플 밖의 성과에 대한 다양한 최적화 함수의 효과", 금융 시장 전망 예측.
Vigier Alexandre, Chmil Swann (2010),«샘플 일관성의 개선 / 개선을위한 최적화 프로세스, 주식 시장 사례», JP Morgan Cazenove Equity Quantitative Conference, 런던 2010 년 10 월.
fidlr 소개 : Fiscal 데이터 LoadeR.
fidlr은 다양한 공급자로부터 재무 데이터 다운로드 프로세스를 단순화하도록 설계된 RStudio 애드 인입니다. 이 초기 버전은 quantmod 패키지의 getSymbols 함수에 대한 래퍼이며 Yahoo, Google, FRED 및 Oanda 만 지원됩니다. 아마도 시간이 지남에 따라 기능을 추가 할 것입니다. 평상시와 같이, 일종의 알림으로 : 소프트웨어는 어떠한 보증도하지 않고 & # 8221; & # 8221; & # 8221; & # 8221;
fidlr을 설치하고 사용하는 방법은 무엇입니까?
여기 Github 저장소에서 addin / package를 얻을 수 있습니다 (나중에 CRAN에 등록 할 것입니다). addin을 설치하십시오. RStudio Addins를 설치하는 훌륭한 튜토리얼이 있습니다. addin이 설치되면 Addin 메뉴에 나타나야합니다. 메뉴에서 fidlr을 선택하면 아래 그림과 같은 창이 나타납니다. 소스 드롭 다운 메뉴에서 데이터 제공 업체를 선택하십시오. 날짜 메뉴에서 날짜 범위 선택 도구 텍스트 상자에 다운로드하려는 기호를 입력하십시오. 여러 기호를 다운로드하려면 기호를 쉼표로 구분하여 입력하십시오. 라디오 버튼을 사용하여 CSV 파일 또는 글로벌 환경에서 악기를 다운로드할지 여부를 선택하십시오. csv 파일은 작업 디렉토리에 저장되며 악기 당 하나의 csv 파일이 있습니다. Run을 눌러 데이터를 가져 오거나 Close를 클릭하여 추가 기능을 닫습니다.
오류 메시지 및 경고는 기본 패키지 (quantmod 및 Shiny)가 처리하며 콘솔에서 읽을 수 있습니다.
이것은 프로젝트의 첫 번째 버전이므로 완벽을 기대하지는 않지만 잘하면 시간이 지남에 따라 개선 될 것입니다. 의견, 제안, 버그 등을 알려주십시오. & # 8230; tortradergmail.
R에서 가격 파일 데이터베이스 유지 보수.
양적 연구를하는 것은 많은 데이터 처리를 의미하며이를 달성하기 위해서는 깨끗하고 신뢰할 수있는 데이터가 필요합니다. 정말로 필요한 것은 (인터넷 연결 없이도) 쉽게 접근 할 수있는 깨끗한 데이터입니다. 가장 효율적인 방법은 CSV 파일 세트를 유지하는 것입니다. 분명히이 프로세스는 여러 가지 방법으로 처리 될 수 있지만 CSV 파일을 저장하고 업데이트하는 디렉토리를 유지 관리하는 데는 매우 효율적이고 간단한 초과 근무 시간이 필요했습니다. 저는 장비 당 하나의 CSV 파일을 가지고 있으며 각 파일은 그것이 들어있는 도구의 이름을 따서 붙여졌습니다. 내가 그렇게하는 이유는 두 가지입니다. 첫째, Yahoo, Google 등의 데이터를 다운로드 (가격)하고 싶지 않습니다. & # 8230; 새로운 아이디어를 테스트하고 싶을 때마다 문제를 확인하고 수정 한 후에는 다음 번에 동일한 도구가 필요할 때 다시해야한다고 생각합니다. 단순하지만 매우 효율적입니다. 프로세스는 아래 차트에 요약되어 있습니다.
다음에 나오는 모든 내용에서 야후의 데이터가 온다고 가정합니다. 코드는 Google, Quandl 등의 데이터에 맞게 수정해야합니다. & # 8230; 또한 일일 가격 데이터를 업데이트하는 과정을 제시합니다. 설정은 높은 빈도 데이터 및 다른 유형의 데이터 집합 (즉, 가격과 다를 경우)에 따라 다릅니다.
1 & # 8211; 초기 데이터 다운로드 (listOfInstruments. R & historicalData. R)
listOfInstruments. R 파일은, 모든 인스트르먼트의리스트만을 포함한 파일입니다.
악기가 내 목록의 일부가 아닌 경우 (즉, 내 데이터 폴더에 CSV 파일이없는 경우) 처음 사용하는 경우 초기 기록 데이터 세트를 다운로드해야합니다. 아래의 예는 Yahoo Finance에서 일간 ETFs 일일 가격을 2000 년 1 월로 다운로드하여 csv 파일에 저장합니다.
2 & # 8211; 기존 데이터 업데이트 (updateData. R)
아래 코드는 전용 폴더의 기존 파일에서 시작하여 모든 파일을 차례로 업데이트합니다. 나는 휴일을 제외하고는 보통 매일이 과정을 운영합니다. 새 악기를 추가하려면 위의 1 단계 만 실행하면됩니다.
3 & # 8211; 배치 파일 만들기 (updateDailyPrices. bat)
작업의 또 다른 중요한 부분은 위의 업데이트 프로세스를 자동화하는 배치 파일을 만드는 것입니다 (필자는 Windows 사용자 임). 이렇게하면 R / RStudio를 열고 거기에서 코드를 실행할 수 있습니다. 아래 코드는. bat 파일에 있습니다 (경로는 독자의 설정으로 수정해야합니다). 실행을 추적하기 위해 출력 파일 (updateLog. txt)을 추가했습니다.
위의 프로세스는 일별 가격 데이터를 업데이트하는 방법 만 설명하기 때문에 매우 간단합니다. 나는 이것을 잠시 동안 사용 해왔고, 지금까지 나를 위해 매우 원활하게 작업 해왔다. 고급 데이터 및 / 또는 높은 주파수의 경우 상황이 훨씬 더 까다로워 질 수 있습니다.
평소처럼 모든 의견 환영합니다.
양적 포트폴리오 관리의 요인 평가.
주식 포트폴리오와 벤치 마크를 관리 할 때 문제는 절대 수익 전략을 정의하는 것과 매우 다릅니다. 이전의 경우에는 기회가 충분하지 않은 경우 주식을 보유 할 수없는 곳보다 더 많은 주식을 보유해야합니다. 그 이유는 추적 오류 때문입니다. 이것은 포트폴리오 수익의 표준 편차에서 벤치 마크 수익을 뺀 값으로 정의됩니다. 벤치 마크와 비교하여 주식이 적게 들고 추적 오류가 높아질수록 위험도가 높아집니다.
다음의 분석은 주로 액티브 포트폴리오 관리 (Active Portfolio Management)의 책에서 영감을 얻었습니다. Grinold & amp; 칸. 이것은 벤치 마크를 기준으로 포트폴리오를 운영하는 데 관심이있는 사람을위한 성경책입니다. 나는이 주제에 관심이있는 누구나 처음부터 끝까지 책을 읽도록 강력히 권합니다. 그것은 잘 쓰여지고 체계적인 능동적 인 포트폴리오 관리의 토대를 둡니다 (저는 편집인이나 저자에게 아무런 관련이 없습니다).
여기서 우리는 투자 수익을 가능한 한 정확하게 계량화하려고 노력하고 있습니다. 많은 사람들이 여러 가지 도구를 생각해 냈으며이를 달성하기 위해 수많은 도구가 개발되었습니다. 이 포스트에서는 정보 계수 (IC)와 퀀텀 리턴 (QR)이라는 두 가지 간단하고 널리 사용되는 메트릭에 중점을 둡니다.
이 IC는 요인 예측 능력에 대한 개요를 제공합니다. 좀 더 정확히 말하자면, 이것은 요인이 순 수익률 기준으로 주식을 얼마나 잘 평가했는지를 측정 한 것입니다. IC는 메트릭 (예 : 요소)과 순방향 수익 사이의 순위 상관 관계 (ρ)로 정의됩니다. 통계적 측면에서 순위 상관 관계는 두 변수 사이의 종속성에 대한 비모수적인 척도입니다. 크기 n의 샘플에 대해, n 개의 원시 스코어는 랭크로 변환되고, ρ는 다음으로부터 계산됩니다.
순방향 수익의 지평선은 분석가가 정의해야하며 전략의 회전율과 알파 붕괴의 기능입니다 (광범위한 연구 주제였습니다). 분명히 IC는 가능한 한 절대적으로 높아야합니다.
예리한 독자를 위해, Grinold & amp; Kahn은 Information Ratio (IR)와 IC를 연결하는 수식을 제공합니다 : 폭은 독립 베팅 (거래)의 수입니다. 이 수식은 능동적 관리의 기본법으로 알려져 있습니다. 문제는 종종 폭을 정확하게 정의하는 것이 쉽지 않다는 것입니다.
요인 예측치의보다 정확한 추정을하기 위해서는 더 나아가 단계별로 나아가고 요인 값의 분위수를 그룹화하는 것이 필요하다. 그런 다음 각 요소의 평균 순 수익률 (또는 기타 중심 경향 메트릭)을 분석한다. quantiles. 이 도구의 유용성은 간단합니다. 요인은 좋은 IC를 가질 수 있지만 예측력은 소수의 주식에만 국한 될 수 있습니다. 포트폴리오 관리자가 추적 오류 제한 조건을 충족시키기 위해 전체 우주에서 주식을 선택해야하므로 좋지 않습니다. 좋은 분위수 수익률은 개별 분위수와 순 수익률 간의 단조로운 관계로 특징 지워집니다.
S & amp; P500 지수의 모든 주식 (서면 작성 당시). 분명히 생존 선박에 편향이있다. 지수의 주식 목록은 샘플 기간의 시작과 끝 사이에 크게 변경되었지만 설명 목적으로 만 충분하다.
아래의 코드는 S & P500에서 2005 년 1 월부터 오늘까지 개별 주가를 다운로드하고 (다소 시간이 걸립니다) 지난 12 개월 및 지난 달 동안의 원가를 수익으로 전환합니다. 전자는 우리의 요소이며, 후자는 전방 반환 수단으로 사용됩니다.
아래는 정보 계수 및 수량 반환을 계산하는 코드입니다. 이 예제에서는 5 분위수를 사용했지만 다른 그룹화 방법 (terciles, deciles 등)을 사용할 수 있습니다. 샘플 크기, 캡처하고자하는 대상 및 배포 테일에 대한 전반적인 개요 또는 초점을 원하는 경우에 따라 달라집니다. 각 5 분위 내에서의 수익을 산정하기 위해, 중앙값 추산치로 중간 값을 사용했다. 이 측정 값은 산술 평균보다 특이 값에 훨씬 덜 민감합니다.
마지막으로 Quantiles Return 차트를 생성하는 코드입니다.
3 & # 8211; 위의 정보를 이용하는 방법은 무엇입니까?
상기 차트에서 Q1은 12 개월 후 가장 낮았고 Q5는 가장 높았습니다. Q1과 Q5 사이의 분위수 수익은 거의 단조롭게 증가하여 Q5로 떨어지는 주가가 Q1에 떨어지는 주가가 매월 약 1 % 씩 뛰어나다는 것을 분명하게 나타냅니다. 이는 단순한 요소에 대해 매우 중요하고 강력합니다 (실제로 놀랍지는 않습니다.). 따라서 Q5에 해당하는 주식의 비중 확대와 벤치 마크 대비 Q1에 대한 비중 축소를 통해 지수를 상향 조정할 가능성이 더 높다.
0.0206의 IC는 그 자체로 많은 것을 의미하지는 않지만 0과 크게 다르며 과거 12 개월 동안의 좋은 예측력을 나타냅니다. 공식적인 유의성 테스트는 평가할 수 있지만이 내용은이 기사의 범위를 벗어납니다.
위의 프레임 워크는 투자 요소의 품질을 평가하는 데 탁월하지만 실생활 구현을 위해 해결해야 할 실질적인 제한 사항이 많습니다.
리 밸런싱 (Rebalancing) : 위의 설명에서 매월 말에 포트폴리오는 완전히 균형을 맞춘 것으로 가정합니다. 이는 Q1에 ​​속하는 모든 주식이 비중 축소이고 Q5에 속하는 모든 주식이 벤치 마크 대비 과체중이라는 것을 의미합니다. 실용적인 이유 때문에 항상 가능한 것은 아닙니다. 일부 주식은 투자 영역에서 제외 될 수 있으며, 산업 또는 업종의 체중에 제약이 있고, 회전율 등에 제약이 있습니다 & # 8230; 거래 비용 : 이것은 위의 분석에서 고려되지 않았으며 이는 실제 구현에 심각한 장애가됩니다. 회전율 고려 사항은 일반적으로 요인의 품질에 대한 불이익의 형태로 실생활에서 구현됩니다. 이양률 : 능동적 인 경영의 기본법을 확장 한 것으로 Grinold의 모델 가정은 관리자가 투자 통찰력을 포트폴리오 베팅으로 직접 전환하지 못하도록 제한하지 않는다는 가정을 완화합니다.
마지막으로, R & # 8230;을 사용하여 80 줄 미만의 코드에서 달성 할 수있는 것에 놀랐습니다.
평소처럼 모든 의견 환영합니다.
생존 변수로서의 위험 & # 8221;
나는 블로고 스피어에 많은 전략을 제시한다. 흥미로운 것들은 시간 낭비이다. 그러나 대부분의 사람들은 공통적 인 특징을 공유한다 : 그 전략을 개발하는 사람들은 수익을 분석하는 관점에서 숙제를하지만, 위험 측면에는 훨씬 덜주의를 기울인다. 그것의 임의성. 나는 2011 년에 25 %의 수익 감소를 보였으 나 전체적으로 우수한 수익을 올린 것과 같은 코멘트를 보았습니다. 글쎄 내 베팅은 지구상의 누구도 특별한 협약이없는 한 돈으로 25 %의 손실을 경험하게 할 것입니다. 헤지 펀드 세계에서 사람들은 인출에 대한 내약성이 매우 낮습니다. 일반적으로 헤지 펀드의 새로운 상인으로서 평판이 없다고 가정하면 자신을 증명할 시간이 거의 없습니다. 1 일부터 돈을 벌고 몇 달 동안 계속해서 신뢰를 얻으십시오.
First let’s say you have a bad start and you lose money at the beginning. With a 10% drawdown you’re most certainly out but even with a 5% drawdown the chances of seeing your allocation reduced are very high. This has significant implications on your strategies. Let’s assume that if you lose 5% your allocation is divided by 2 and you come back to your initial allocation only when you passed the high water mark again (e. g. the drawdown comes back to 0). In the chart below I simulated the experiment with one of my strategies.
You start trading in 1st June 2003 and all goes well until 23rd Jul. 2003 where your drawdown curve hits the -5% threshold (**1**). Your allocation is cut by 50% and you don’t cross back the high water mark level until 05th Dec. 2003 (**3**). If you have kept the allocation unchanged, the high water mark level would have been crossed on 28th Oct. 2003 (**2**) and by the end of the year you would have made more money.
But let’s push the reasoning a bit further. Still on the chart above, assume you get really unlucky and you start trading toward mid-June 2003. You hit the 10% drawdown limit by the beginning of August and you’re most likely out of the game. You would have started in early August your allocation would not have been cut at all and you end up doing a good year in only 4 full months of trading. In those two examples nothing has changed but your starting date….
The trading success of any individual has some form of path dependency and there is not much you can do about it. However you can control the size of a strategy’s drawdown and this should be addressed with great care. A portfolio should be diversified in every possible dimension: asset classes, investment strategies, trading frequencies etc…. From that perspective risk is your “survival variable”. If managed properly you have a chance to stay in the game long enough to realise the potential of your strategy. Otherwise you won’t be there next month to see what happens.
As usual any comments welcome.
A Simple Shiny App for Monitoring Trading Strategies – 파트 II.
This is a follow up on my previous post “A Simple Shiny App for Monitoring Trading Strategies“. I added a few improvements that make the app a bit better (at least for me!). Below is the list of new features :
A sample. csv file (the one that contains the raw data) A “EndDate” drop down box allowing to specify the end of the period. A “Risk” page containing a VaR analysis and a chart of worst performance over various horizons A “How To” page explaining how to use and tailor the app to individual needs.
I also made the app totally self contained. It is now available as a stand alone product and there is no need to have R/RStudio installed on your computer to run it. It can be downloaded from the R Trader Google drive account. This version of the app runs using portable R and portable Chrome. For the keen reader, this link explains in full details how to package a Shiny app into a desktop app (Windows only for now).
1 & # 8211; How to install & run the app on your computer.
Create a specific folder Unzip the contain of the. zip file onto that new folder. Change the paths in the runShinyApp file to match your setings To run the app, you just have launch the run. vbs file. I also included an icon (RTraderTradingApp. ico) should you want to create a shortcut on your desktop.
ui. R: controls the layout and appearance of the app server. R: contains the instructions needed to build the app. You can load as much strategies as you want as long as the corresponding csv file has the right format (see below). shinyStrategyGeneral. R: loads the required packages and launches the app.
3 & # 8211; How to add a trading strategy?
Create the corresponding. csv file in the right directory Create a new input in the data reactive function (within the server. R file) Add an extra element to the choice parameter in the first selectInput in the sidebarPanel (within the ui. R file). The element’s name should match the name of the new input above.
Remove the input in the data reactive function corresponding to the strategy you want to remove (within the server. R file) Remove the element in the choice parameter in the first selectInput in the sidebarPanel corresponding to the strategy you want to remove (within the ui. R file).
Please feel free to get in touch should you have any suggestion.
A Simple Shiny App for Monitoring Trading Strategies.
In a previous post I showed how to use R, Knitr and LaTeX to build a template strategy report. This post goes a step further by making the analysis interactive. Besides the interactivity, the Shiny App also solves two problems :
I can now access all my trading strategies from a single point regardless of the instrument traded. Coupled with the Shiny interactivity, it allows easier comparison. I can focus on a specific time period.
The code used in this post is available on a Gist/Github repository. There are essentially 3 files.
ui. R : controls the layout and appearance of the app. server. R : contains the instructions needed to build the app. It loads the data and format it. There is one csv file per strategy each containing at least two columns: date and return with the following format: (“2010-12-22″,”0.04%” ). You can load as much strategies as you want as long as they have the right format. shinyStrategyG eneral. R : loads the required packages and launches the app.
This app is probably far from perfect and I will certainly improve it in the future. Feel free to get in touch should you have any suggestion.
A big thank you to the RStudio/Shiny team for such a great tool.
Using Genetic Algorithms in Quantitative Trading.
The question one should always asked him/herself when using technical indicators is what would be an objective criteria to select indicators parameters (e. g., why using a 14 days RSI rather than 15 or 20 days?). Genetic algorithms (GA) are well suited tools to answer that question. In this post I’ll show you how to set up the problem in R. Before I proceed the usual reminder: What I present in this post is just a toy example and not an invitation to invest. It’s not a finished strategy either but a research idea that needs to be further researched, developed and tailored to individual needs.
What are genetic algorithms?
The best description of GA I came across comes from Cybernatic Trading a book by Murray A. Ruggiero. “Genetic Algorithms were invented by John Holland in the mid-1970 to solve hard optimisation problems. This method uses natural selection, survival of the fittest”. The general process follows the steps below:
Encode the problem into chromosomes Using the encoding, develop a fitness function for use in evaluating each chromosome’s value in solving a given problem Initialize a population of chromosomes Evaluate each chromosome in the population Create new chromosomes by mating two chromosomes. This is done by muting and recombining two parents to form two children (parents are selected randomly but biased by their fitness) Evaluate the new chromosome Delete a member of the population that is less fit than the new chromosome and insert the new chromosome in the population. If the stop criteria is reached (maximum number of generations, fitness criteria is good enough…) then return the best chromosome alternatively go to step 4.
From a trading perspective GA are very useful because they are good at dealing with highly nonlinear problems. However they exhibit some nasty features that are worth mentioning:
Over fitting: This is the main problem and it’s down to the analyst to set up the problem in a way that minimises this risk. Computing time : If the problem isn’t properly defined, it can be extremely long to reach a decent solution and the complexity increases exponentially with the number of variables. Hence the necessity to carefully select the parameters.
There are several R packages dealing with GA, I chose to use the most common one: rgenoud.
Daily closing prices for most liquid ETFs from Yahoo finance going back to January 2000. The in sample period goes from January 2000 to December 2010. The Out of sample period starts on January 2011.
The logic is as following: the fitness function is optimised over the in sample period to obtain a set of optimal parameters for the selected technical indicators. The performance of those indicators is then evaluated in the out of sample period. But before doing so the technical indicators have to be selected.
The equity market exhibits two main characteristics that are familiar to anyone with some trading experience. Long term momentum and short term reversal. Those features can be translated in term of technical indicators by: moving averages cross over and RSI. This represents a set of 4 parameters: Look-back periods for long and short term moving averages, look-back period for RSI and RSI threshold. The sets of parameters are the chromosomes . The other key element is the fitness function . We might want to use something like: maximum return or Sharpe ratio or minimum average Drawdown. In what follows, I chose to maximise the Sharpe ratio.
The R implementation is a set of 3 functions:
fitnessFunction : defines the fitness function (e. g., maximum Sharpe ratio) to be used within the GA engine tradingStatistics : summary of trading statistics for the in and out of sample periods for comparison purposes genoud : the GA engine from the rgenoud package.
The genoud function is rather complex but I’m not going to explain what each parameter means as I want to keep this post short (and the documentation is really good).
In the table below I present for each instrument the optimal parameters (RSI look-back period, RSI threshold, Short Term Moving Average, and Long Term Moving Average) along with the in and out of sample trading statistics.
Before commenting the above results, I want to explain a few important points. To match the logic defined above, I bounded the parameters to make sure the look-back period for the long term moving average is always longer that the shorter moving average. I also constrained the optimiser to choose only the solutions with more than 50 trades in the in sample period (e. g;, statistical significance).
Overall the out of sample results are far from impressive. The returns are low even if the number of trades is small to make the outcome really significant. However there’s a significant loss of efficiency between in and out of sample period for Japan (EWJ) which very likely means over fitting.
This post is intended to give the reader the tools to properly use GA in a quantitative trading framework. Once again, It’s just an example that needs to be further refined. A few potential improvement to explore would be:
fitness function : maximising the Sharpe ratio is very simplistic. A “smarter” function would certainly improve the out of sample trading statistics pattern : we try to capture a very straightforward pattern. A more in depth pattern research is definitely needed. optimisation : there are many ways to improve the way the optimisation is conducted. This would improve both the computation speed and the rationality of the results.
The code used in this post is available on a Gist repository.

No comments:

Post a Comment