기본 콘텐츠로 건너뛰기

令和5年5月3日気になるニュース

yahooニュース 産経新聞、首相「腹を割って意見交換」 7、8日に訪韓し尹大統領と会談  岸田文雄首相は1日(日本時間2日)、7~8日の日程で韓国を訪問し、尹錫悦(ユン・ソンニョル)大統領と会談する方向で調整(ちょうせい)していると明らかにした。訪問先(ほうもんさき)のガーナで記者団の取材に答えた。首相は尹氏が3月に来日(らいにち)した際(さい)、首脳同士が相互(そうご)に訪問する「シャトル外交」の再開(さいかい)で合意(ごうい)しており、その第1弾(いちだん)となる。 続いて、日本政府は4月28日に韓国を輸出手続き簡略化などの優遇措置の対象国となる「グループA(旧ホワイト国)」に再指定(さいしてい)する方針を発表したが、首相の訪韓(ほうかん)で成果(せいか)を示(しめ)せるかが焦点(しょうてん)になると書いていました。 日韓関係が改善されているようでうれしい記事でした。

AFML chapter 2. Standard Bar의 지정

금융시장의 미시적 구조










금융시장에는 다양한 시장 참여자들이 존재한다. 당장 한국의 주식 시장만 보더라도, 소위 개미로 불리우는 개인 투자자와 국민연금과 같은 기관, 고객들의 자산을 맡아 관리하는 자산운용사들과 수많은 대형 투자자들 등이 존재한다.

매수 매도 호가창을 보면, 그들이 지금까지 행한 거래기록와 bid ask information을 볼 수 있는데, 이 정보에는 각각의 시장 참여자들의 개인적인 전략이 숨어 있는 private information을 포함하고 있다.

Bid Ask tick을 통해 Daily Data로는 볼 수 없는 정보를 추출해낼 수 있다.


Bar

매수매도 주문와 장부를 통계학적으로 해석하기 위해서는 정규화된 형태로 저장해야 한다. 시계열 데이터를 통계적으로 해석할 수 있는 데이터로 만들기 위해서는 정상성을 띈 데이터로 변환을 해야 하는데, 많은 문헌에서 시간을 기준으로 한 Bar 보다 Volume과 Dollar Value를 기준으로 추출한 표본이 정규성과 정상성에서 더욱 강건한 경향을 보였다.

저자인 Prado 교수는 기존 문헌에서 많이 사용되는 표준 바와 더불어, Information driving bar 또한 소개하고 있다.


표준 바

Time Bar

시간 바는 고정된 시간 간격으로 정보를 표본 추출하여 생성한다. Python Library 혹은 KODEX 등에서 데이터를 구매하면 가장 기본적으로 구성된 정보의 형태이다. 저자인 Prado 교수는 다음과 같은 이유로 사용을 자제하는 것을 권장한다

  • 시장은 정보를 일정한 시간 간격으로 처리하지 않는다
  • 시간에 따라 추출된 시계열 자료는 종종 좋지 않는 통계적 성질을 보인다.

Tick Bar


틱 바의 기본적인 아이디어는 간단하다. 사전에 정해둔 거래 건수를 넘어갈 때마다 추출하는 것이다. 이렇게 하면 정보의 도착과 표본 추출을 동기화할 수 있다. 경험적으로는 600틱 정도가 좋은 듯 하다.
틱 바를 구성할 때에는 Outlier에 주의해야 한다. 많은 거래소에서 장 시작과 장 종료에 대량 장외가 거래를 수행한다. 이 시점에서 행해지는 거래는 하나의 틱이라도 정보량만 보면 수천개의 틱과 맞먹을 수 있다.

import FinancialMachinieLearning as fml
threshold = 600
tick_df = fml.bar_sampling(df, 'price', threshold, tick = True)
fml.plot_sample_data(xdf, xtdf, 'Tick Bar', alpha = 0.5, markersize = 7)



Volume Bar

틱 바의 문제점 중 하나는 주문의 파편성으로 틱의 수가 임의적이라는 이야기이다. (즉, 일종의 Hyper Parameter로, 사용자가 어떻게 지정하느냐에 따라서 time lag의 차이가 발생한다) 또한, 거래소의 가격 매치 엔진 프로토콜은 운영의 편의성을 위해 하나의 주문 체결을 다수의 인위적 Partial Order로 분리할 수 있다. 거래량 바는 이러한 문제를 미리 정의된 단위의 증권 거래가 일어날 때마다 표본 추출해 해결한다. 
거래량에 기반을 둔 return data의 표본이 틱 바에 의한 표본추출된 데이터보다 훨씬 더 나은 통계적 성질 (IID 가우시안 분포의 가정을 더 잘 따른다)을 가진다는 것이 밝혀졌다.(Clark, 1973) 
Financial Machine Learning Library에서는 다음과 같이 몇 개의 명령어만으로 거래량기준 표준 바를 추출할 수 있다.

import FinancialMachinieLearning as fml
volume_threshold = 10000
v_bar_df = fml.bar_sampling(df, 'v', volume_threshold, tick = False)
xdf, xtdf = fml.select_sample_data(df, v_bar_df, 'price', xDate)
fml.plot_sample_data(xdf, xtdf, 'Volume Bar', alpha = 0.5, markersize = 7)



Dollar Bar

달러 바는 사전에 정해 둔 시장 가치가 거래될 때마다 관측값을 표본 추출하는 것이다. 여기서 달러는 각 나라 화폐 단위에 따라 엔, 원, 혹은 파운드, 유로 등이 될 수 있다. (즉, 굳이 달러가 아니어도 된다) 거래 가치를 기준으로 표본을 추출하면 가장 큰 장점으로 큰 가격 변동에 영향을 많이 받지 않는다는 장점이 있다. 또한, 수집된 데이터 상에서 발생한 액면분할 등의 기업의 재무활동에 강건한 경향을 보인다는 장점도 있다.
실제 2020년 KOSPI200 선물 데이터의 표본 추출 개수를 보면, Dollar count의 변동성이 제일 안정적인 것을 볼 수 있다. 반면 Tick Count는 변동이 제일 심한 것으로 나타난다

Financial Machine Learning Library에서는 아래와 같이 손쉽게 달러 바 표본을 추출할 수 있다

import FinancialMachinieLearning as fml
dollar_threshold = 3000000
dv_bar_df = fml.bar_sampling(df, 'dv', dollar_threshold, tick = False)
xdf, xtdf = fml.select_sample_data(df, dv_bar_df, 'price', xDate)
fml.plot_sample_data(xdf, xtdf, 'dollar bar', alpha=0.5, markersize=7)



댓글

이 블로그의 인기 게시물

Random Forest 파헤치기

Random Forest Random Forest Random Forest는 weak Learner로 Decision Tree를 이용하는 일종의 bagging Algorithm이다. (배깅 학습기라는 뜻은 아니다) Machine Learning 분야에서 Support Vector Machine과 같이 가장 많이 사용하는 분류모형 중 하나이다. Random Forest Class는 다음 특징을 가진다. Keyword Argument의 대부분은 DecisionTreeClassifier와 같다. Random Forest에서 Tree의 수가 많아질수록 예측에 유리하지만 시간이 많이 걸리고, 한계적인 이득은 체감한다. Random Forest의 Base Model로는 보통 Deep Tree를 많이 사용한다. Shallow tree는 상대적으로 분산이 작지만 상당한 편의를 발생시킨다. 반면 Deep Tree는 분산이 큰 반면 편의가 작으므로 여러 결과의 평균을 예측에 사용하면 분산을 줄이는 효과가 있다. Random Features Random Forest는 훈련 과정에서 무작위로 추출한 Feature Set만을 사용한다. 이는 모형들 사이의 Correlation을 감소시킨다 Missing Value와 관련된 문제를 효과적으로 완화시킨다. 오늘은 Random Forest와 Decision Tree의 기본 구조를 알고 있다고 가정하고 Keyword Argument 중 중요한 것들을 중심으로 소개하고자 한다. class_weight {class_label:weight} 형식의 클래스와 연결된 가중치이다. 만약 주어지지 않는다면, 모든 Class는 하나의 가중치로 되어 있다. 다중 출력 문제의 경우 dict 목록을 y 열과 같은 순서로 제공할 수 있다. 다중 출력(다중 레이블 포함)의 경우 자체 dict의 모든 열의 각 클래스에 대해 가중치를 정의해야 한다. 예를 들어 4개 클래스의 다중 레이블 분류 가중치는 [{1:1}, {2:5}, {3:1}, {4:1} 대신 [{0:1,

Team Q Research

  Q research Naver blog Qraft에 계신 선배님과 서강대학교 학부생이 함께 만든 퀀트 리서치 팀입니다. 주로 Machine Learning과 Quantitative Finance 분야를 다루며, 최근 연구 분야는 ML분류기에서 나온 Accuracy를 확률로써 해석하기 위해 Probability Calibration을 통해 보정하고, Bet size를 정하는 Secondary Model로써 활용하는 것을 연구중입니다. 이외에도 Machine Learning 분류기와 Neural Network를 사용하여 투자 집행에 도움이 되는 실전 전략 연구를 수행하고 있습니다.

Portfolio Analysis, Mean Variance Frontier

  포트폴리오 이론에서의 기대수익률     포트폴리오 기대수익률은 개별 자산의 기대수익률의 가중치를 고려하여 만든 포트폴리오의 기대수익률이다 mean - variance space     자산 투자에 있어서 기대수익률을 위해서는 투자의 리스크를 감수해야 한다. 즉, 위험 한 단위가 증가할 때 기대수익률 또한 증가한다. Indifference Curve     Risk Averse의 성향이 많은 개인 투자자는 위험에 대해 기피하는 경향이 있다. 따라서, 위험 한 단위가 증가할 때마다 기대수익률을 더 많이 받으려고 하는 경향을 보인다. 따라서 무차별 곡선은 우상향하며, 기울기는 체증한다. 반면, Risk lover의 Indifference Cuve의 기울기는 체감한다. Portfolio Risk     포트폴리오의 리스크는 각 자산의 기대수익률간의 편차로 계산한다.  Example     2000년 1월부터 2020년 12월까지 기간동안 고려한 자산은 다음과 같다 스페인 국채 10년물  KOSPI 주가지수 S&P 주가지수 원유 선물 천연가스 선물 금 선물 구리 선물 import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline csv data의 변수명은 다음과 같이 정의한다 data : 수익률 데이터 cycle : 경기순환 사이클 데이터  import한 데이터는 다음과 같이 세가지 형식으로 분류한다 df = pd . concat ([ data . iloc [:, 1 :], cycle . iloc [:, 1 :]], axis = 1 ) # 전체 데이터 df_up = df [ df . cycle == 1 ] # 경기 확장기의 데이터 df_down = df [ df . cycle == 0 ] # 경기 후퇴기의 데이터 noa = len ( df . columns [: - 1 ]) # 포트폴리오 구성자산의 갯수