R 거래 전략


R 거래 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
R : 거래 전략을 역행하십시오. Quantumod와 R. 에 초보자.
나는 R에 매우 익숙하며 WealthLab에서 이미 프로그래밍 한 전략을 다시 테스트하려고합니다.
내가 이해하지 못하는 몇 가지 것들 (그리고 그것은 분명히 작동하지 않습니다 :)
가까운 가격을 멋지게 벡터에 넣지는 않습니다. 또는 어떤 종류의 벡터지만 구조로 시작하고 나는이 함수가 무엇을하는지 정말로 이해하지 못한다. 그게 내 시리즈 [, 1] 호출이 아마 작동하지 않는 이유입니다.
n - nrow (series)도 작동하지 않지만 Loop에 필요합니다.
그래서이 두 가지 질문에 대한 답변을 얻으려면 내 전략이 효과가 있다고 생각합니다. 어떤 도움을 주셔서 감사합니다. R은 다른 언어로 프로그래밍 경험을해도 매우 복잡해 보입니다.
두 번째 질문부터 시작합니다.
따라서 실제 xts 객체에서 작업하려면 get을 사용해야합니다.
귀하의 첫 번째 질문에 대해 - 나는 당신이 정말로 벡터로 데이터를 가져올 필요가 없다고 생각합니다 - xts 객체는 날짜별로 인덱싱 된 배열이며 작업하기 쉽습니다. 그래도 데이터를 얻으려면 사용할 수 있습니다.
이제 전략의 간단한 백 테스트를 시작하려면 다음 단계를 수행하는 것이 좋습니다.
전략을 정의하십시오. 2. 배열을 생성하거나 각 요일의 위치를 ​​나타내는 열을 xts 객체에 추가하십시오. 1은 길고, 0은 위치가 없으며 -1은 짧습니다 (나중에는 레버리지 번호로 게임을 할 수 있습니다). 3. 매일의 수익을 포지션과 곱하면 전략의 리턴 벡터를 얻을 수 있습니다. 4. 결과를 검토하십시오 - 내 추천은 PerformanceAnalytics입니다.
간단한 전략 - SMA20을 닫을 때 구매하십시오.

FOSS 거래.
무료 오픈 소스 소프트웨어로 알고리즘 트레이딩.
2011 년 3 월 26 일 토요일.
R에서 전략을 백 테스팅하는 방법.
quantmod의 getSymbols 함수는 Yahoo Finance의 일일 데이터를 사용할 수있는 경우이 단계를 쉽게 만듭니다. 또한 다른 소스 (FRED, Google, Oanda, R 저장 파일, 데이터베이스 등)에서 데이터를 가져 오는 "방법"(엄격한 의미가 아님)이 있습니다. 템플릿을 사용하여 사용하는 특정 공급 업체에 대한 사용자 지정 함수를 작성할 수도 있습니다.
2 단계 : 표시기를 만듭니다.
TTR 패키지에는 다양한 지표가 포함되어 있습니다. 지표는 독창적이고 자유로운 방법으로 쉽게 결합 할 수 있도록 작성되었습니다. R-forge의 개정 106부터 TTR에는 DVI 표시기가 있습니다.
3 단계 : 거래 규칙을 수립하십시오.
이 거래 규칙은 간단하기 때문에 DVI가 0.5 이하이면 100 %로 길고 그렇지 않으면 100 %로 짧습니다. 단 한 줄로 작성할 수 있습니다. 보다 정교한 규칙 및 / 또는 위치 설정을 수행 할 수도 있지만 더 많은 코드가 필요합니다 (위치 크기 지정을 사용하는 RSI (2)는 더 복잡한 위치 크기 조정 규칙의 예입니다). 또한 신호 벡터가 뒤떨어져있어 미리보기 바이어스를 피할 수 있습니다.
4 단계 : 거래 규칙 / 형량 곡선.
Damian의 예에서와 같이, 아래 코드는 마찰이없고 슬립을 고려하지 않은 단순화 된 접근법입니다. 아래 코드는 오늘의 백분율을 반환하고 어제의 신호 / 위치 크기 (이 예제에서는 항상 +/- 100 %)로 곱합니다. 또한 Excel 파일의 결과와 일치하도록 시스템 반환을 하위 집합으로 지정합니다.
5 단계 : 전략 성과를 평가합니다.
Damian은 전략 평가의 중요성에 대해 언급했습니다. 다행스럽게도 R 사용자의 경우 PerformanceAnalytics 패키지를 사용하면이 작업을 쉽게 수행 할 수 있습니다. 몇 줄의 코드를 사용하여 코드 단편, 단점 위험 및 성능 요약을 볼 수 있습니다.
그게 바로 R에서 간단한 전략을 뒷받침하는 것입니다. 협박하는 것이 아니 었나요? Excel에서 R로 backtesting을 옮길 경우 의견을 남기십시오. 끊어 지거나 공유하고 싶은 멋진 팁이 있습니다.

R 튜토리얼의 알고리즘 트레이딩.
이번 포스트에서는 R을 사용하여 loyal3에 나열된 주식을 수집하고 Yahoo의 과거 데이터를 얻은 다음 간단한 알고리즘 거래 전략을 수행하는 방법을 보여 드리겠습니다. 길을 따라, 당신은 웹 스크래핑, 금융 API를 타격하는 함수, 대화 형 시계열 차트를 만들기위한 html 위젯을 배울 것입니다.
이 게시물의 경우 거래 알 고는 예측 모델 또는 시계열 예측 대신 구매 또는 판매 이벤트를 트리거하는 규칙 집합으로 정의됩니다. 이것은 거래 알 고의 가장 단순한 유형이지만, R을 사용하여 재무에 대해 더 깊이 파고 드는 데 관심이있는 경우 R에서 양적 거래 전략을 모델링 할 때 DataCamp†™ 과정을 수강 할 것을 권장합니다.
배경.
2015 년에 나는 충성스럽게 조금 투자하기 시작했습니다 .3. 그들의 서비스는 평범하지 않으며 투자 여정을 시작하기에 좋은 곳입니다. loyal3은 거래를 위해 투자자를 부과하기보다는 회사가 자신의 플랫폼에 등록하도록 청구합니다. 전제는 company†™ s 서비스를 좋아하는 사람들이 또한 주식을 사기 때문에 이렇게하는 것은 강한 상표 옹호자가된다이다. 플랫폼을 더욱 매력적으로 만드는 것은 분수 공유를 구입할 수 있다는 것입니다. 그래서, 당신은 그 달 말에 약간의 여분의 현금을 가질 때마다 단 $ 10에 대해 800 달러의 아마존 주식을 얻을 수 있고 또 다른 $ 10 분수를 살 수 있습니다. 창문에서 거래해야하고 전체 포트폴리오가 제한되어 있으므로 마찰 비용이 있습니다.
70 주식이지만 loyal3은 재미 있고 저렴한 비용으로 주식 트레이닝을 탐구합니다. 10 달러 정도면 게임에 실제 스킨을 넣을 수 있습니다!
분명히하기 위하여, 나는 전형적인 은퇴와 투자 계정이있다 그러나 나는 app에 loyal3†™ s 청결한 공용 영역을 좋아하고 요금의 부족을 좋아한다. 나는 직접적으로 선택한 주식의 성과를 보는 것이 쉽고 재미 있기 때문에 단순히 나의 뮤추얼 펀드보다 재미있는 로얄 3 포트폴리오를 점검하는 것으로 끝납니다.
loyal3에서 사용할 수있는 주식.
작업 공간 설정.
시작하려면 라이브러리를 환경에로드하십시오. 요즘 웹 스크랩을 위해 거의 항상 rvest를 사용합니다. RSelenium을 포함하여 작동하는 다른 패키지가 있지만, 나는 쉬운 rvest가 실행될 수있는 것을 좋아한다.
두 번째 패키지 인 pbapply는 적용 기능에 진행률 표시 줄을 추가하기 때문에 선택 사항입니다. 수백 개의 웹 페이지를 고칠 수 있으므로 진행률 막대를 사용하면 시간을 예측하는 데 도움이됩니다.
다음으로, TTR은 방금 탐구하기 시작한 패키지입니다. 라이브러리는 기술 거래 규칙을 구성하는 데 사용됩니다. 이 게시물에서 간단한 거래 알 고를 배우게되지만, TTR 패키지는보다 정교한 계산을 수행 할 수 있으며 학습 가치가 있습니다.
dygraphs 라이브러리는 빠르고 개방적인 소스 JavaScript 차트 라이브러리의 래퍼입니다. R 차트를보다 동적으로 만들고 정적 이미지 대신 HTML 파일의 일부로 만드는 htmlwidgets 중 하나입니다. 마지막으로, lubridate 패키지는 쉬운 날짜 조작을 위해 사용됩니다.
데이터 수집.
모든 충성스런 주식은 모두 한 페이지에 나열됩니다. 개별 일일 주가를 조사하여 거래 알고리즘을 작성하려면 먼저 사용 가능한 모든 Stocker Ticket을 수집해야합니다. 먼저 할 일은 stock. list를 URL 문자열로 선언하는 것입니다. 그런 다음 R 세션이 인터넷 세션을 만들고 페이지의 모든 HTML 정보를 XML 노드 집합으로 수집 할 수 있도록 read_html ()을 사용합니다. 페이지 CSS에는 “pany-name†called라고하는 ID가 있습니다. 이 노드와 연관된 XML 데이터 만 선택하기 위해 html_nodes ()를 호출 할 때이를 매개 변수로 사용하십시오. 마지막으로 html_text ()를 사용하여 회사 이름의 실제 텍스트 값을 수집합니다.
loyal3에서 사용할 수있는 주식을 검사하려면 stocks. names 개체를 콘솔에 인쇄 할 수 있습니다. 그러면 회사 이름이 텍스트 벡터로 반환됩니다.
주가를 조사하기 위해서는 먼저 증권 시세 기호를 알아야합니다. loyal3 사이트에있는 경우 회사 타일을 클릭하여 시세 표시 기호 및 기타 회사 정보가있는 페이지를로드 할 수 있습니다.
주식에 html_nodes ()를 사용하면 “a. †marked로 표시된 모든 노드를 가져옵니다. HTML에서 & lt; a & gt; 태그는 양식을 다른 페이지로 연결하는 데 사용되는 하이퍼 링크를 정의합니다. 하이퍼 링크 태그 내에서 “href†the는 정확한 URL 주소를 나타냅니다. 따라서 html_attr ()은 “href†pass를 전달하면 페이지의 모든 링크에 대한 URL을 추출합니다.
몇 가지 수동 검사를 수행 한 후 페이지의 54 번째에서 123 번째 링크가 티커 정보를 긁어 내기 위해 필요한 회사 페이지를 나타내는 것으로 나타났습니다. 마지막 줄은 paste0 ()을 사용하여 기본 URL 문자열 †™ loyal3`을 “ / WALMART†like와 같은 특정 회사 페이지에 연결합니다. 예를 들어, loyal3 / WALMART :
각 회사 페이지에는 설명, 최근 마감 가격 및 시세가 있습니다. 모든 회사 페이지는 동일하게 구성되어 있으므로 사용자 정의 함수 get. ticker ()를 사용하여 티커 심볼을 추출 할 수 있습니다.
company†™ s 웹 페이지 안에 “ticker 가격 †called이라고 칭한 테이블이있다. 이 함수는 회사 페이지로 이동하여 해당 테이블을 식별하고 html_text ()로 텍스트를 추출합니다. 마지막으로 정규 표현식 ^ ([[: alpha :]] *). * 및 \\ 1과 함께 sub ()를 사용하면 모든 알파벳 문자가 유지됩니다. 그 결과 $와 같은 특수 문자와 종가와 같은 모든 숫자가 제거됩니다. 함수는 70 페이지 각각을 읽으므로 주식 시세표 만 수집합니다.
알리바바에 대한 loyal3 주식 페이지는 в ™ ™의 증권 시세 표시기 인 BABA가 들어있는 테이블을 볼 수 있으며 굵게 표시된 텍스트 아래에 있습니다.
사용자 정의 함수로 무장 한 pblapply ()를 사용하여 각 company†™ s 페이지가 포함 된 stock. links에이를 적용하십시오. 결과 객체 인 stock. tickers는 개별 주식 시세 표시기의 목록으로 각 요소는 개별 회사에 해당합니다.
요소 목록을 평면 객체로 변경하는 한 가지 방법은 do. call ()을 사용하는 것입니다. 여기서는 rbind를 적용하여 각 목록 요소를 단일 벡터에 바인딩합니다. 마지막으로 기호 및 회사 이름 정보가있는 데이터 프레임을 만듭니다.
분석에서 일관성을 유지하려면 각 주식에 대해 수집 한 기록 정보의 양을 제한하고 싶을 수 있습니다. Sys. Data () 함수는 년, 월, 일로 날짜 개체를 저장합니다. integer와 함께 년을 사용하면 start. date 객체에서 특정 시간을 빼는 방법 중 하나입니다.
야후 재무 데이터를 얻으려면 날짜 개체를 대시가없는 간단한 문자 개체로 변경해야합니다. start. date 및 end. date에서 전역 대체 함수 gsub ()를 사용하면 클래스가 변경되고 동시에 대시가 제거됩니다. gsub () 내에서 검색 할 문자 패턴을 전달한 다음 대체 문자를 전달합니다. 이 경우 대체 패턴은 따옴표 사이의 빈 문자입니다. 마지막 매개 변수는 gsub ()가 적용될 객체입니다.
TTR () 함수 getYahooData ()는 주식 기호와 시작 날짜와 종료 날짜를 허용합니다. 이 함수는 시계열 정보가있는 데이터 프레임을 반환합니다. 각 행은 날짜이며 열은 “pen”, “igh вњќ ќќќќќќќќќќќќќќќќќќќќќ equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity equity................................... 여러 회사를 찾고 있기 때문에 lapply () 또는 pblapply ()를 사용할 수 있습니다. 회사 심볼의 벡터를 전달한 다음 getYahooData () 함수를 전달한 다음 날짜 정보를 전달합니다. date 객체는 getYahooData ()가 주식 기호에 적용될 때마다 재활용 된 매개 변수입니다.
반환 된 목록을 선택하려면 stocks. ts를 쉽게 탐색 할 수 있으며 목록 요소에 이름을 추가 할 수 있습니다. stocks. ts 객체에 이름을 사용하면 이름이 원래 $ 기호 벡터로 선언됩니다.
큰 목록으로 작업 할 때 결과 객체가 예상 한 결과인지 확인하려고합니다. 요소의 이름이 지정되었으므로 요소를 직접 참조 할 수 있습니다. 이 예제에서는 AMC Entertainment Holdings (AMC)의 처음 6 행을 검토합니다. $ AMC를 참조하면서 목록에서 head ()를 사용하면이 주식에 대한 시계열의 일부가 반환됩니다.
주식 데이터 검사.
금융 뉴스를 듣는 경우 종종 해설자가 차트를 참조합니다. 높은 빈도의 거래와 다른 사람들에 의한 능동적 인 관리에도 불구하고 많은 소규모 투자자들은 여전히 ​​통찰력을 얻기 위해 차트를 참조합니다. 플롯을 사용하여 시계열 객체를 빠르게 표시 할 수 있습니다. $ AMC와 같은 명명 된 요소를 참조한 목록을 전달한 다음 표시하려는 열 (여기서는 $ Close)을 전달합니다.
위의 그림은 정적이며 매우 흥미로운 것은 아닙니다.
Let†™는 당신이 탐구 할 수있는 도표를 만들기 위하여 JavaScript 도서관을 이용한다. 이 코드 스 니펫에서는 “ % & gt; % ” 또는 파이프 연산자를 볼 수 있습니다. 파이프 연산자는 간결한 코드를 작성하는 좋은 방법입니다. 이 게시물에서 이전에했던 것처럼 개체 이름을 다시 쓰지 않아도 개체를 다음 함수로 전달합니다.
이 예에서는 트위터 주식 $ TWTR을 표시하는 대화 상자를 작성한 다음 $ Close로 그려야 할 열을 작성합니다. dygraph에서 main은 따옴표 사이에 지정된 제목을 추가합니다. “ % & gt; % ”을 사용하여이 전체 객체는 다음 함수 dyRangeSelector ()로 전달됩니다. c ()를 시작 및 종료 날짜 문자열과 함께 사용하여 기본 날짜 범위를 지정할 수 있습니다. 결과 HTML 객체는 Twitter†™ 주식의 동적 시계열이며 하단에 날짜 슬라이더가 있습니다.
표시된 자산을 변경하려면 stocks. ts 목록의 시세 표시 기호를 변경 한 다음 그래프 제목을 변경하십시오.
이것은 Twitter†™ s 주식을위한 기본적인 dygraph이다.
간단한 무역 전략 : 추세 다음.
고 빈도 거래자와 헤지 펀드는 정교한 모델과 규칙 기반 접근법을 사용하여 거래를 수행합니다. 더 많은 것을 배우고 싶다면 퀀토 피안 (quantopian)을 고급 접근 방식으로 방문하는 것이 좋습니다. 보다 간단한 접근법은 Investopedia에서이 페이지로 시작하십시오.
아래 코드에서 간단한 모멘텀 트레이딩 전략을 시각화합니다. 기본적으로 주식 가격에 대한 200 일 이동 평균과 50 일 이동 평균을 계산할 것입니다. 50 일 이동 평균이 200 일 이동 평균을 초과하는 특정 일에 대해서는 포지션을 구입하거나 보유 할 것입니다. 200 일 평균이 50 일 이동 평균보다 많은 날에는 주식을 매각해야합니다. 이 전략을 추세 추적 전략이라고합니다. 두 시간 기반 평균 사이의 양 또는 음의 성질은 stock†™ s의 모멘텀을 나타냅니다.
TTR 패키지는 단순 이동 평균 계산을 위해 SMA ()를 제공합니다. 이 코드 스 니펫에서는 Twitter†™ s 200 및 50 일 이동 평균의 처음 6 개 값을 검사합니다. SMA ()는 주식의 시계열 데이터와 Close와 같은 특정 열을 전달하여 작동합니다. 이것은 TWTR 주식의 종가를 결정하는 단일 벡터입니다. 두 번째 매개 변수는 이동 평균에 대한 관측 수를 나타내는 정수입니다. head ()를 사용하지 않으면 SMA () 함수가 모든 값을 반환합니다.
이제 이동 평균 함수를 자세하게 살펴 보았으므로 70 개의 주식 각각에 적용해야합니다. stocks. ts는 개별 주식 데이터가 포함 된 70 개의 데이터 프레임 목록입니다. 각 데이터 프레임의 네 번째 열에는 이동 평균에 사용할 마감 가격이 포함되어 있습니다.
사용자 정의 함수 mov. avgs ()는 이동 평균을 계산하기 위해 하나의 주식 데이터 프레임을 허용합니다. 첫 번째 행은 [, 4]를 인덱싱하여 stock. close를 작성하기 때문에 종가를 선택합니다. 다음 함수는 ifelse를 사용하여 데이터 프레임의 행 수를 확인합니다. 특히 데이터 프레임의 nrow가 (2 * 260)보다 작 으면이 함수는 вњ with moving로 이동 평균의 데이터 프레임을 만듭니다.
1 년에 약 250 일 거래가 있기 때문에이 번호를 선택했습니다. 따라서 시계열이 약 2 년 이상인지 확인합니다. Loyal3은 때때로 IPO에 액세스 할 수 있으며 주식이 새로 공개되면 200 일 이동 평균에 대한 데이터가 충분하지 않습니다. 그러나 nrow 값이 2 * 260보다 크면이 함수는 원래 데이터와 함께 200 및 50 일 이동 평균과 함께 새 열로 데이터 프레임을 만듭니다. colnames를 사용하여 열 이름을 선언합니다. 함수의 마지막 부분은 complete. cases를 사용하여 200 일 이동 평균 열의 값을 확인합니다. 값이없는 행은 최종 결과에서 제외됩니다.
이 mov. avgs () 함수로 무장 한 pblapply ()를 사용하여 이동 평균 계산을 70 개의 데이터 프레임 각각에 추가 할 수 있습니다.
dygraph를 사용하여 stock†™ s moving average를 시각화하려면 아래 코드를 사용하십시오. 다시 한번, 이 코드는 вњњ % & gt; % ” 연산자를 사용하여 객체를 전달합니다. dygraph () 함수는 stocks. ts $ FOX 데이터 프레임을 허용합니다. 구체적으로, 데이터 프레임은 c ( 'sma_200', 'sma_50')로 열 이름으로 인덱싱됩니다. 이 객체는 다음 2 줄의 dySeries ()에 전달됩니다. dySeries ()가 2 행과 3 행의 вњњsma_50” 및 “sma_200” 값에 대한 선을 그릴 수 있도록 이름으로 열을 참조 할 수 있습니다. 이 객체는 selector†™ s 높이를 조정하기 위해 dyRangeSelector ()로 다시 전달됩니다. 마지막으로 주식을 매입하거나 보유하고 싶었던 기간과 주식을 매각 했어야하거나 주식을 매각해야하는 기간을 정의하기 위해 음영을 추가했습니다.
다음은 대화 형 시계열의 최종 결과입니다.
FOX는 음영 지역을 평균으로 매수 / 매도 대 매도로 이동합니다.
결론.
신진 알고리즘 트레이더로서 70 개의 모든 주식을 그릴 필요가 없습니다. 대신, 매일 코드를 실행하고 규칙 기반 방법에 맞는 주식을 식별하는 프로그램 방식을 추가하는 것이 좋습니다. 50 일 이동 평균이 200 일 이동 평균보다 높으면 “buy입니다. 위의 차트를 검토 할 때 녹색 부분은 FOX 에퀴티를 구입할 때입니다. 빨간색 섹션은 주식을 매각하고 재 입력하지 않는 시간을 나타냅니다.
그래프는 대화 형이므로 슬라이더를 사용하여 비주얼의 크기를 조정할 수 있습니다. 이 간단한 거래 거래 접근법을 기반으로 지금 FOX를 살 좋은 시간이 될 것입니다! 2016 년 12 월 30 일은 50 일 이동 평균이 200 일 이동 평균보다 0.01 달러 더 오른 거래일이었습니다!
폭스 형평의 확대 된 부분.
물론 모든 투자가 가치를 잃을 수 있음을 기억하십시오. 재정 및 골동품 거래에 대해 더 자세히 알기를 원하시면, 여기 DataCamp†™ 코스를 확인하십시오.

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 일부터 돈을 벌고 몇 달 동안 계속해서 신뢰를 얻으십시오.
먼저 나쁜 출발을하고 처음에는 돈을 잃어 버리라고합니다. 10 %의 인출을 실시하면 5 %의 인출으로도 배당률이 줄어드는 확률이 매우 높습니다. 이것은 당신의 전략에 중요한 영향을 미칩니다. 5 %를 잃게되면 할당량이 2로 나뉘며 최고점을 다시 통과 한 경우에만 초기 할당으로 되돌아갑니다 (예 : 인출액이 다시 0으로 돌아 간다). 아래 차트에서 필자는 내 전략 중 하나를 사용하여 실험을 시뮬레이션했습니다.
2003 년 6 월 1 일부터 거래가 시작되며 2003 년 7 월 23 일까지 수익률 곡선이 -5 %의 기준점 (** 1 **)에 도달 할 때까지 모두 잘 진행됩니다. 할당량이 50 % 줄 었으며 2003 년 12 월 5 일 (** 3 **)까지 최고 수위 표시를 가로 지르지 않았습니다. 할당을 변경하지 않은 채로 유지한다면, 최고급 레벨은 2003 년 10 월 28 일 (** 2 **)에 지나치게 될 것이고 연말에는 더 많은 돈을 벌었을 것입니다.
그러나 추론을 조금 더 추진하겠습니다. 위의 차트에서 여전히 실망 스럽다고 가정하고 2003 년 6 월 중순 경에 거래를 시작할 것입니다. 8 월 초에 10 %의 인하 한도에 도달 했으므로 게임에서 거의 벗어날 가능성이 큽니다. 8 월 초에 배당을 시작했을 텐데, 배당금이 전혀 삭감되지는 않았을 것이고 결국 4 개월 만에 좋은 해를 보게 될 것입니다. 이 두 예에서 아무것도 변경되지 않았지만 시작 날짜는 & # 8230;입니다.
어떤 개인의 거래 성공에는 어떤 형태의 경로 의존성이 있으며 그것에 대해 할 수있는 일이별로 없습니다. 그러나 당신은 전략의 축소를 조절할 수 있으며 이것은주의 깊게 다루어 져야합니다. 포트폴리오는 가능한 모든 차원에서 다양 화되어야합니다 : 자산 클래스, 투자 전략, 거래 빈도 등. 그러한 관점에서 볼 때 위험은 생존 변수입니다. 제대로 관리된다면 전략의 잠재력을 깨닫기에 충분히 오래 게임에 머무를 수 있습니다. 그렇지 않으면 다음 달에 어떤 일이 일어나는지 보지 못할 것입니다.
평소처럼 모든 의견 환영합니다.
모니터링 전략을위한 간단한 반짝이는 응용 프로그램 & # 8211; 파트 II.
이것은 이전 게시물 "모니터링 전략을위한 간단한 반짝이는 응용 프로그램"의 후속 작업입니다. # 8220; 몇 가지 개선 사항을 추가하여 앱을 조금 개선했습니다 (적어도 나를 위해!). 다음은 새로운 기능 목록입니다.
샘플. csv 파일 (원시 데이터가 들어있는 파일) A & # 8220; EndDate & # 8221; 드롭 다운 상자에서 기간의 끝을 지정할 수 있습니다. & # 8220; 위험 & # 8221; 페이지에는 VaR 분석 및 다양한 시야에 대한 최악의 성능 차트가 포함되어 있습니다. How To & # 8221; 개별 요구에 맞게 앱을 사용하고 조정하는 방법을 설명하는 페이지
나는 또한 앱을 완전히 자체적으로 만들었다. 이제 독립 실행 형 제품으로 제공되며 R / R Studio를 실행하기 위해 컴퓨터에 R / R Studio를 설치할 필요가 없습니다. R Trader Google 드라이브 계정에서 다운로드 할 수 있습니다. 이 앱 버전은 휴대용 R 및 휴대용 Chrome을 사용하여 실행됩니다. 예리한 독자를 위해이 링크에서는 Shiny 앱을 데스크톱 앱에 패키지하는 방법을 자세히 설명합니다 (현재 Windows 만 해당).
1 & # 8211; & amp; 설치 방법 컴퓨터에서 앱을 실행하십시오.
특정 폴더 만들기. zip 파일의 포함을 해당 새 폴더에 압축을 풉니 다. runShinyApp 파일의 경로를 설정과 일치하도록 변경 앱을 실행하려면 run. vbs 파일을 실행하기 만하면됩니다. 바탕 화면에 바로 가기를 만들고 싶다면 아이콘 (RTraderTradingApp. ico)도 포함 시켰습니다.
ui. R : 앱 서버의 레이아웃과 모양을 제어합니다. R : 앱을 작성하는 데 필요한 지침이 포함되어 있습니다. 해당 CSV 파일의 형식이 올바른 경우 전략을로드 할 수 있습니다 (아래 참조). shinyStrategyGeneral. R : 필요한 패키지를로드하고 앱을 실행합니다.
3 & # 8211; 거래 전략을 추가하는 방법?
올바른 디렉토리에 해당. csv 파일 만들기 (server. R 파일 내) 데이터 리 액션 함수에 새 입력 만들기 sidebarPanel (ui. R 파일 내)의 첫 번째 selectInput에서 choice 매개 변수에 추가 요소를 추가합니다. . 요소의 이름은 위의 새 입력 이름과 일치해야합니다.
제거하려는 전략 (server. R 파일 내)에 해당하는 데이터 리 액션 함수에서 입력을 제거합니다. 제거하려는 전략에 해당하는 sidebarPanel의 첫 번째 selectInput에서 choice 매개 변수의 요소를 제거합니다 (UI 내에서)..R 파일).
제안이 있으면 언제든지 연락하십시오.
모니터링 전략을위한 간단한 반짝이는 응용 프로그램.
이전 글에서는 R, Knitr 및 LaTeX를 사용하여 템플릿 전략 보고서를 작성하는 방법을 설명했습니다. 이 게시물은 분석을 대화 형으로 만들어 한 단계 더 나아갑니다. 상호 작용 외에도 Shiny App은 두 가지 문제를 해결합니다.
트레이드 된 장비와 상관없이 이제 모든 단일 거래 내역에 액세스 할 수 있습니다. 반짝이는 상호 작용과 결합되어보다 쉽게 ​​비교할 수 있습니다. 특정 기간에 집중할 수 있습니다.
이 게시물에 사용 된 코드는 Gist / Github 저장소에서 사용할 수 있습니다. 기본적으로 3 개의 파일이 있습니다.
ui. R : 앱의 레이아웃과 모양을 제어합니다. server. R : 앱을 빌드하는 데 필요한 지침이 포함되어 있습니다. 데이터를로드하고 형식을 지정합니다. 전략 당 하나의 csv 파일이 있습니다. 각 파일에는 적어도 두 개의 열이 있습니다. 날짜와 수익 형식은 (& # 8220; 2010-12-22 & # 8221; 0.04 % & # 8221;)입니다. 올바른 형식을 유지하는 한 원하는만큼 전략을로드 할 수 있습니다. 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.

Comments

Popular posts from this blog

Tableau 외환 파리

Rfq 거래 시스템

시드니 포레스트 pty ltd