BLOG main image
ddd (50)
CUDA programming (0)
알고리즘 트레이딩 (5)
Cherry Picker 개발 (23)
TSimulator 개발(종료) (11)
IT 노트 (1)
잡동사니 (2)
사진 (4)
일기 (4)
이력서 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
'2014/01'에 해당되는 글 4건
2014. 1. 25. 20:53

나중에 환경설정시에 바로 도움이 되기위해 텍스트 편집기 설정을 기록한다.





라인번호 표시





탭 설정





폰트 변경





컬럼리밋 설정


2008 에서는 약간의 트릭을 써야한다. 2010 버전에서는 extension 프로그램이 있다.

일단 '시작 -> 실행' 이나 '윈도우키+R' 로 실행을 띄우고 'regedit' 를 치고 확인을 누른다.

그럼 레지스트리 편집기가 뜨는데 다음 경로로 가자.


[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\Text Editor]


그리고 '마우스 우클릭 -> 새로만들기 -> 문자열 값' 을 누른 후 맨 아래부분에 Guides 부분을 추가해준다.





현재라인 하이라이트


현재라인 하이라이트 기능

이 기능은 2008 에서 기본제공이 안돼서 addin 을 설치해야한다.

'SlickEdit Gadgets v2 for Visual Studio' 을 받고 실해해서 설치하자. 설치 후 visual studio 를 수행시키면 메인메뉴에 SlickEdit 가 생기고 'Editor Gadgets' 에서 각종 설정들이 가능하다.




2014. 1. 25. 11:49

Cherry Picker 라이브러리를 이용한 응용프로그램 개발시에 release 모드와 debug 모드에 따른 프로젝트 속성에 대해 정리해두고자 한다. 다음 설정들은 별다른 경고 또는 에러메세지가 없이 컴파일 및 실행되는 설정들이고 Visual Studio 버전은 2008 이다. 참고로 release 모드가 debug 모드보다 7 배 정도로 좋은 성능을 낸다.






Release Mode



== Cherry Picker 라이브러리 ==


주의점 : stdafx.cpp 은 파일 속성에서 '미리 컴파일된 헤더 만들기' 설정. 그 외 모든 cpp 파일은 '미리 컴파일된 헤더 사용 안함' 으로 설정하자. 자세한 내용은 다음 포스팅 참조..

-> 'Cherry Picker 정적 라이브러리 생성 시 링크 에러 해결방법'





== 응용 프로그램 ==










Debug Mode



== Cherry Picker 라이브러리 ==







== 응용 프로그램 ==





2014. 1. 15. 07:14

TWAP 은 풀어서 'Time Weighted Average Price' 이며 직역하면 '시간가중평균가격' 정도가 되겠다. 시시각각 변하는 가격을 주기적으로 수집하여 평균을 계산하는 것인데 이동평균과 비슷한 맥락이라고 생각하면 된다.


TWAP 은 알고리즘 트레이딩 세계에서는 대량의 증권을 시장충격을 최소화하고 매수 또는 매도하는 전략으로도 해석된다. 뭔가 거창하게 들리지만 그냥... 사고자하는 주식을 균등하게 나눠서 주기적으로 사거나 팔거나... 이다. 조금이라도 복잡성을 찾고자 한다면 사고자하는 수량이 상대1호가보다 많을 경우에 유리하게 매매하는 방법을 연구하면 된다. 그 외에는 초등학생도 쉽게 집행할 수 있는게 TWAP 이다.


TWAP(혹은 VWAP) 전략이 필요한 이유를 그림으로 설명해 보겠다. 다음 호가창을 보자.





어떤 상장 대기업의 대주주가 있고 그 대기업의 주가는 KOSPI200 과 아주 비슷하게 움직인다고 가정해보자. 이 대주주는 자신이 가지고 있는 주식 가격의 하락으로 인한 자산감소를 방지하고자 KOSPI200 지수선물을 1000 계약 매도하고자 한다.

(물론 해당 기업의 주식선물이 존재한다면 KOSPI 200 지수선물이 아닌 그 주식선물을 매도하는것이 맞지만 가지고 있는 자료가 선물 호가창뿐이라 선물을 헤지수단으로 정했다.)

이 대주주가 매도집행하는 방법은 여러가지가 있지만 다음 네 가지 방법 중 하나를 선택한다고 가정하자.


1. 마우스에 손을 얹고 무작위 시간에 1000 계약 시장가 매도

2. 선물가격이 고점이라고 판단했을 때 1000 계약 시장가 매도

3. 1000 계약을 7등분하여 매시간 142 계약씩 시장가 매도(9시~14시 정각에는 142 계약, 15시에는 148계약)

4. 1000 계약을 7등분하여 매시간 142 계약씩 호가를 컨트롤하며 지정가 매도


대주주가 이러한 선택지를 가지게 된 이유는 1000 계약의 선물 매도를 완료했을 때, 평균매도가격을 최대한 높히고 싶어서다. 대주주가 정확한 판단력을 가진 사람이라면 2 번이 가장 높은 평균매도가격을 가지게 될것이다. 1 번은 2 번과 같은 평균가를 가지거나 3, 4 번보다 좋을수도 혹은 나쁠수도 있다. 3 번과 4 번은 그 날 취할 수 있는 최악의 평균가격은 분명 면할 것이다. 하지만 3 번보다 4 번이 유리한 평균가를 얻을 확률이 높다.

3 번과 4 번의 방법 중 시장가 주문이 불리한 이유는 3 번 방법의 경우 시장가 주문을 함으로서 호가창의 매수 1 호가의 모든 잔량을 취하고도 매수 2 호가에서 59 계약을 더 취하게 돼 142 계약의 매도평균가격은 255.23 이 된다. 지정가 주문으로 아주 잘~컨트롤된 매도집행은 현재가인 255.25 이거나 시장가로 집행한 255.23 보다는 높은 매도평균가격을 갖게될 것이다.

위 방법 중 3 번과 4 번이 TWAP 알고리즘에 해당하는데 이는 최선도 최악도 아닌 그나마 평균적인 성과를 내는 방법이다. 최악의 성과를 내느니 차라리 최고는 아니지만 평균성과라도 내고싶을 때 아주 유용한 방법이다.


이제 실제로 TWAP 이 어느정도 성과가 있는지 과거데이터로 테스트를 해보겠다. 테스트 방법은 다음과 같다.


=============================================================

* 기간은 2009년 1월 2일 ~ 2013년 9월 30일 (1184 일)

* 매일 선물 10000 계약 매수목표

* TWAP 알고리즘은 9시 1분부터 장종료(15시 15분)까지 매분 27 계약씩 366 번의 선물을 매수

  (10000 / 366 은 27.32 라서 27 계약으로 결정했고 매수 완료후 118 계약이 남지만 무시하고 27 계약씩만 매수)

* 매분 종가로 매수

* 각 호가의 잔량정보가 있으면 좋지만 OHLC 정보밖에 없으므로 '종가 = 매도 1 호가'로 가정한다.

* 종가에 27 계약 모두 무조건 매수 가능하다고 가정한다.(호가잔량정보 부족의 한계)

=============================================================


이렇게 테스트를 해봤고 일별 선물 고가와 저가 사이에 어느정도의 평균가격으로 선물이 매수됐는지 며칠동안의 그래프를 살펴보면 다음과 같다.





예상한대로 TWAP 은 대략 고가와 저가의 중간값으로 나타났다.


근데 과연 정말 중간값일까...? 먼저 위 그래프에서 '당일 TWAP' 부분과 당일 '( 당일 고가 + 당일 저가 ) / 2' 값을 비교해봤다.





위의 그래프로는 두 데이터계열이 엎치락뒤치락한다. 샘플이 너무 적고 눈으로 식별해야 하는 불편함이 있으므로 테스트된 1184 개의 데이터의 정보를 산출해봤다.





TWAP 과 중간값의 차이는 한틱(0.05포인트)이 조금 넘는 값이다. TWAP 값이 아주 조금 높게 나온 이유는 급락에 의한 저가가 생성되어 중간값을 끌어내린 경우가 많기 떄문이다. 실제로 1184 개의 샘플 중 TWAP 이 고저가 중간값보다 낮은 경우가 그렇지 않은 경우보다 128 일이나 더 많았다. 



결론


선물 TWAP 과 선물 고저가격 중간값은 1184 개의 과거 샘플에 의해 평균적으로 대략 한 틱정도의 차이를 보였다. 이는 TWAP 알고리즘으로 증권을 매도 또는 매수하면 그 날의 고가와 저가의 중간값으로 거래하는것과 거의 같은 효과가 있음을 의미한다. 단, 한 틱이 조금 넘는 값의 차이로 평균 선물 TWAP 이 평균 선물 고저가의 중간값보다 높으므로 샘플에 의하면 선물 TWAP 거래시 매도가 매수보다는 한 틱가량 유리하다.



P.S.

TWAP 을 개선한 것이 VWAP(Value Weighted Average Price) 인데 다음 포스팅에서는 호가잔량 정보 및 거래량 정보를 사용하여 TWAP 과 VWAP 의 성과비교를 해보겠다.

2014. 1. 4. 16:05

옵션을 매매는 기초자산의 방향성보다는 기초자산의 변동성을 매매한다는 표현이 더 어울린다. 그래서 옵션을 매매하는 사람들은 기초자산의 변동성 예측에 많은 신경을 쓰게된다. 그러므로 현재 기초자산의 변동성이 어느정도 수준인지를 아는것 또한 매우 중요하다.

변동성은 높아지거나 낮아져도 평균수준으로 회귀하는 특성이 있는데, 현재 변동성이 역사적으로 최대값이나 최소값에 접근한 상태라면 평균으로 회귀할 가능성이 상당히 높다. 특정 변동성의 수준을 쉽게 알기위해 잔존만기에 따른 역사적 변동성의 최대값과 최소값을 나타내는 지표 중 하나가 변동성콘(Volatility Cone)이다.

다음 그림은 변동성콘의 예시이다. 어디서 퍼오면 저작권에 위반될것 같아 직접 그려봤다....






만약 잔존만기가 5 일이고 기초자산인 지수의 현재 변동성이 23% 라면 변동성콘의 상단 경계부분인 25% 에 근접했으므로 옵션 매수보다는 매도전략이 유리함을 알 수 있다.


만약 어떤 변수가 변동성같이 시간이 지남에 따라 회귀현상이 관측된다면 이런 Cone 차트를 적용시킬 수 있을것이다. 이 아이디어에 기초해서 만들어 본것이 총호가순건수콘과 총호가순잔량콘이다. 총호가순건수란 매수호가총건수에서 매도호가총건수를 차감한 값이고, 총호가순잔량이란 매수호가총잔량에서 매도호가총잔량을 차감한 값이다. 두 값 모두 다음과 같이 HTS 호가창에서 관찰이 가능하다.





위 화면의 최하단에 다섯 개의 숫자가 일렬로 보이는데 왼쪽부터 순서대로 각각 다음을 의미한다.


==================== HTS 호가관련 정보 설명 ====================

총매도호가건수 : 1,172

총매도호가잔량 : 5,915

총호가순잔량    : -2,154 (총매수호가잔량(5,915) - 총매도호가잔량(3,761))

총매수호가잔량 : 3,761

총매수호가건수 : 670

P.S. : 총호가순건수는 계산되어있지 않지만 총매수호가건수(670)에서 총매도호가건수(1,172)를 뺀 -502 임을 알 수 있다.

=======================================================


총호가순건수(과 총호가순잔량)는 다음과 같이 시간이 지남에 따라 0 으로 회귀하므로 cone 으로 만들어 전략에 참고할 의미가 있다. (있을지도 모른다고 믿고싶다...-_-)





본인이 만들어본 총호가순건수콘과 총호가순잔량콘이 변동성콘과 다른점이 있다면 가로축이 잔존만기가 아닌 시각이다. 측정을 위해 수집된 데이터 정보는 다음과 같다.


=============== 총호가순건수콘, 총호가순잔량콘 정보 설명 ===============

계측기간    : 2009/01/01 ~ 2013/09/30

수집데이터 : 9, 10, 11, 12, 13, 14 시 정각의 총호가순건수값, 총호가순잔략값 (KOSPI200 선물 최근월물)

계산값       : 각 시각의 총호가순건수값, 총호가순잔량값의 최대값, 최소값, 평균값

=========================================================


Cone 구성에 필요한 정보를 추출하는 코드는 대략 다음과 같다.




위에서 구한 값들로 cone 정보를 구하면 다음 표와 같다.





이를 보기좋게 그림으로 표현하면 다음과 같다.



총호가순건수 cone


총호가순잔량 cone



위의 그림과 같이 두 개의 cone 은 현재 호가건수와 호가잔량이 어느정도 수준인지 가늠할 수 있게 도와준다.



이번에는 구해놓은 두 개의 Cone 을 활용하여 간단한 전략을 테스트해보겠다. 이렇게 분석 후에 전략에 실제로 적용해보는 순간이 가장 두려운(?) 순간이다. 의미가 없다면 의미가 없다는것을 알았다는 점이 나름대로의 수확이라 말할 수 있지만 가설이 무의미하다는것을 아는 순간은 썩 기분이 좋은것은 아니기 떄문이다. 그렇다. 전략테스트가 완료되고 난 후에 이 글을 쓰고있는 것이고 가설이 무의미한 것이 입증됐기 떄문이다. 하지만 반대로 의외의 수확도 있었다. 먼저 전략의 로직부터 설명하겠다.


9시부터 14시까지 매정시의 최대값 및 최소값은 각각 유의한 차이를 보인다. 그러므로 전략에 응용할 때는 매정시마다 다른기준을 가지고 시그널을 발생시켜야 한다. 9시의 경우만 예를 들어보겠다. (참고로 이 전략에서는 호가건수만 이용한다.)


2009년 1월 2일부터 2013년 9월 30일까지 매일 9시 정각에 기록한 총호가순건수는 1159 개이다. 이 데이터들을 가지고 히스토그램을 만들어보면 다음과 같다.





가로축이 총호가순건수의 범위들이고 세로축은 그 범위 내에 포함된 건수들이다. 범위는 엑셀에서 자체적으로 지정한 것이므로 좀 지저분하게 표현됐다. 총호가순건수 최대값과 최소값은 각각 이 그래프의 최우측과 최좌측의 값 두 개의 값과 동일하다. 만약 이 두개의 값만을 이용한다면 4년 가까이 딱 두 번의 거래만 발생할 것이다. outlier 들을 제거해서 좀 더 현실적인 boundary 를 만들어야한다. 이벤트 발생이 10회 이하인 범위를 제거하면 boundary 는 다음과 같이 변경된다.


최대값 : 1408 -> 816

최소값 : -1381 -> -873


boundary 넓이가 무려 절반에 가깝게 줄어들었다. 이를 기초로 다음과 같이 전략로직을 세워봤다.


==================== 전략 로직 ====================

로직 :

총호가순건수가 boundary 에 접근하면 평균으로 회귀하려는 성향이 강하다. 총호가순건수의 움직임은 가격움직임과 양의 상관관계가 있으므로 boundary 에 접근하려 할 때 반대방향으로 주문한다.


매도주문 : 9, 10, 11, 12, 13, 14 시에 총호가순건수가 upper boundary 에 도달하면 매도

매수주문 : 9, 10, 11, 12, 13, 14 시에 총호가순건수가 lower boundary 에 도달하면 매수

로직평가 : 진입 후 한 시간동안의 진입우위성으로 평가 (진입우위성에 대한 설명 및 검증 페이지 <- 클릭)

==================================================



전략코드는 진입코드를 제외하고 진입우위성검증 페이지에 나와있는 코드와 동일하므로 여기서는 진입코드만 게시한다.





진입우위성 검증 결과는... 참담하다. 하지만 의외의 수확이 있다. 먼저 E-ratio 결과를 보자





E-ratio 가 1.0 이면 무작위, 1.0 보다 높으면 진입조건이 수익성이 있는것이고 1.0 보다 낮으면 진입조건이 수익성이 떨어진다는 의미다. 표를 보면 E-ratio 가 모든 시간대에 걸쳐 1.0 보다 높지 않은 수치들을 보이므로 이 전략은 수익성이 없는 전략이다. 하지만 1.0 보다 유의하게 낮은 경우는 얘기가 달라진다. 먼저 매도진입과 매수진입을 바꿔서 테스트해보면 다음 표와 같다. (위의 표의 값의 역수결과가 나올것이다.)




괜찮은 결과가 나왔다. 총 거래건수는 266 건, 승률은 57% 다. 승률은 절반에 가깝지만 수익성이 높다는것은 boundary 에 다다를 경우 추세발생시에 강한 추세를 가진다는것을 의미한다. 이 현상은 9시에 발생한 거래들을 살펴보면 더 확연해진다. 9시에 발생한 거래건수는 46건, 승률은 33% 다. 그럼에도 불구하고 가장 높은 수익성을 보인다는건 장 초반에 총호가순건수가 boundary 에 다다른 경우 총호가순건수의 평균으로의 회귀및 선물손실의 가능성은 크지만 추세가 발생할 경우 선물가격은 큰 수익성을 보인다는 의미로 해석된다. 



이 상황이 쉽게 이해되도록 그림을 그려봤다.

총호가순건수가 a 점에 다다르면 b 점인 선물가격은 작은확률로 크게 상승하고 높은확률로 적게 하락한다.







결론


현재 총호가순건수, 총호가순잔량이 역사적 최고점 또는 최저점에 다다르면 평균으로 회귀한다는 가정을 세우고 전략에 응용해 봤으나 유의한 수익성과는 얻지 못했다. 하지만 장 초반에 총호가순건수가 boundary 에 다다른 상태에서 선물가격에 추세가 발생할 경우에는 높은 수익성을 보였다.

prev"" #1 next