Time Series Prediction을 위한 Deep learning

 

이번 글에서는 주가 예측의 기본 개념인 time series prediction 을 딥러닝 기술로 구현하는 방법에 대해 알아보도록 하겠다.

 

 

위 그림은 구글 이미지 검색에서 time series prediction 으로 검색을 해서 찾아낸 그림 중 하나인데, 오늘 설명할 deep learning을 이용한 time series prediction의 개념을 쉽게 도식화 한 것이다.

time series 데이터란 시간 축에 따라 변하는 데이터를 (시간,값)의 형태로 쭉 기록한 데이터를 말하는데 주가 데이터, 뇌파 데이터, 기온 데이터 등이 이에 해당한다. 주가 데이터라면 x 축이 시간(월, 일, 주, 시, 초 등)이고 y 축이 주가 데이터(주가, 거래량, 변동률 등등)이 되겠다. 

time series prediction의 가장 대표적인 알로리즘은 일정 기간의 데이터를 관찰하고 바로 다음 순간의 값을 예측하는 것이다. 

 

 

<to be continued...>  

posted by Dr.Deeeep

나만의 로보 어드바이저(robo-advisor) 만들기 [1]

상념 2016. 8. 30. 15:06

로보 어드바이저란? 

 

 

 

 

 

새로운 용어는 아니지만 요즘 뜨고 있는 로보 어드바이저 (robo-advisor)라는 기술. 쉽게 말해 인공지능 기술을 이용하여 자신이 원하는 알고리즘으로 컴퓨터가 주식 거래를 자동으로 수행하도록 하는 기술이다. 물론 이것은 내 나름의 좁은 해석이고 원래는 더 넓고 좋은 의미가 있을것이다. 그런 글은 위키페디아를 참조.

 

빅데이터, 딥러닝, 머신러닝 등등 신조어를 만들기 좋아하는 요즘시대에 로보 어드바이저는 인공지능과 금융이라는 인간의 흥미와 욕망에 부합하여 차세대 대세어로 부족함이 없다. 

 

나는 로보 어드바이저라는 말은 처음 들어본것이 한달 정도 된 듯하다. 처음에는 무슨 신조어인가 했지만 뜻을 알고 나서는.. 흠. 이런 기술은 이미 금융 공학을 공부하거나 데이터 분석을 하는 사람들에게는 오래전부터 있었던 개념이다. 단지 "인공지능"과 "빅데이터"와 같이 현시대 최첨단을 걷는 기술들이 결합되면서 그동안의 데이터 분석에만 집중하던 금융기술이 이제 분석과 기계학습을 이용한 좀더 지능적인 의미로 떠오른 것이다. 

 

로보 어드바이저라는 개념이 원래는 더 넓은 개념의 더 좋은 뜻도 많이 있겠지만, 좁은 의미인 "빅데이터에 기반한 인공 지능 트레이딩 로봇"을 만드는 방법에 대해 연재해보도록 하겠다. 나는 이러한 로봇은 이미 수년전에 개발하여 사용하고 있다. 한때는 실전에 적용하여 트레이딩을 해보기도 했지만 튜닝없이 바로 운영을 하려니 성공률이 낮아 현재는 일단 시뮬레이션만 수행하며 실제 거래는 로봇이 만드는 리포트를 보고 수동으로 수행하고 있다.

 

나만의 로보어드바이저의 개발에 필요한 준비물을 알아보자.

 

Python 

자바

VC++ 6.0 이상

CybosPlus (대신증권계좌필요)

MySQL

 

 

 

CybosPlus 는 대신증권에서 제공하는 개발자를 위한 트레이딩용 API로 자바, python, c++ 등에서 사용할 수 있다. 빠르게는 초당 10회 정도 트레이딩을 할 수 있다. 무엇보다도 실시간 가격을 가져온다든가 처음 수년간의 데이터(빅데이터)를 구축하기 위해 필요하다.

 

일단 여기 까지...

 

 

 

posted by Dr.Deeeep

딥러닝 for 트레이딩

금융 2016. 8. 18. 02:38

트래이딩분야에 적용된 딥러닝 기술

 

그 동안 개인적으로 테스트해 본 트래이딩에서의 딥러닝 알고리즘은 그닥 효과가 좋지 못하다. 트래이딩 알고리즘의 시뮬레이션을 위해 구축한 웹페이지 (http://www.bigdata-trader.com/simulation_preview.jsp?month=00000000)에서 확인할 수도 있는데, 딥러닝 모델(현재 A26부터 A30까지 5개 모델이 딥러닝 모델, 나머지는 전통적 트레이딩 알고리즘)의 단타 매매 성공율은 겨우 60퍼센트 정도에 미치고 있다. 물론 딥러닝 모델은 아직 2개월 정도밖에 운영하지 않았지만 몇 년을 돌려도 크게 바뀔거 같지는 않다. 이 정도의 performance는 전통적 방법의 트래이딩 알고리즘(예를 들면 A14나 A4)보다도 훨씬 뒤쳐지는 성적이다.

 

 

 

참고로 각 알고리즘은 DBN을 이용하여 72개월간 다음 데이터를 학습한며, 매일 10거래일 전 발행한 추천 종목의 성적을 평가한다.

A26: 주가

A27: 주가+인덱스

A28: 주가변동률+인덱스변동률

A29: 주가변동률+거래량+외인거래량

A30: 주가변동률+거래량+외인거래량+외인보유portion

 

다양한 딥러닝 아키텍춰를 추가해서 LSTM 등을 이용할 계획이긴 하지만 크게 향상될것 같지는 않다. 아키텍춰보다는 데이터나 모델을 바꿔야 할듯.

 

USC의 Greg Harris 가 트래이딩 분야에 적용된 딥러닝 기술을 잘 정리를 해둔것을 발견하여 정리해본다. 원문은 http://gregharris.info/a-survey-of-deep-learning-techniques-applied-to-trading/

 

(요약 할것)

1. Limit order book modeling

 

2. price-based classification models

 

3. Text-based Classification models

 

4. Volatility Prediction

 

5. Portfolio Optimization

 

각 모델별로 아키텍춰를 달리한 논문들을 소개하고 있는데 내 시스템에 적용 가능한것부터 하나하나 테스트 해볼 생각이다.

 

========== continued..

 

일단 위에 열거된 다른 연구자들의 결과를 보고 놀라운 점은 수익 성공률이 53% 정도 밖에 안된다는 것. 내가 구현한 딥러닝 모델보다도 조금 더 나쁘고 A4나 A14보다도 훨씬 안좋다. 하지만 위 요약을 읽으면서 몇가지 새로운 모델에 대한 구상이 떠올라서 구현해보기로 한다.

 

1. 먼저 리턴(closing price - opening price)이라는 개념. 나의 예측 모델들은 모두 regression problem에 집중한데 반해 리턴이란 개념으로 접근한다면 classification 문제가 된다. + 일것이냐 - 일것이냐의 classification. 사실 class 수를 더 늘려서 regression 처럼 학습할 수 있지만. 어쩄든. 그게 중한게 아니고. return을 계산하기 위해서는 opening price 를 알아야 하는데. 이런식으로 하려면 실시간 시스템이어야 한다. 종가 확인 후 하루 한번 예측을 수행하는 일(daily) 베이스의 bigdata trader 시스템에서는 적용할 수 없다. opening price를 무시한다면 성공률이 50%로 수렴할 것이 뻔하다. 서비스 용도말고 관리자창에 테스트 용도로 장중 opening price를 입력 받아 return을 얻어내는 실험 모듈을 추가해야겠다.

  - 조금 더 생각해보니 "종목 상세 보기"에서는 사용자 입력 후 해당 종목에 한 해 실시간 장중가를 가져 올 수 있으니 그날의 리턴을 계산할 수도 있겠다.

 

2. Text 기반 classification

경제면 headline 들과 개별 종목 등락을 학습한다는 개념. 말그대로 bigdata trader의 기본 개념인데... sns 대신 경제면 headline 을 학습한다는 것.

 

3. moving box learning

DBN 을 써서 oscillating box를 학습 한다는 것인데. 학습이고 뭐고를 떠나 이 전략은 전략 자체의 validation 이 필요하다고 본다. 박스 바닥 뚫고 진입시 매수, 박스 바닥 뚫고 진출수 매도. 그러나 박스권의 설정 자체가 이미 후행적이고 결과론 적이다. oscillating box 이론이 잘 맞는 종목도 있을테니 선택적으로 적용한다면 시도해볼만 하다. 각 종목이 얼마나 oscillating box 이론에 일치하는가 평가하는 모듈이 먼저 필요하다.

 

(임시저장)

 

 

 

 

 

 

 

posted by Dr.Deeeep