python and R

알고 트레이딩을 위해서는 최종적으로 분석 이나 매매를 위한 컴퓨터 프로그램을 작성해야 합니다.

분석 프로그램은 시세나 기타 자료를 수신한 후 매매를 위한 분석만을 처리하는 프로그램을 말하고 매매 프로그램이란 실시간으로 시세를 수신하고 분석, 매매를 결정한후 매매 신호를 거래소에(혹은 브로커에게) 보내는 프로그램을 말합니다. (이 분류는 제가 생각하는 자의적인 것입니다)

이러한 프로그램을 개발하기 위해서는 개발 환경이나 플랫폼을 결정할 필요가 있습니다. 알고 트레이딩 시스템을 개발하시는 분들은 모두 필요로 하시는 need가 다를 것이므로 딱히 이렇게 해야한다는 것은 없는것 같습니다. 하지만 처음으로 개발을 시작하시는 분들을 위해 오늘은 제가 사용하는 환경을 소개해 드립니다. 그냥 한 가지 candidate로 생각해 주시면 감사하겠습니다.


OS

일단 OS는 개인투자자라면 선택의 폭이 좁습니다. 일단 data feeding 및 매매 요청을 위한 API 들이 대부분 windows COM 으로 제공되기 때문에 windows 환경을 사용 할 수 밖에는 없습니다. 기관 투자자라면 data feeding은 직접 거래소 UDP를 받아서 처리하면 되고 매매는 FIX 프로토콜을 이용하거나 직접 tcp/ip 로 통신모듈을 작성하면 OS 선택의 폭은 넓어집니다.


python 소개

저는 실시간 매매 프로그램의 작성에는 c와 python의 조합을 사용하고 다양한 off-line 분석에는 R 을 이용합니다. c 에 대해서는 특별한 소개가 필요없을 것 같습니다. python은 최근 많이 쓰이고 있는 스크립트 언어 중 하나입니다. 자세한 소개는 다음 싸이트를 참조하시면 될 것 같습니다.

python을 이용하며 알고 트레이딩을 개발하면 다음과 같은 장점이 있습니다.

  • OOP 지원
  • 풍부한 standard packages
  • 많은 free IDE, 라이브러리
  • 빠른 개발 속도
  • numpy and scipy

python은 SWIG 등의 tool을 사요하면 다른 언어로 씌여진 라이브러리를 쉽게 python 용으로 wrapping 할 수 있습니다. 그러다보니 기본적으로 제공하는 standard packages도 풍부하고 대부분의 유명 라이브러리들이 python으로 binding 되어 있습니다. 그러나 무엇보다도 강력한 라이브러리는 바로 numpy와 scipy입니다.

과학기술계산에서 많이 쓰이는 MATLAB이란 소프트웨어가 있습니다. 수치해석코드를 만들때 C와 MATLAB을 모두 사용해 보신분이라면 다음 문장으로 numpy와 scipy의 파워를 실감하실 수 있을 것입니다.

MATLAB 수준의 간단한 코드만 만들면 C 수준의 속도를 내주는 free open source 라이브러리

정확하게 말하자면 C보다는 약간 속도가 떨어지지만 cython 등을 이용하여 부분 최적화를 하면 유사한 수준에 도달할 수 있습니다. 실제로 제가 C와 python을 섞어서 만든 알고 트레이딩 플랫폼은 단일 종목 선물 옵션 high-frequency 실매매에 사용가능한 수준이었습니다. 무엇보다도 강력한 것은 MATLAB 수준의 기본 명령어들을 가지고 있기 때문에 수치해석이 포함된 코드 개발 속도가 빠르다는 점입니다.

물론 장점만 가지고 있는 것은 아닙니다. 가장 큰 단점은 multi-thread에서 성능문제입니다. python 도 구현 언어에 따라 CPython, jython, IronPython(dot net), PyPy 등 여러가지 구현이 존재합니다만
numpy는 구현상 대부분 C로 씌여져 있다보니 CPython에서만 동작합니다. 그런데 CPython에서는 쓰레드의 갯수가 증가하면 성능이 급격히 나빠지는 단점이 있습니다. 이를 극복하기 위해서는 multi-threading이 아닌 multi-process 모델로 가야하는데 이 부분에서 실시간 자료 공유, 이벤트 처리 등의 문제를 어떻게 해결할 것인가에 대한 고민을 좀 해야 합니다.


R

통계, 경제, 재무 쪽의 분야에서 많이 쓰이는 S-Plus 라는 툴이 있습니다. S-plus는 s language의 commercial 구현이고 R은 s language의 free open source 구현입니다. 따라서 S-plus에서 구현된 것은 대부분 R에 바로 적용가능합니다. R 에 대한 자세한 소개는 다음 사이트와 인터넷을 참고하시면 됩니다.

회귀분석 등의 통계적 분석의 경우 R로 씌여진 신뢰할 만한 package가 많이 있기 때문에 굳이 상용 소프트웨어를 쓰거나 직접 짜실 필요는 없습니다. 제가 많이 사용하는 패키지 중의 하나는 Rmetrics 라는 것입니다.

이 패키지에는 간단한 option pricing, stochastic process simulation and estimation(GARCH, ARIMA, ACD 등) 등에 관한 코드 들이 이미 만들어져 있으므로 바로 사용하면 됩니다

R의 또 한가지 장점은 rpy2 라는 python package를 이용하여 python과 연동가능하다는 점입니다.