인프런 커뮤니티 질문&답변

KB님의 프로필 이미지
KB

작성한 질문수

파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2

7.12 실전 투입 관련 - part1

Vectorizing / Event-based Backtesting

작성

·

447

0

안녕하세요. 수강생입니다.
 
강의 정말 감사합니다~
한가지 질문이 있습니다.
 
제목과 같이 Vectorizing bt, Event-based bt의 차이가 잘 이해가 되지 않습니다.
 
제가 하고 있는 (초급) backtesting은 아마도(?) Vectorizing bt인 것 같습니다. ohlcv 가격 데이터로 VAA, DAA, 변동성 돌파 등을 공부해보았습니다.
 
제가 여쭤보는 내용이 명확성이 떨어지는 것 같아 조금 답답한 맘도 있네요. 질문이 너무 포괄적일 수도 있는데요.
 
Vectorizing bt와 Event-bbased bt 차이에 대해서 간략히(?) 설명해주실 수 있으실까요? ... 디핑님~

답변 1

0

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요!

강의에서 중간중간 설명을 드리지만 이해가 좀 어려우셨나 봅니다.

이렇게 설명을 한번드려볼게요.

우선 벡테스팅은 무조건 '과거' 데이터로만 진행하는 거겠죠? (그래서 `back`testing)

- Vectorized BT: "현재시점"에서 과거 데이터를 "전부다" 볼 수 있다는 가정하에 진행. 과거데이터가 현재시점에서  '전부다' 보이기 때문에, 성능이 빠른 vector 연산으로 벡테스팅 진행

- event-based BT: 과거 기간에서 특정시점에서마다(=event가 발생할 때마다. 예를 들어 리벨런싱 event 등) 벡테스팅을 진행. 예를 들어, 2000.1.1 ~ 2010.1.1 을 벡테스팅을 한다고 하면, 시뮬레이션을 상에서 현재 시점이 2002.1.1이라면, 해당시점에서는 2000.1.1 ~ 2002.1.1까지의 데이터만 볼 수 있고 2002.1.1 ~ 2010.1.1 데이터는 '아직'은 알 수 없음. Vectorized BT와는 다르게 과거데이터라고 해도 전부다 못본다는게 차이. 때문에 vector 연산에 제한이 있음.

 

이해가 되실까요?

KB님의 프로필 이미지
KB
질문자

안녕하세요. 디핑선생님, 빠른 회신 감사합니다.

확인 부탁드려도 될까요?

한 가지 예를들어 볼게요.

1) Vectorized BT:

   - 전체 시계열 데이터를 모두 포함하고 있음

   - 포트 교체 없이 'close' 값이 x이평선 상단에서 매수 x이평선 하단에서 매도 전략

 

2-1) Event-based BT:

   - 전체 시계열 데이터는 모두 포함하고 있으나...

   - 조건식에 맞을 때 매수

   - 3% 이상 일 때, 매도, -3% or 이하 일때, 매도 <--- 이것이 event가 될 수 있겠죠?

 

2-2) Event_based BT:

   - 특정 퀀트 전략(ex. 저PER, 고ROE)에 따라 월말 혹은 월초 1회 리벨런싱

 

올바른 예제일까요??... 확인받고 싶어서 댓글 남깁니다.

 

감사합니다.

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요.

뭔가 정확한 기준이 있는 것은 아니지만, 제 강의 기준으로 설명을 드리면,

1) 제가 part2 강의 뒷부분에서 구현하는 자산배분 비중기반 월별 리벨런싱 전략(과거데이터의 월마다 비중을 조정하고, 해당 비중으로 미래로 전파하면서 반복하는 방식)은 event-based 입니다. 리벨런싱이라는 특정 event마다, 코드상에서 break를 걸어서 전략에 대한 로직을 적용하면서(e.g. 비중조절) 구현(이 break 시점 기준으로는 미래데이터를 알 수 없음)

 

2) 섹션5에서 구현하는 전략들(moving avg based, mean reversion 등)이 vectorized bactesting입니다. 이 전략들은 signal 기반이지만 제가 하루하루 데이터를 직접 보면서(for loop을 돌리거나 하면서) 현재가격이 이평선을 넘는가 를 판단하는 것이 아닌, 전체 과거 데이터에 대해 shifting 등을 이용해서 각 일자별 return을 vector operation으로 """한번에"""" 계산하죠. 그리고 그 결과 return을 이용해서 성과를 봅니다.

 

수강생분께서는 event랑 signal이랑 헤깔리시는 것 같습니다. 위의 2)는 섹션5 제목처럼 signal에 기반한 전략이지만, 벡테스팅 방법 자체는 event-based가 아닌 vectorized 방법입니다. 즉, 두가지 백테스팅 방법을 구분하는 기준이 되는 것은, 특정 event 기간마다 실제 코드를 stop(break)를 해서 전략을 적용하는지를 기준으로 생각하면 될 것 같습니다. (이해하기가 어려우시면, 위의 2가지 방법을 실전 live testing에 투입한다고 생각을 해보시면 좋을 것 같습니다. 어떤 구현방식이 실제 테스트에 투입되기 더 용이할까요? (정답: event-based 구현방식))

 

감사합니다.

KB님의 프로필 이미지
KB
질문자

안녕하세요.

신속한 답변 감사합니다. 어디에, 누구에게 여쭤봐야할 지도 모르는 상황에서 이렇게 구체적으로 설명해 주시다니...

말씀해주신대로, 제가 **event발생**과 **signal**을 혼돈했던 것 같습니다.

1. 강의에서 말씀해주신대로, 신속한 컨셉 확인과 `cum_rtn` 비교 및 전략 작동 여부를 Vectorized-BT에서 확인하고요.

2. 실전 매매 전에 Event based-BT 구현, 가능한 실전과 유사한 환경 세팅 그리고 추가 parameter study하여 전략을 구체화 해야겠습니다.

몇 번이고 질문 드린 것이 번거로웠을텐데, 자세한 설명 감사합니다.

 

귀한 지식을 공유해주시는 디핑님, 감사합니다.

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

방향을 정확히 짚으셨네요 ㅎ 저도 말씀하신것과 비슷하게 alpha 찾기를 진행합니다 : )  결실을 맺으셨으면 좋겠네요. 감사합니다

KB님의 프로필 이미지
KB

작성한 질문수

질문하기