알고리즘 트레이딩 전략

마지막 업데이트: 2022년 6월 14일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

Archive

[Algorithmic Trading] Algorithmic Trading Overview | 알고리즘 트레이딩 개요 본문

[Algorithmic Trading] Algorithmic Trading Overview | 알고리즘 트레이딩 개요

Algorithmic Trading Overview

- System Trading, Algo Trading, Blockbox Trading이라고도 불린다.
- 사람이 아닌, 프로그램에 의해 진행되는 거래를 의미한다.
- 일반적으로, 증권시장에서 거래하는 "외국인"은 외국 사람이 아닌,
기관이나 헤지펀드에서 사용하는 알고리즘 트레이딩 프로그램인 경우가 대부분이다.
- 2012년 미국에서는 알고리즘 트레이딩 프로그램에 의한 거래가 `전체 거래의 85%를 차지할 정도로 일반화되었다.
- William M. Grove와 David H. Zald등이 작성한 에 의하면,
증권시장에서 수학적 모델이 사람과 비슷하거나, 사람보다 더 좋은 결과를 도출할 확률이 94%임을 확인했다.
- 알고리즘 트레이딩의 최강점으로 빠른 속도와 무감정이 있다.
- 주가 변화에 빠르게 대처하여 HFT(High Frequency Trading; 고빈도 매매)를 통해 수익을 창출할 수 있고,
사람과 달리 감정이 없어 합리적 판단을 통한 투자가 가능하다.
- 알고리즘 트레이딩으로 인해 비정상적인 많은 거래가 발생되어 시장의 교란이 발생되는 등 부정적인 면도 존재한다.
(Momentum을 이용한 모델들이 동시에 매도를 결정하게 되면, 해당 종목의 주가가 폭락하는 일이 발생한다.)

- 주식시장은 쉽게 데이터를 얻을 수 있고, 데이터들의 신뢰도가 높으며, 예측이 어렵다는 특징으로 인해
머신러닝 기술의 전체 흐름을 경험할 수 있게 하는 최적의 도메인 중 하나라 할 수 있다.

History of Algorithmic Trading (알고리즘 트레이딩의 역사)

- 아래는, 알고리즘 트레이딩의 발전의 중심에 있었던 인물들이다.

Edward Thorp (에드워드 소프)
- 알고리즘 트레이딩의 1세대
- 월스트리트에서 최초로 수학과 IT 시스템을 이용해 펀드를 운영했다.
- 1970년부터 1998년까지 투자회사 알고리즘 트레이딩 전략 Princeton Newport Partners를 운영하며
단 한 번의 손실 없이 연평균 20% 수익률을 냈다.
- Kelly Criterion (켈리 방정식)의 신봉자로, 켈리 방정식로 인해 성공적인 펀드 운영이 가능했다 주장하고 있다.
- Statistical Arbitrage(통계적 차익거래)에 기반을 둔 알고리즘 트레이딩 시스템을 주로 활용했다.

* Spread (스프레드; 차이)
- 은행) 대출 시, 덧붙여지는 금리 (스프레드 = 가산금리)
- 채권) 잔존 만기의 차이에 따른 채권 수익률의 차이
- 주식) 매도·매수 가격의 차이, 특정기간중 특정주식의 최저가·최고가의 차이
- 주식인수) 증권 발행자가 받는 금액과 투자자가 지불하는 가격의 차이

* Arbitrage (차익거래)
- 동일 상품이 지역에 따라 가격이 다를 때, 이를 매매하여 차익을 얻으려는 방법이다.

* Statistical Arbitrage (통계적 차익거래)
- 상관관계가 깊은 주식을 선택하고, Spread(매매가 차이)알고리즘 트레이딩 전략 를 통계적으로 분석해
적절한 Hedge(헤지) 전략을 수립하여 주식을 매매하는 방법이다.
- Pairs Trading(페어트레이딩)이 대표적인 통계적 차익거래에 속한다.

James Harris Simons (제임스 해리스 사이먼스)
- 헤지펀드사 Renaissance Technologies의 설립자
- 금융지식보다 수학과 IT기술을 중시하였다.
- Trend Following(추세 추종) 기반 알고리즘 트레이딩 모델을 사용한 것으로 알려져 있다.

* Trend Following (추세 추종)
- 긴 흐름의 추세가 시작되면 이를 파악하여 상승 흐름에 올라타는 것을 목표로 한다.
- 오랜기간 사용된 모델로, 수학적 이론이 잘 정리되어 있어 널리 사용되고 있다.

Kenneth C. Griffin (케네스 그리핀)
- 전환사채에 대한 아이디어를 얻어, 합자회사 Convertible Hedge Fund #1를 시작했다.
- 또한, 헤지펀드 Citadel의 설립자이기도 한데, Citadel은 가장 성공한 헤지펀드라 평가받고 있다.
- Citadel은 IT 기술을 적극적으로 활용하여,
모델의 개발, 검증, 실제 거래에 까지 많은 과정을 자동화했고, HFT 영역을 개척했다는 평을 받고 있다.

EDA (Explonatory Data Analysis; 데이터 탐색 분석)

- 데이터에 대한 이해와 특성을 파악하는 작업을 지칭한다.
- 일반적으로, 머신러닝 알고리즘 트레이딩 전략 기술을 이용해 프로그램을 작성하는 데,
머신러닝 알고리즘이 차지하는 비중보다는 EDA가 훨씬 중요한 포지션을 차지한다.
- 확률과 통계에 대한 수학적 지식을 기반으로 한다.

Algorithmic Trading Models (알고리즘 트레이딩 모델)

- 알고리즘 트레이딩에 사용되는 모델은 매우 다양하며 지금도 계속 개발되고 있다.
(Mean Reversion, Interday Momentum, Trend Following, Index Fund Rebalancing 등)
- Alpha Model(알파 모델)은 시장에서 평균보다 월등히 높은 수익을 내는 모델을 의미하고,
Beta Model(베타 모델)은 시장 평균 전후를 웃도는 수익을 내는 모델을 의미한다.
- 알고리즘 트레이딩에서 "모델"은 통상 알파 모델을 지칭하는 것이며,
이에 대한 접근 방법으로는 Theory Driven과 Data Driven 방식이 있다.

Theory-Driven Approach = Top-Down Approach
- 어떤 트레이딩 모델을 가정하고, 해당 모델의 맞고 틀림을 검증하여 알파 모델로 완성해 나가는 방법이다.
- Mean Reversion(평균 회귀)은 대표적인 Theory-Driven Approach의 모델이다.

* Mean Reversion Model (평균 회귀 모델) (URL)

[Algorithmic Trading] Mean Reversion Model | 평균 회귀 모델

Mean Reversion Model 평균 회귀 모델 - 알고리즘 트레이딩에서 널리 활용되는 모델 중 하나이다. Mean Reversion (평균 회귀) - 시계열 데이터는 과거 평균값으로 회귀하려는 경향이 있다. - 정규분포를 따

Data-Driven Approach = Bottom-Up Approach
- 데이터 분석을 통해 패턴을 찾아 이를 알파 모델로 구현해 나가는 방법이다.
- 가설, 이론적 배경 없이 데이터를 분석하며 지식을 쌓아나가는 방법이다.
- 인간 게놈 프로젝트가 데이터 중심 접근법으로 진행되었다.

Time Decay Effect (시간가치 감소 효과)

- 시간이 지날수록 알파 모델이 처음에 가졌던 알고리즘 트레이딩 전략 Edge(우위)가 퇴색되어가는 효과를 지칭한다.
- 높은 수익을 창출하는 알파 모델 개발에 성공했더라도, 지속적인 수익 창출을 위해서는
주기적인 테스트와 튜닝이 필수적이다.

시간가치 감소 효과의 발생 원인

1. 알고리즘 트레이딩의 일반화
- 많은 금융기관, 헤지펀드에서 알고리즘 트레이딩을 사용함으로써
나의 알파모델이 다른 알고리즘 트레이딩 시스템에 희석되거나,
Edge(우위)를 지속해서 선점하기 어려워졌다.
- HFT(High-Frequency Trading; 고빈도매매, 극초단타매매)가 인기를 얻고 있는 이유도 여기에 있다.

2. 표류하는 랜덤워크 모델을 따르는 주가
- 주가는 변동성이 일정하지 않은 모델이기 때문에
알파 모델을 적용한 초기에는 예측력이 높을지언정,
시간이 지날수록 변동성이 커져 해당 알파모델의 예측력은 당연히 낮아질 수 밖에 없다.

Python Libraries (파이썬 라이브러리)

NumPy
- 고차원 수학적 기능을 제공하는 오픈소스 파이썬 라이브러리이다.
- 벡터와 스칼라를 활용할 수 있고, DB와 연동하여 사용할 수 있다.
- ndarray 클래스를 통해, 다차원배열에 대한 빠른 처리 기능을 제공한다.

SCIPY
- 과학 연산에 필요한 기능을 제공하는 라이브러리이다.
- 최적화, 선형대수, 적분, FFT(Fast Fourier Transform, 고속 푸리에 변환) 등의 기능을 제공한다.

Pandas
- 금융 데이터 처리용 라이브러리이다.
- DataFrame 클래스를 통해 시계열 금융 데이터 처리에 필요한 각종 기능을 제공한다.

Matplotlib
- 그래프 작도, 데이터 시각화에 필요한 각종 기능을 제공하는 라이브러리이다.
- 그래프를 저장하거나 확대·축소하는 간단한 UI도 제공한다.

scikit-learn (sklearn)
- 파이썬 머신러닝 라이브러리이다.
- 딥러닝을 제외한 현존하는 거의 모든 머신러닝 알고리즘이 구현되어 있고,
데이터 처리와 머신러닝 학습결과를 분석하는 기능들도 제공하고 있다.
- 알고리즘에 관계없이, 사용법이 일관되어 직관적으로 이용할 수 있다.

Statsmodels
- 파이썬 통계 라이브러리이다.
- 데이터 탐색, 통계적 모델 추정, 통계 테스트 등 다양한 통계 관련 기능을 제공한다.

규도자 개발 블로그

이 사건을 이해하기 위해선 먼저 페어트레이딩이 무엇인지 알 필요가 있다. 페어트레이딩이라는 이름에서 유추할 수 있듯이 이 트레이딩방식은 가격 움직임의 유사성이 높은 알고리즘 트레이딩 전략 두 종목간의 가격 오르내림을 이용하는 전략이다. 예를 들어 유사성이 높은 A주식과 B주식이 있는데 A주식은 오름세가 강해지고 있고 B주식은 내림세가 강해지고 있다손 치면 언젠가 이 A주식은 내리고 B주식은 오름으로써 평소의 유사도로 회귀한다는 '예상'을 갖고 A는 매도, B는 알고리즘 트레이딩 전략 매수하는 것이 이 전략의 골자이다. 하지만 일반 주식현물은 매수 전에 먼저 매도계약을 가질 수 없기 때문에 전편에서 썼던 '주식선현물차익거래전략'에서 나오는 개별주식선물을 가진 종목들로만 할 수 있는 전략인 것이다.

내가 이 전략 알고리즘 매매 프로그램을 개발할 당시에는 주식과 ETF를 포함해 선현물 거래가 모두 가능한 종목은 총 151개였는데 지금은 몇 개인지 모르겠다. 그러니까 결국에 151개의 종목 각각을 또 150개와 비교하여(자기 자신 제외) 유사도가 높은 것들의 결과값을 보고 페어를 정하는게 이 전략의 첫번째 알고리즘 트레이딩 전략 단계이다. 그러니까 약 10,000여개의 페어라는 경우의 수가 존재하니 이들의 유사도를 구하는 게 과제였는데 이를 어떻게 해결할까. 바로 야후 파이낸스가 해결해주었다.

야후 파이낸스에는 특정 주식의 2000년대부터 오늘까지의 하루단위 종가를 가격을 가져올 수 있다. 사실 개별주식선물에 올라와있던 151개 전부보다는 주로 KOSPI종목만 지원해서 KOSPI종목들로만 페어트레이딩 대상을 구성했었던 것 같다. 지금 다시 파일을 까보니 총 125종목이다. 아무튼 그렇게 2000년대부터 오늘까지의 하루단위 종가데이터를 가져와서 모든 경우의 수를 계산한 결과는 아래 파일과 같다.

파일을 업로드하려는데 게시글 쓰는 에디터에 파일업로드가 없어서 당황했다. 근데 그냥 드래그 앤 드롭하면 되는구나. 아무튼 유사도가 높은 것부터 내림차순으로 정렬했으니 어떤 종목이 유사도가 높은지 열자마자 확인할 수 있을 것이다. 파일이 열기 귀찮은 사람들을 위해 스크린샷으로 보여주자면

위와 같은 순서대로 주가가 유사한 움직임을 보여준다고 할 수 있다. 보통 이 페어트레이딩에서 페어를 구할 땐 유사해보이는 두 종목을 갖고 분석을 한다. 그러니까 반도체 2대장인 삼성전자와 하이닉스를 예로 들자면 둘 다 각분야의 대장주이고 업종이 비슷하니 비슷한 움직임을 가지지 않을까? 한번 분석해보자! 하는 생각으로 두 종목을 선정하고 가격을 가져와 분석하는 것이다. 선 선정, 후 분석이라고 할 수 있는데 보통 페어트레이딩에 대한 페어들을 찾을 땐 이렇게 비슷한 업종과 비슷한 규모를 가진 회사라던가 혹은 지주회사와 계열사라던가 하는 방법으로 찾는다. 하지만 난 이 많은 회사들을 일일히 비교하기 힘들고 굉장히 시간이 많이 걸린다는 생각을 갖고 있었기 때문에 이렇게 모든 데이터를 가져와서 결과값을 도출한 것이다.

아참, 위 결과값은 상관계수(correlation coefficient)를 이용해 도출한 결과값이다. 식은

이런 형태이다. 간단하게 구하는 방법이 있는데 모집단의 공분산을 모집단의 표준편차 곱하기 표본집단의 표준편차로 나누면 구해진다. 수학적으로도 얘기를 좀 풀어보려고 생각해보다가 이걸 풀려니정규화가격, 분산, 공분산, 공적분, 샤피값 등등 갑자기 정신이 혼미해진다. 그러니까 대충 수학적인 얘기는 여기서 끊고 저 위의 목록들 중 좋은 예를 하나 들어보자.

아, 일단 이 글을 보는 누군가가 내가 이 과정에서 구한 아웃풋을 구할 수도 있으니 파일로 업로드해두겠다. 확인해보니 3월 12일까지를 기준으로 한 페어트레이딩 리스트에 상관계수, 공적분계수, 스프레드 평균, 잔차가 포함된 엑셀파일이다.

예를 쉬운 예(삼성-하닉, 혹은 기아차-현대차)로 들려고 했는데 다시 만들긴 귀찮고 하니 예전에 만들어준 예제를 통해 위 전략의 방법과 실패방법 그 모두를 설명하겠다.

위 그래프는 더 위에 있는 페어트레이딩 리스트 2위에 랭크돼있던 0.973이상의 유사도를 보여준 현대해상과 DB손해보험의 20년간 일간 종가 정규화 가격 이동 그래프이다. 그림이 작아 보이지 않는다면 파란색이 현대해상, 주황색이 DB손해보험의 그래프라고 보면 된다.

아무튼 페어트레이딩이라는 전략의 시나리오대로라면 파란색이 위에 있을 땐 현대해상 매도, DB손보 매수를 하고 두 그래프가 교차되는 시점이 온다면 포지션을 청산하고, 다시 주황색이 위에 있을 땐 DB손보 매도, 현대해상 매수를 하고 두 그래프가 교차되는 시점이 온다면 포지션을 청산. 이런식으로 움직이는 것이다. 이것이 평균회귀를 신뢰하는 데서 착안한 페어트레이딩이라는 전략의 골자이다.

말로만 설명하면 참 쉽다. 전에 시도했던 선현물차익거래전략과는 달리 시간적인 민감함도 필요 없다. 하지만 보다 심플하고 간결한 문제가 있었다. 바로 '회전율'이 좋지 않다는 점이다. 심지어는 한국시장의 개별주식선물은 매월 두번째 목요일이 결제일이기 때문에 포지션을 청산하지 않는 이상 매월마다 롤오버비용이 월단위 고정비용으로 들어가게 된다.

자, 위의 그래프를 확대해서 구체적인 예를 들어보자.

2011년부터 2015년까지의 정규화가격 그래프를 확대해봤다. 마찬가지로 파란색이 현대해상, 주황색이 DB손해보험이다. 이 케이스에서 베스트 시나리오라고 한다면 내가 터치패드로 꾸물꾸물 구려놓은 1번 시점에서 현대해상을 매도, DB손해보험을 매수하고 다음에 오는 체크포인트(정규화 가격 그래프가 겹치는 시점)에서 청산을 한 뒤에 2번 시점에서는 DB손해보험을 매도, 현대해상을 매수한 뒤에 다음 체크포인트에서 청산하면 된다.

글로는 정말 간단하면서도 완성돼있는 차트를 보면서 시나리오를 그려보면 너무나도 뻔한 흐름이지만 실제로 시장이 돌아가고 있는 동안은 1번시점이 제일 많이 벌어진 시점이라는 걸 유추하긴 쉽지 않다. 그러니까 결국 분할진입이 필요하다는 것이다. 분할진입의 기준은 공적분계수와 샤피를 이용하여 구한다손 쳐도. 물론 이것도 쉬운 알고리즘은 아니지만 그럼에도 불구하고 더 큰 문제가 남아있다. 위에서도 말했던 롤오버 비용이다. 베스트 시나리오라고 생각했던 1번진입후 청산, 2번진입후 청산하는 이 과정은 약 16개월(1번 진입후 청산) + 12개월(2번 진입후 청산), 총 28개월의 기간이 걸린다. 예를 든 이 케이스 말고도 20년짜리 페어 트레이딩 그래프를 보면 알겠지만 한 번의 진입과 청산에 못해도 몇 개월씩은 걸린다. 이 개월개월이 전부 비용이라는 것이다. 정말 우연에 우연의 일치가 계속돼 롤오버를 해야하는 시점마다 완벽한 조건의 호가가 존재한다고 해도 롤오버 한번의 총 투자금액의 0.012%가 계속 소비된다. 이게 1년이면 0.144%가 된다. 그럼에도 불구하고 이 페어트레이딩 전략이란 장기간에 걸쳐 적게는 몇 퍼센트, 많게는 수십 퍼센트의 이익을 얻을 수 있으니 감수할만하지 않냐고 하겠지만 이건 말 그대로 우연에 우연의 일치를 더한 것이다. 실제 돌아가는 시장에 대입해보면 베스트 케이스라고 해봤자 롤오버할 때마다 상대가에서 1호가 불리하게 체결된다. 전편에서 말했듯이 1,000원짜리 주식이라면 5원, 100,000원짜리 주식이라면 50원, 뭐 이런 식 말이다. 매도계약을 들고 있다면 매도계약의 상대가인 매수계약은 분명 매도계약보다 저렴하게 형성돼있는데 그 가격으로 처분할 수밖에 없고, 매수계약을 들고 있다면 그 반대가 된다. 1000원에 체결한 주식선물의 매수계약을 예로 들자면 현재 매도1호가가 995원일 때 청산하여 5원의 손해를 보고, 995원이 매도1호가이면 호가창이 타이트하게 구성돼있다는 가정 하에 매수1호가는 990원일 것이므로 그 가격으로 새 계약을 체결해야 한다. 매도계약 또한 마찬가지이다. 결제일이 다가오면 다가올수록 주식 현물의 가격과 비슷해지므로 호가창 또한 비슷한 흐름을 보이는데 보통 이런 흐름이라고 보면 된다. 아무튼 중요한 건 주식선물을 보유하는 것 자체가 리스크라는 것이다. 그리고 실제로 프로그램으로 돌리고 있었다면 1번시점 뿐만 아니라 1번으로 다가가는 시점에 알고리즘 트레이딩 전략 계속해서 계약들을 쌓아나갔을 것이기 때문에 롤오버를 하게 될수록 불리한 가격으로 체결을 하기 때문에 손해가 극심해진다. 수수료 + 상대가 체결에 의한 손해가 이 전략의 리스크이다.

그리고 추가로 주식선물엔 multiplier개념이 있는데 1계약이 주식 10개의 가치를 갖고 있고 뭐 그런 거다. 한국용어로는 '승수'라고 한다. 그러니까 간단하게 말하자면 주식선물은 한번에 주식을 10개씩 사거나 팔아야 한다는 얘기다. 이렇게 커다란 뭉치로 거래되는 주식선물을 정규화된 가격으로 두개의 페어 모두 똑같은 가치를 지닌 양만큼 계약을 체결한다면 과연 그 비용이 얼마나 될까. 예를 들어 A주식은 10,000원이고 B주식은 1,000원이라면 A주식의 선물은 1계약당 100,000원이 되고 B주식의 선물은 1계약당 10,000원이 되는데 이 두 주식을 똑같은 가치만큼 갖고 있어야 가격이 오르내릴 때마다 그 차액만큼의 이득을 얻을 수 있을 것 아닌가. 결국 이 둘의 notion을 맞추려면 A주식의 선물 1계약당 B주식의 선물 10계약을 들고 있어야 한다.

하지만 보통 이렇게 완벽히 10배의 가격을 가진 종목끼리 페어가 될리 만무하지 않은가. 간단하게 하이닉스와 삼성전자를 예로 들자면 글을 쓰고 있는 현재 삼성전자의 종가는 79,900원이고 하이닉스의 종가는 121,500원이다. 그렇다면 삼성전자 선물의 1계약은 799,000원, 하이닉스 선물의 1계약은 1,215,000원이 될 것이다. 하지만 이렇게 단순히 1계약씩 하면 두 종목 사이의 차액인 416,000원이라는 델타가 뜨게 된다. 이는 총 notion금액인 2,014,000원의 20%에 해당하는 큰 금액이다. 그러니까 결국 삼성전자 3계약으로 2,397000원을 삼성전자 선물에, 하이닉스 2계약으로 2,430,000원을 하이닉스 선물에 투자해야지만 어느정도 두 종목 사이의 괴리를 줄일 수 있게 되는 것이다. 이렇게 하면 차액은 33,000원으로서 notional의 0.68%에 해당하는 합리적인 델타만 남는다. 물론 이 과정은 시장의 변동에 따라서 계속해서 비율이 달라진다. 당장 내일 삼성이 6만원 되고 하이닉스가 12만원이 된다고 치면 위에서 예를 든 것처럼 3:2계약이 아닌 2:1계약을 해야 한다.

그러니까 정리하자면 너무나도 큰 금액이 필요하고, 롤오버비용이 상당하고, 한 번의 청산까지 엄청나게 오래걸린다는 것 때문에 페어트레이딩 전략 또한 무위로 돌아갔다. 이것을 계기로 주식시장에서의 퀀트전략은 접게 된다. 그렇다면 다음은? 바로 암호화폐시장 알고리즘 트레이딩 전략 퀀트이다. (물론 망했다)

starryperson

이제 실제로 제가 사용할 알고리즘 매매 전략을 만들고, 수정하는 작업을 보여 드리겠습니다. 저번 포스팅 프로그램 알고리즘 계획하기 에서 잠시 선보인 전략을 수정하여 간단한 프로그램을 제작해 보겠습니다. 참고로 제 사이트에서는 완성된 전략을 선보이지 않습니다. 다만 제 개인적인 알고리즘 매매 프로그램을 만들어 가는 과정을 기록하는 것 뿐입니다. 참고만 하시길 바랍니다.

실전 알고리즘 매매 전략

기본적으로 만들 전략은 단타 전략입니다. 단타 전략이기 때문에 3분봉이나 5분봉을 이용할 계획입니다.

시스템 트레이딩 매수 전략

  • 3분봉 기준 현재 종가가 전일 고가보다 높아야 한다.
  • 당일 현재까지 거래량이 전일 거래량보다 커야 한다.
  • 두 조건을 만족하면서 3분봉에서 5일선을 하락에서 상승으로 전환 시켜야 한다.

매수 전략은 간단히 3가지로 압축했습니다. 물론 단타에서 제일 중요한 호가창을 배제 할 수는 없습니다.

호가창까지 알고리즘 전략에 포함 시키다 보면 처음부터 복잡해 지기 때문에 일단 프로그램 큰 틀을 먼저 잡을 예정입니다.

  • 3분봉 기준 현재 종가가 전일 고가보다 낮아야 한다.
  • 당일 현재까지 거래량이 전일 거래량보다 커야 한다.
  • 두 조건을 만족하면서 3분봉에서 5일선을 상승에서 하락으로 전환 시켜야 한다.

트레이딩 매도 전략은 매수 전략과 정 반대로 입력하겠습니다. 나중에 결과를 보고 익절, 손절을 추가하여 최적화를 시킬 예정입니다. 거래량 관련 조건은 매도 전략과 매수 전략이 같은 데, 이건 어차피 매수가 된 상태에서 매도 주문을 할 수 있게 때문에 조건을 똑같이 했습니다.

몇 개의 종목을 예를 들어 챠트로 보여 드리겠습니다.

시스템 트레이딩 전략 적용 종목(미래생명자원) 시스템 트레이딩 전략 적용 종목(PN풍년) 시스템 트레이딩 전략 적용 종목(가온칩스)

붉은색 화살표는 매수이고 파란색은 매도입니다. 첨부 그림만 보면 좋아 보이지만 전에도 말 했듯이, 이건 그냥 보기 좋은것 일뿐 실제 프로그램을 돌리기 시작하면 예상치 못한 문제가 많이 생기고, 위 사진과 전혀 다른 결과가 나올수 있습니다.

이제 알고리즘 전략을 완성 했으니, 다음 단계인 코딩을 해야 합니다.

이제 아직 시스템 트레이딩을 접해 보지 못 한분들이 가장 접근하기 어려운 코딩입니다. 저 또한 코딩을 전혀 알지 못해서, 책, 유튜브, 구글 검색과, 10만원 정도의 강의를 통해 기초를 배웠습니다. 하지만, 진짜 코딩 실력은 스스로 이것저것 타이핑 해서 실행 해보고, 오류 수정도 하고, 생각을 컴퓨터 언어로 어떻게 표현할지 고민도 하고 이런 과정들이 실력을 키우는데 정말 많은 도움이 됩니다.

저 또한 코딩의 전문가도 아니고, 컴퓨터와 관련이 없는 직장에서 항상 시간에 쫓기는 환경이니, 여러분들도 의지만 있다면, 저 보다 훨씬 더 나은 코딩을 할 수 있을 거라고 생각합니다.

제가 알고리즘 트레이딩 시스템을 만드는 과정이 전문가들이 보기엔 너무 기초적이겠지만, 혹시나 이 분야에 처음이신 분들에게 작은 도움이 되었으면 합니다. 전략을 세웠으니 이제 프로그램의 큰 틀을 세운 것과 같습니다. 이번 프로젝트가 꼭 성공하길 바라며.

알고리즘 트레이딩

알고리즘 트레이딩

20 세기 말, 금융 시장에서의 거래 과정은 컴퓨터 기술의 급속한 발전으로 바뀌고 완전히 전자화되었습니다. 알고리즘 트레이딩으로 알려진 별도의 거래 부문도 나타났습니다.

알고리즘 트레이딩

알고리즘 트레이딩은 수학 알고리즘 기반의 컴퓨터 프로그램을 통해 다양한 금융 상품의 거래 주문 및 관리를 자동화된 시스템입니다. 알고-트레이딩에서 거래는 인간의 참여없이 이루어집니다. 알고리즘 트레이더 또는 금융시장 트레이더는 프로그래밍 언어의 다양한 알고리즘 트레이딩 전략 상황에서 로봇의 동작 알고리즘 (기계식 거래 시스템 (MTS; Mechanical Trading System))만 설명합니다. 그들은 금융 상품의 이전 가격 분석을 기반으로 주어진 범위에서 미래 가격의 하락 가능성을 예측합니다. 로봇은 거래 자산의 가격 차트에서 특정 변동이 발생한 경우 알고리즘 트레이딩 전략 거래를 시작하거나 종료합니다. 인기있는 알고리즘 트레이딩 방식은 고주파 거래 (HFT; High Frequency Trading), 즉 매우 빠른 속도로 전자 거래를 수행하는 것으로 간주됩니다. 높은 수익을 창출하기 위하여 고주파 로봇은 대량으로 단기간의 포지션을 개설하고 마감합니다.

알고리즘 거래 전략

프로그래머가 거래 로봇에 설치한 알고-트레이딩 전략이 많이 있습니다. 주요 전략은 다음과 같습니다.

거래량 가중평균 가격 (Volume Weighted Average Price; VWAP) – 더 나은 공급 또는 수요 가격으로 일정 기간 내에 요청 볼륨을 균일하게 분배하지만 지정된 기간 동안의 볼륨 가중 평균 가격을 초과하지 않습니다.

시간 가중평균 가격 (Time Weighted Average Price; TWAP) – 요청을 실행하고 동일한 시간 간격으로 요청을 균등하게 나눕니다. 이 전략은 시장에 부정적인 영향을 줄 수있는 예측 거래량 변화를 고려하지 않습니다.

거래량 비율 (Percentage of Volume; POV) – 사용자가 선택한 시장 참여의 고정 백분율을 지원합니다. 그것은 거래량 증가에 잘 반응하여 작고 빈번한 거래를 합니다.

아이스버그 (빙산, Iceberg) – 매도 또는 매수 요청을 설정하는데 이것은 시장 알고리즘 트레이딩 전략 요청의 전체 사이즈를 표시하지 않습니다. 잠재적 매수자는 요청의 일부만볼 수 있고, 주문 실행 후에만 다음 부분이 발행됩니다. 이것은 완전히 구현 될 때까지 계속됩니다.

추세 추종형 전략 (Trend Following Strategies) – 전략의 주요 목표는 다음과 같습니다. 다양한 알고리즘 트레이딩 전략 기술적 분석 지표를 통해 신흥 트렌드를 조기에 탐지, 추세 방향으로 거래하기 위한 신호 보내기, 추세가 끝나는 징조가 있을 때 포지션 마감에 대한 신호의 보내기

차익 (Arbitrage) – 다양한 시장에서 동일하거나 동등한 상품에 대한 가격 편차를 고정하는 외환 시장 로봇은 한 곳에서 저렴하게 매수하고, 다른곳에서 즉각 매도합니다. 상품 가격이 일치하고 포지션이 수익을 가지고 마감할 것이라는 기대를 가지고 거래합니다. 차익은 로봇이 짧은 기간 동안 자산을 ​​구매하고 급격한 가격 변동을 피하기 때문에 위험이없는 전략으로 간주됩니다. 따라서 차익 거래의 수익은 중요하지 않으며 총 수익성은 거래 빈도에 따라 결정됩니다.

초단타 (Scalping, 스캘핑) – 단기 일중 투기 거래를 위한 전략입니다. 고주파 로봇은 스캘핑에 가장 일반적으로 사용되는 로봇으로, 단 몇 핍으로 적은 이익을 얻는 경우 몇 초동안 포지션을 개설/마감합니다. 기본적으로 이 전략은 매출액 대피 수수료가 상당히 낮은 파생 상품 시장에서 사용됩니다.

페어 트레이딩 (Pair Trading) 또는 통계 차익 거래 – 이 전략은 시장의 다양한 상품 간의 상관 관계를 식별하고 이들 간의 불균형으로 인한 수익창출을 목표로 합니다. 즉, 짧은 시간 간격동안 한 자산이 다른 자산에 비해 저평가되거나 과대 평가 될 수 있습니다. 로봇은 이동 평균 값에서 현재 비율의 편차를 고정하여 바로 그 순간을 사용합니다. 거래 속도, 감정 부재, 높은 시장 유동성 제공, 시장 변동성 감소에 관한 모든 장점을 갖춘 알고리즘 거래이지만, 몇 가지 단점이 있습니다.
- 고주파 알고리즘 트레이더는 과도한 요청 수를 만들어 종종 시장 운영을 복잡하게 만듭니다.
- 시장의 변동성이 비합리적으로 증가합니다. 예를 알고리즘 트레이딩 전략 들어, 2010년 5월 6일 몇 분 동안 다우존스(Dow Jones) 지수가 8.6% 하락했습니다. 시장 손실은 1조 달러 이상이었습니다. 그 후 90초 동안 지수는 543 포인트 (4.67%)를 회복했습니다. 이유는 시장 변동의 불확성이 있을 경우 고주파 로봇이 모든 포지션을 청산했기 때문입니다. 지수 하락이 시작된 배경에서 유동성의 급격한 유출은 경제적인 기초 없이 과도한 강화로 이어졌습니다.
- 알고리즘 시스템의 실패. 프로그램의 실패로 인하여, 시장의 주요 업체들이 파산 직전에 있는 경우도 있습니다.

steloflute

31. SOBI 전략의 시험 (3) 전략편 / 알고리즘 트레이딩[출처] 31. SOBI 전략의 시험 (3)|작성자 아마퀀트

31. SOBI 전략의 시험 (3)

알고리즘 트레이딩 (Algorithmic Trading) - 전략 (31)SOBI 전략의 시험 (3) SOBI 전략의 시험 (.

알고리즘 트레이딩 (Algorithmic Trading) - 전략 (31)


SOBI 전략의 시험 (1) 글의 덧글 내용 중 Mid VWAP을 구할 때 전체 VWAP으로 계산하는 것이 타당할 것 같다는 의견이 있었다. 포스트에서는 Mid VWAP을 계산할 때 (Ask측 VWAP + Bid측 VWAP) / 2 로 계산했는데, 덧글의 내용은, Mid VWAP = (전체 호가 * 잔량 의 합) / (매수 매도 잔량의 총합)으로 계산하는 것이 타당하다는 의견이었다. 필자도 이 의견이 타당할 것 같아 Market Simulator로 시험해 보았다. 그런데 의외의 결과가 나타나서 정리해 보기로 한다.

이 방식으로 아래와 같이 스크립트를 짜서 여러 차례 돌려보았더니, 지속적으로 손실이 발생하였다. 왜 그럴까 ??


이전 글의 SOBI 전략은 아래의 자료를 참조한 것이다. 아래 자료는 필자가 Market Simulator를 만들 때 참조한 자료로, 펜실베니아 대학과 리만브라더스의 Prop. 팀이 공동으로 수행한 자동 거래 프로젝트 관련 자료였다. 이 자료에 소개된 SOBI 전략의 원문은 아래와 같다.


. known as the Static Order Book Imbalance (SOBI) strategy. This strategy computes volume-weighted average prices (VWAP) of (quartiles of) the PXS buy and sell order books, and compares them to the PXS last price. The basic idea is that if, for example, the VWAP of the buy book is much further from the last price than the VWAP of the sell book, it is a sign that buyers are less supportive of this price than are sellers, as indicated by their limit orders (statistically) standing further off. In this case, SOBI will place an order to sell shares, on the theory that the weaker buy-side support will cause the price to fall.

이 글의 의도는 Bid측 VWAP과 last price (or Mid price)의 거리 (d1)와 Ask측 VWAP과 last price와의 거리 (d2)를 측정해서 d1 > d2 라면 매도 신호로 이용한다는 것이고, 이전 글의 테스트도 이 원리를 사용했다. 즉, d1 = midPrice - bidVwap 이고 d2 = askVwap - midPrice 이므로, midPrice - bidVwap > askVwap - midPrice 이면 매도 신호이다. 즉 midPrice > (askVwap + bidVwap) / 2 이면 매도 신호이다. 이전 글에서 midVwap = (askVwap + bidVwap) / 2 이므로, midPrice > midVwap 이면 매도 신호이다. --> (방식-1)

그런데 덧글의 내용처럼 midVwap = (전체 호가 * 잔량의 합) / 전체 잔량으로 계산하여 midPrice와 비교하면 위와 같이 손실이 발생한다. --> (방식-2)

(방식-1)과 (방식-2)가 서로 다른 신호를 발생하는 예를 들어보자. 위쪽에 있는 호가창은 잔량에 대해 균형상태에 있다 (Ask와 Bid쪽의 잔량이 정확히 대칭을 이루고 있다). 이 상태에서는 (방식-1) 이나 (방식-2) 모두 균형상태를 가리킨다. 아래에 있는 호가창은 2-번째 호가에서 불균형이 발생하였고 (Ask 측이 얇아지고, Bid 측이 두꺼워 졌다), (방식-1)과 (방식-2)의 신호는 서로 반대로 나타난다 (상세 계산 방식은 첨부 파일 참조).


잔량이 불균형을 이루는 모양은 여러 형태가 있겠지만, 아래와 같이 3가지 형태를 살펴보자. (1)은 가장 간단히 생각해 볼 수 알고리즘 트레이딩 전략 있는 균형 상태이다. (2)는 실제 시장에서 발생하는 균형상태이다. 실제 시장에서는 호가가 시장에서 멀어질수록 잔량이 커지는 분포를 하고 있다. (3)은 불균형이 발생한 상태이고, ask측 distance가 bid측 distance 보다 크므로 매수 신호로 작용한다. 물론, 실제 시장에서는 (3)과 같은 분포가 발생하기는 어렵다. 여기서는 단지 이해를 돕기 위해 과장되게 그려본 것이다.


PLAT project에 소개된 SOBI 전략 (방식-1)은 바로 위 그림의 (3)과 유사한 상태를 (혹은 반대 상태) 포착하는 전략으로 이해된다. 그리고 (방식-2)는 전체 잔량이 어느 쪽이 더 두터운지에 초점을 둔 전략으로 이해된다. Distance를 고려하지 않고 그냥 전체의 VWAP과 mid Price를 비교하려면 매수/매도 신호를 반대로 해석해야 될 것으로 생각된다. 즉, (방식-1)과 (방식-2)는 전혀 다른 의미의 전략이다.


0 개 댓글

답장을 남겨주세요