brunch

You can make anything
by writing

C.S.Lewis

by 퀀트대디 May 16. 2021

트레이딩 알고리즘의 설계도

제대로 작동하는 헐크버스터를 만들기 위해서는 기초 설계 과정부터 차근차근 구조를 한 단계 한 단계씩 쌓아 올려야 한다. 모든 종류의 공학(Engineering)은 구현(Implementation)을 해내야만 결과물이라는 꽃을 피울 수 있고 그때서야 비로소 공학의 가치를 발현시킬 수 있다. 하지만 구현 단계 이전에 반드시 기능을 제대로 할 수 있는 논리적인 구조 설계가 담보되어야만 올바른 구현이 가능하다.


시장을 이기기 위한 마켓버스터(Market-Buster)인 트레이딩 알고리즘의 경우도 마찬가지다. 알고리즘 트레이딩의 영역에서는 인간의 개입이 전혀 없기 때문에 데이터의 수집, 저장, 호출부터 트레이딩 전략의 분석, 판단 및 매매 실행을 전 과정에서 자동화시킬 수 있도록 할 수 있는 적절한 청사진(Blueprint)을 미리 디자인해놓는 것이 필요하다.

그렇다면 트레이딩 알고리즘의 내부 설계는 어떤 식으로 짜여져 있을까?
다음 그림은 트레이딩 알고리즘 구조도를 간결하게 일반화시킨 다이어그램이다.

트레이딩 알고리즘 구조도


# 데이터 크롤러 (Data Crawler)
우선 트레이딩 알고리즘은 기본적으로 데이터의 확보가 필수적이다. 데이터 크롤러는 외부 데이터 소스(블룸버그, 로이터, 인포맥스, 야후, 구글 등)에 접근하여 필요한 정보를 적절하게 파싱(Parsing; 어떤 소스에서 원하는 데이터를 특정 패턴이나 순서로 추출하여 정보로 가공하는 것)한 후 데이터베이스로 전송하는 역할을 한다.

# 데이터베이스 (Database, DB)
데이터베이스는 말 그대로 데이터들이 쌓여있는 창고이다. 데이터 크롤러를 통해 수집된 데이터는 데이터베이스에 적절한 분류 기준과 시간 기준으로 정렬되어 쌓여 데이터 구조를 형성한다. 실제 트레이딩과 관련된 알고리즘들은 이러한 데이터베이스에 접근하여 잘 정리된 데이터를 호출한 후 그 데이터를 이용해 부여된 기능을 수행한다.

# 알파 알고리즘 (Alpha Algorithm)
흔히 금융시장에서 알파(Alpha)라 함은 베타(Beta)와 구분되어 절대 수익(Absolute Return)의 근원을 의미한다. 알고리즘 트레이딩의 기본 목적은 시장의 움직임에 무관한 절대 수익을 창출하는 것이기 때문에 이러한 수익을 창출하는 전략들을 알파라 부르며 알파 알고리즘들은 수집된 데이터를 가지고 끊임없이 트레이딩의 기회를 모색하며 수익의 최대화를 꾀한다.

알파 알고리즘은 그 전략의 성격에 따라 두 범주로 나누어볼 수 있는데, 1) 이론 기반의 모델과 2) 데이터 기반의 모델이 바로 그것이다. 우선, 이론 기반 모델(Theory-Driven Model)은 이미 널리 알려져 있는 추세 추종 전략(Trend-Following Strategy)이나 평균 회귀 전략(Mean-Reverting Strategy) 같이 논리적인 이론을 미리 상정하고 그 논리에 맞춰서 모델을 개발하여 예측을 시도하려는 모델을 말한다. 이와는 다르게 데이터 기반 모델(Data-Driven Model)은 특정한 이론을 설정하지 않고 단지 데이터만을 분석해 숨겨져 있는 패턴을 찾는 방식이다. 최근 미디어를 통해 널리 회자되고 있는 머신러닝(Machine-Learning) 기법이 바로 이러한 데이터에 기반한 방법이며, 인간이 미리 모델이나 패러미터를 규정하지 않는다. 이론 기반 모델은 추상적인 이론으로부터 구체적인 데이터로 내려가기 때문에 연역적이며 탑다운(Top-Down)의 방식을 취하고 있으며, 이에 반해 데이터 기반 모델은 구체적인 데이터를 쌓아 추상적인 이론을 도출하려 하기 때문에 귀납적이며 바텀업(Bottom-Up)의 방식을 취하고 있다.

# 리스크 알고리즘 (Risk Algorithm)
리스크 알고리즘은 알파 알고리즘과는 정반대의 성격을 가지고 있다. 알파 알고리즘이 수익의 최대화를 목적 함수로 설정하고 전략을 구성하는 반면, 리스크 알고리즘의 경우 손실의 최소화를 목적함수로 상정한다. 해당 전략이 가져올 수 있는 최대 손실폭과 손실 기간, 손실 빈도 등을 측정하여 얼마나 위험한지를 알려주는 역할을 한다. 투자은행의 리스크 관리 부서와 같은 역할을 하는 셈이다.

# 거래비용 알고리즘 (Transaction Cost Algorithm)
거래비용 알고리즘의 경우 말 그대로 해당 전략을 시행했을 때의 매매 수수료, 세금, 시장 임팩트, 기타 비용 등을 전부 계산하여 알려주는 알고리즘이다.

# 포트폴리오 알고리즘 (Portfolio Algorithm)
포트폴리오 알고리즘은 위에서 언급했던 알파, 리스크, 거래비용으로부터 받은 결괏값들을 취합하여 최종적으로 트레이딩을 할 것인가 말 것인가를 결정하는 컨트롤 타워 알고리즘이다. 수익/위험 프로파일을 고려하여 투자 결정을 하는 CIO(Chief Investment Officer)처럼 시장에 진입할 것인지 진입할 때의 포지션 규모를 어느 정도로 가져갈 것인지와 같은 결정들을 내려서 거래 실행 알고리즘에게 전송한다.

# 거래 실행 알고리즘 (Execution Algorithm)
실제 시장에 API(Application Programming Interface)와 DMA(Direct Market Access) 등을 통해 주문을 낼 때, 어떻게 해야 효율적이면서 빠르고 비용이 적은 방식으로 주문을 낼 수 있는지를 고려하는 알고리즘이다. 바이사이드에서도 거래비용을 최소화시키기 위해 거래 실행 알고리즘을 사용하는 추세가 강화되고 있으며 시간, 거래량, 호가 잔량 등을 고려하여 시장 임팩트를 최소화하려고 한다.

# 백테스팅 (Backtesting)
백테스팅이란 과거 데이터를 가지고 나의 전략을 사용했을 때 과연 어느 정도의 수익과 위험이 발생했는지를 검증해보는 것을 말한다. 물론 백테스팅의 결과가 미래의 수익을 보장해주지는 않으나, 백테스팅을 통해 과거에 해당 전략이 효과가 있었기 때문에 지금도 사용을 할지, 혹은 과거에는 효과가 없었기 때문에 어떻게 전략을 개선시킬지 아니면 아예 그 전략을 폐기할지 등을 결정하는데 필수적인 요소이다.

# 성과평가 및 최적화 알고리즘 (Performance Assessment & Optimization)
백테스팅 혹은 실제 트레이딩이 종료된 이후의 결과를 평가하고 좀 더 개선시킬 사항이 필요한지를 따져보는 마지막 단계가 바로 이 단계이다. 전략에 투입되어 있는 패러미터의 값이 적정한지를 살펴보기 위해 트레이딩의 성과를 다양한 지표들(총 수익률, 손익비, 손익 빈도, 손실률 등)을 통해 계량화시키고 패러미터 곡면(Parameter Surface)이나 다른 최적화 기법들을 통해 현시점의 최적 패러미터를 찾아내어 모델을 개선한다.

작가의 이전글 인플레이션을 위한 포지셔닝
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari