본문 바로가기

backup

[HFT 시스템 트레이딩]기초 데이타 가공1

관련해서 오랜만에 글 올리네요 ㅋ


HFT 트레이딩을 하려면 최소한 일반적인 분봉이 아닌 틱데이터를 가지고 분석을 하여야 합니다.

제가 가지고 있는 틱데이터는 아래의 형식인데요.


EUR/USD,20130902 00:00:01.905,1.32047,1.32091
EUR/USD,20130902 00:00:01.906,1.32058,1.32083
EUR/USD,20130902 00:00:02.005,1.32056,1.32081
EUR/USD,20130902 00:00:04.189,1.32061,1.32082
EUR/USD,20130902 00:00:04.190,1.32048,1.32094
EUR/USD,20130902 00:00:04.191,1.32059,1.32086
EUR/USD,20130902 00:00:04.305,1.32051,1.32095



틱데이터를 이용해서 시뮬레이션 back test 진행을 할 것이 아니라면

위의 데이터 형태를 그대로 통계분석에 쓰기에는 좀 문제가 있습니다.


바로 틱 간격이 일정하지 않다는 것입니다.


그게 왜 문제냐고 하면, 예를 들어서 100개 틱으로 분산을 구한다고 하면

어떤 경우는 몇 초에 해당하는 값일 수도 있고, 다른 경우는 몇 분에 해당하는 값이 될 수도 있습니다.


만약 두 값을 비교해서 어떤 지점이 더 변동성이 크다고 분석을 한다면 비교자체가 잘못된 것이기 때문에

성립이 되지 않습니다.


그래서 일정한 간격을 가지는 데이터로 다시 가공을 하든지 아니면, 미/적분이 가능한 연속함수형태로 데이터 형태로 변환을 해주어야 합니다. 그래야지 일정한 통계분석이 가능해집니다.


우선은 일정한 간격을 가지는 데이터 가공에 대해서 다뤄보죠.


일정한 간격으로 할때는 틱 데이터를 1초단위 혹은 500ms 단위 등으로 본인이 원하는 형태로 만들 수 있을 것입니다.


정답은 없지만, 틱데이터의 정밀도와 본인이 분석을 원하는 정도로 간격을 정한 뒤에, 1차적인 데이터 변환을 해야 합니다.


이때 쓸 수 있는 방법이 2가지가 있는데, 하나는 보간법(interpolation)이고 다른 하나는 가장 마지막 값을 적는 것입니다.


보간법은 예를 들어서 위의 데이터를 1초 단위로 가공한다고 했을 때 00:00:02 의 데이터는


00:00:01.906 일때 1.32058의 값과

00:00:02.005 일때 1.32056의 값으로 부터


아래의 공식으로 00:00:02.000 의 값을 구하는 것입니다.



그래프로 나타내면 아래 처럼 되겠네요.




뭐 그래서 00:00:02.000의 값은 1.32058 + (1.32056 - 1.32058) / 9 * 4 이렇게 되겠네요.


이렇게 보간법을 쓰는 방식이 있는가 하면 가장 마지막 값을 쓰는 방식도 있습니다.


EUR/USD,20130902 00:00:01.905,1.32047,1.32091
EUR/USD,20130902 00:00:01.906,1.32058,1.32083
EUR/USD,20130902 00:00:02.005,1.32056,1.32081
EUR/USD,20130902 00:00:04.189,1.32061,1.32082
EUR/USD,20130902 00:00:04.190,1.32048,1.32094
EUR/USD,20130902 00:00:04.191,1.32059,1.32086
EUR/USD,20130902 00:00:04.305,1.32051,1.32095


이 데이터에서


00:00:02 의 값은 가장 마지막 값인 00:00:01.906의 값인 1.32058, 1.32083 으로 하고

00:00:03 의 값은 또 바로 직전의 값인 00:00:02.005의 값으로 쓰는 것입니다.


어느 것이 맞다고 하기는 좀 힘들지만, 가장 마지막 값 보는게 계산은 좀 편하긴 하겠네요. 어차피 계산은 컴퓨터가 하긴 하겠지만요.


어쨌든 위의 데이터를 프로그램을 돌려서 초 단위의 데이터로 변경을 해줍니다.


다시 말해서 간격이 불규칙한 틱데이터를

EUR/USD,20130902 00:00:02. 1.32058,1.32083
EUR/USD,20130902 00:00:03  1.32056,1.32081
EUR/USD,20130902 00:00:04  1.32056,1.32081

이런 형태로 일정한 간격을 가지는 데이터로 변경을 해주는 것입니다.


지금 데이터는 그냥 매도/매수가 이지만, 여기서 몇 가지 파생되는 중요한 데이터가 있습니다.


1. 평균값


틱 데이터를 분석하는데 바로 매도/매수가를 쓰는 것보다는 평균값을 먼저 구하고 평균값으로 분석을 하는 것이 더 정확할 수 있습니다.

왜냐하면 마켓메이킹 전략을 아신다면 이해가 되실 건데, 브로커가 가격을 줄 때 체결이 더 일어나게 포지션은 가격을 평균값에서 더 가깝게 하고, 체결이 일어나지 않길 바라는 포지션은 가격을 평균값에서 좀 더 멀리 제시하게 됩니다. 그래서 매도, 매수가격만 보고 했을 때는 이상적인 가격에서 왜곡이 발생할 여지가 있습니다.


무슨 말인가 하면 브로커가 생각하는 이상적인 가격이 만약 1.32000 이라고 하고, 지금 현재 브로커가 가지고 있는 인벤토리에 buy 포지션이 많다고 하면 buy 보다는 sell이 일어나기 쉽도록 가격을 제시하게 됩니다. spread 10이라고 한다면 bid 값으로 1.31993 을 제시하고, ask 값으로 1.32003을 제시를 하여서, ask가 더 체결이 잘되도록 제시를 하게 됩니다.


뭔가 어렵게 설명을 하고 있는 것 같긴 한데;;;


어쨌든 통계 분석을 위해서는 그냥 바로 매도/매수가를 쓰기 보다는 매도/매수의 평균값으로 분석을 하는 것이 좋습니다. 그리고 그냥 일반적인 산술평균보다는 기하평균값이 좀 더 낫다고 하는데 ;;; 그냥 그만 하도록 하겠습니다.
뭐 평균값이 문제가 아니라 어찌되었던 정말 이상적인 effetive price 무엇인지는 화두중 하나입니다.


2. return


우리나라 말로 뭐라고 해야 될까요? 수익? 뭐 바로 이번 평균값에서 지난 평균값을 빼는 것입니다. 바로 직전의 가격을 할 수도 있고, 10초 단위 30초 단위 로 할 수도 있고, 어찌되었던 변동폭을 의미합니다.


3. 변동성


변동성은 바로 앞의 return의 분산 값이 됩니다.


4. spread


특히 fx에서 spread의 크기는 매우 중요한 지표입니다. 단 B book 업체는 제외입니다. B Book 일수록 spread 크기를 일정하게 주는 경향이 있습니다. A Book 업체는 뉴스 발표 시간 등에는 spread가 엄청 크게 늘어납니다.


5. 틱 빈도


1초 단위로 했다면 1초에 틱이 몇개 받았는지도 매우 중요한 지표가 됩니다. 틱 빈도가 높을수록 변동성이 커질 가능성이 높습니다.



--------------------------------------


간단한거 설명을 하려고 했는데, 뭔가 어려운거 설명한 느낌입니다.ㅋ


실제 데이터 가공도 보여드리면 좋을 텐데 그건 다음 기회에.. ~