1. 퀀트 투자
퀀트 커리어를 위한 학습 로드맵 by 퀀트대디(김성진, 하나금융투자 글로벌 마켓 운용실 퀀트 트레이더, 고려대 경영학)
블로그_퀀트대디 https://blog.naver.com/stochastic73/222653067714
브런치_퀀트 투자 프레임워크 101 https://brunch.co.kr/magazine/quant-investing
CareerHigh_퀀트(프리미엄 집중반. 프로젝토링, 플립러닝) : 파이썬 기반 모멘텀 전략 구현_4주 특강(19회 수업)
https://www.careerhigh.co.kr/class/ClassView?ClassIndex=243
금융시장, 포트폴리오 최적화, 팩터 모델링, 금융공학, 금융 머신러닝
- 1. 금융시장 : 금융 머신러닝을 제대로 사용하기 위해서는 금융시장에 대한 해박한 도메인 지식이 필요함. 결국 머신러닝은 인간이 쉽사리 인지하지 못하는 패턴을 찾아주기만 할 뿐, 그것이 시장의 메커니즘을 합리적으로 설명해 주지는 못하기 때문. 그것을 해석하고 분석하여 새로운 시장의 법칙을 발견해 내는 것은 결국 경제적 논리의 합리성.
퀀트가 주로 관심을 가지고 있는 자산군은 크게 주식(Equity), 채권(Fixed Income), 외환(Currencies), 원자재(Commodities), 파생상품(Derivatives). 금융상품에 대한 기본적 이해를 바탕으로 어떠한 변수가 해당 자산에 영향을 미치는가를 끊임없이 탐구해나가는 과정이 필요함. 결국 팩터를 찾기 위해서는 시장을 본질적으로 움직이는 메커니즘에 대한 이해가 필요하기 때문.
첫 번째 빌딩블록에 대한 지식을 쌓는 방법은 크게 두 가지.
하나는 FICC 혹은 파생상품에 대한 대표적인 서적들을 읽으면서 여러 가지 자산들을 공부하는 것,
다른 하나는 미국의 12개 지역 연준의 홈페이지를 적극 활용하는 것.
왜? 미국 연준은 글로벌 매크로 시장에 대한 연구를 어느 누구보다도 빡세게, 또 트렌디하게 진행하기 때문. 특히 뉴욕, 시카고, 세인트루이스, 샌프란시스코 연준.
- 2. 포트폴리오 최적화 : 여러 금융자산들 혹은 여러 팩터들을 어떻게 조합하여 매 시점에서 나의 투자 목표에 부합하는 최적의 포트폴리오를 만들어낼지를 풀기 위한 도구. 투자론.
자산 유니버스를 활용해 어떻게 포트폴리오를 구성해야 하는가. 다만 퀀트는 자산의 관점이 아닌 팩터의 관점에서 활용함(자산 배분_자산 매수 vs. 팩터 배분_팩터에 대한 숏/롱 익스포져). 여기서 팩터는 금융시장에서 수익과 리스크의 본질적인 원천을 의미함.
퀀트의 궁극적인 이상향은 시장의 움직임과 무관하면서도 지속적으로 꾸준한 수익을 가져다줄 수 있는 팩터 포트폴리오를 완성하는 것.
따라서 포트폴리오 최적화라는 빌딩블록을 정복하기 위해서는 횡적 배분 모델과 종적 배분 모델이 전체 프로세스 상에서 어떤 위치에 있는지를 먼저 이해하고, 이후 각 카테고리 내에 존재하는 구체적인 모델들을 하나씩 공부해 나가는 것이 좋음. 정답이 존재하지 않는 상황에서 "나에게 맞는" 최적의 솔루션을 찾고자 하는 것이 바로 최적화. 오직 지속적인 최적화만 있을 뿐.
- 3. 팩터 모델링 : 금융시장이라는 메커니즘을 움직이는 본질적인 동인. 베타, 모멘텀, 밸류, 캐리, 변동성 등.
좋은 팩터란 팩터를 설명하는 경제적 논리가 충분히 합리적이면서도 장기적으로 우상향하는 수익 곡선을 보여주고 다른 팩터들과는 독립성을 가지는 팩터.
Quantity is Quality - The Unrules by Igor Tulchinsky
수많은 팩터 전략에 대한 논문을 읽으면서 그것을 자기 것으로 소화한 뒤, 거기에 나온 팩터 디자인을 기반으로 스스로 구현해보는 연습이 필요하다. 왜? 논문 저자의 주장은 참일 수도 그렇지 않을 수도 있으므로 당연히 검증이 필요하며, 대부분의 백테스팅 결과가 너무나도 좋다는 점 또한 경계해야 할 사항(효력이 사라진 팩터 혹은 과최적화).
- 4. 금융공학 : 여기서 말하는 금융공학은 파생상품, 구조화 상품과 관련된 전통적인 개념의 셀사이드 금융공학을 의미함. (셀사이드는 없는 돈을 벌기 위해 금융 서비스를 바이사이드에게 제공하는 자 / 바이사이드는 원래 가지고 있는 재산을 투자하는 자)
팩터 비즈니스(QIS)를 주도하고 있는 주요 글로벌 금융기관들은 팩터를 전부 수학적으로 분해하여 제시함으로써, 이 팩터가 언제 벌고 언제 터지는지 수학적으로 정확하게 분석할 수 있음. 물론 이것이 시장을 예측할 수 있다는 말은 아니지만, 시장 국면이 변화할 때 어떻게 대응해야 할지에 대한 확실한 힌트를 얻을 수 있다는 의미. (블랙숄즈 옵션 공식, 모멘텀 팩터, 평균회귀 팩터, 옵션 스트래들의 델타)
* QIS : 정량 금융 투자 전략(QUANTITATIVE INVESTMENT STRATEGIES)
퀀트 투자 프레임워크의 메인 뼈대는 아니지만 그 프레임워크를 보다 단단하게 만들어줄 강화 재료 1. 결국 금융공학이라는 학문은 다양한 금융상품들의 현금흐름을 분해하고 재조립하는 것.
기본은 파생상품의 이론적 가치를 추정하는 프라이싱, 파생상품의 위험 민감도인 그릭스를 산출하여 포지션을 관리하는 헤징. 우선 여러 가지 기본적인 파생상품(선도, 선물, 스왑, 옵션)이 어떻게 합성되어 만들어지고 그것들이 주가, 금리 등과 같은 기초자산들과 어떠한 역학관계를 맺고 있는지 이해하는 것이 필수.
- 5. 금융 머신러닝 : 강화 재료 2. 머신러닝 기법을 금융투자업에 적용하고자 하는 것. 금융 머신러닝은 기존 퀀트 투자의 한계점을 보완하고 이를 증강시켜줄 서포터가 되어야 하지, 주객전도의 상황이 발생한다면 거의 확실하게 과최적화가 발생할 수밖에 없음(반드시 도메인 지식이 자리하고 있어야 함).
성과가 과연 머신러닝으로부터 기인하는가? 머신러닝은 도구일 뿐. 결국 투자의 성과는 머신러닝이 아닌 좋은 정보에 의해 결정되며, 좋은 정보는 철저하게 합리적인 경제적 논리에 기반하는 것.
단순하게 머신러닝을 공부하여 금융 데이터를 머신러닝 모델에 집어넣어 결과를 내는 것은 하등 의미가 없음.
모든 요소들의 전후에는 실무적인 맥락이라는 게 존재함. 이 실무적인 맥락에는 기존의 방법론이 가지고 있는 한계점 및 그 한계를 극복하기 위해 머신러닝으로 증강된 새로운 방법론을 사용해야 하는 이유 등이 포함됨. 그러므로 도메인 지식의 부래는 이 맥락에 대한 접근을 애초에 불가능하기 만들어버림.
금융 머신러닝을 배우고자 한다면 이러한 머신러닝 영역을 배우는 것 외에도 다시 첫 번째 빌딩블록으로 돌아가 차근차근 금융 도메인 지식을 쌓아나갈 필요가 있음.
물론 여기서 나열된 다섯 개의 빌딩블록들을 학습하기 위한 절대적인 순서나 공식은 없음. 중요한 것은 전체적인 구조를 먼저 이해하고 여기서 나에게 부족한 부분이 무엇인지를 인지한 뒤에 이를 채워나가고자 계속해서 노력하는 것. 파편화된 지식의 조각들을 하나씩 모아나가다 보면 어느 순간 이것들이 서로 융합되는 것을 느끼는 데에서 학습의 즐거움은 비로소 탄생하기에.
2. 투자 유튜브 채널들
클래스커리어하이 : 금융직무 학교, 퀀트대디 소속
클래스커리어하이
수업으로 경력을 쌓는 커리어스쿨, 커리어하이 현직자와 프로젝트를 함께하며 취업에 필요한 경력을 쌓는 교육프로그램 "프로젝토링"을 진행합니다.
www.youtube.com
강환국 : 연복리 10~15% 수익률. 12년째 다니던 대한무역투자진흥공사(KOTRA)를 38세에 그만둔 파이어족이자 작가. 퀀트 투자 전문가. 모멘텀, 주식, 암호화폐, 부동산 기타, 동적 자산배분 전략(LAA, VAA, 듀얼 모멘텀), 종목 퀀트 등
https://www.youtube.com/c/%ED%95%A0%EC%88%98%EC%9E%88%EB%8B%A4%EC%95%8C%EA%B3%A0%ED%88%AC%EC%9E%90
할 수 있다! 알고 투자
안녕하세요, 강환국입니다. 할 수 있다! 퀀트투자(2017), 가상화폐 투자 마법공식(2018), 하면 된다! 퀀트투자(2021), 거인의 포트폴리오(2021)의 저자입니다. 2021년 경제적 자유를 달성하여 작가, 유튜
www.youtube.com
* 모멘텀 : 과거 가격 정보로 미래의 기대 성과를 예측하여 상승 추세 자산에 올라타는 것
3. 주가 예측 실습
Yahoo Finance에서 가져온 5년치 삼성전자 주식 데이터로 주가 예측하기
Time Period : Apr 19, 2017 - Apr 19, 2022
https://www.youtube.com/watch?v=sG_WeGbZ9A4&list=PLUu-A-mtBg8aizyoqGVITmtH_VL8cd7NM&index=2
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dropout, Dense, Activation
import datetime
data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/실습/005930.KS.csv')
data.head()
# data.info()
high_prices = data['High'].values
low_prices = data['Low'].values
mid_prices = (high_prices + low_prices) / 2
seq_len = 50 # 50일 주가로 다음날 주가를 예측
sequence_length = seq_len + 1 # window = 50일치 주가 + 다음날 주가
result = []
for index in range(len(mid_prices) - sequence_length): # batch - window
result.append(mid_prices[index:index + sequence_length])
normalized_data = []
for window in result:
normalized_window = [((float(p) / float(window[0])) -1) for p in window] # 첫 번째 window의 첫번째 요소를 기준으로(1 - 1 = 0으로 만듦) 정규화
normalized_data.append(normalized_window)
result = np.array(normalized_data)
# split train and test data
row = int(round(result.shape[0] * 0.9)) # batch에서 90%를 train data로 할당
train = result[:row, :]
np.random.shuffle(train)
# trian과 test dataset의 input&output 값 정하기
x_train = train[:, :-1] # window 안의 51개의 데이터 중 50개는 학습용으로. 0 ~ 50까지 슬라이싱
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1],1))
y_train = train[:, -1] # 51번 째 데이터는 정답으로
x_test = result[row:, :-1] # window 안의 데이터 중 10%는 테스트용으로
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_test = result[row:, -1] # test data의 정답
x_train.shape, x_test.shape
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(50,1)))
model.add(LSTM(64, return_sequences=False))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='rmsprop')
model.summary()
model.fit(x_train, y_train, validation_data=(x_test, y_test), batch_size=10, epochs=20)
pred = model.predict(x_test) # 1056일 동안의 데이터로 117일의 주가 예측하기
fig = plt.figure(facecolor='white')
ax = fig.add_subplot(111)
ax.plot(y_test, label='Actual')
ax.plot(pred, label='Prediction')
ax.legend()
plt.show()
https://github.com/ljy9969/Study/blob/master/01%20Kaggle/22-04-19%20Stock%20Price(LSTM).ipynb
3. Conv2D vs. Conv3D
볼륨에 대한 공간 컨볼루션
In 3D CNN, kernel moves in 3 directions. Input and output data of 3D CNN is 4 dimensional.
Mostly used on 3D Image data (MRI, CT Scans, Video).
Input : (N, C_ {in}, D_ {in}, H_ {in}, W_ {in})
Output : (N, C_ {out}, D_ {out}, H_ {out}, W_ {out})
4. GAN 위에 CLIP
GAN(Generative Adverserial Network, 생성적 대립 신경망) : 레이블이 입력된 이미지를 픽셀과 RGB로 인식을 하면서 평균적인 분포를 찾아냄. 생성자와 판별자라는 알고리즘을 함께 사용
CLIP(Contrastive Learning-Image Pre-training, 대조 학습-이미지 사전 훈련) : 레이블을 입력할 필요가 없이 텍스트와 이미지를 동시에 학습
* 봉가드 문제 : 인간만이 인지할 수 있는 추상능력이나 유추 능력은 전혀 없는 인공지능이 직면한 문제
https://stibee.com/api/v1.0/emails/share/Bwy952kydZBzUPzdECKXgRPIZVzSFw==
'개인 공부' 카테고리의 다른 글
4/24 일_Colab의 TPU, 주식 투자 자동화 (0) | 2022.04.25 |
---|---|
4/22 금_AWS의 GPU, AI 프로젝트 주제 (0) | 2022.04.21 |
4/18 월_배치 정규화, Optimizer, TensorFlow, 퀀트 투자, 파이프라인 (0) | 2022.04.18 |
1/4 화 성과 (0) | 2022.01.05 |
1/3 월 성과 (0) | 2022.01.04 |