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

김정식님의 프로필 이미지
김정식

작성한 질문수

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

검색으로 해결 못해서 질문 드립니다.

작성

·

191

0

안녕하세요.
예를 들어서
df ['매수'] = df['5이평'] > df['20이평'] 이렇게 하면 해당되는 매수칼럼에 1이란 값이 들어가는데
신호가 발생후에 1이란 신호를 계속 유지할수 있는 방법이 혹시 있을까요?
이게 단순히 매수 매도가 같은 신호이면 상관은 없는데 , 매수와 매도가 다른 신호로 구성되었다고 치면
이벤트 방식의 for loop 를 사용하면 따로 변수를 이용하여 하면 되는데, 판다스 백터방식의 백테스터를 하려고하니깐
저 신호가 유지가 되어야 하는데 5 / 20 이평의 데드가 나는순간 바로 매수칼럼의 값이 0으로 바뀌어서 ,,,
이리저리 생각을 해보고 검색을 해봤는데 딱 해결방법을 못찾아서 질문을 남깁니다.. ㅜㅜ
신호값이 1로 바뀌고 매도시그널이 뜨기전까지 1의 값이 유지되면 좋은데, 그런 방법이 떠오르지가 않네요.
백터계산을 하지 않으니 너무 오랜시간의 백테스터가 걸려서 더 간단하게 할수 있는 방법을 찾고 있습니다.ㅜㅜ
감사합니다~

답변 3

1

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

안녕하세요

제가 전체흐름을 잘 읽지 못해서, 제 방식(part2에서 소개할 방식)으로 답변드리겠습니다

우선 문제는 매수, 매도, 포지션 총 3개의 변수를 관리하는 점입니다.

사실 '포지션' 컬럼만으로 holding 구간, 매수, 매도 시점을 전부 detecting 할 수 있습니다,

'포지션'을 0, 1로 표현이 되게 설정을 하고(매수하는 기간동안은 1 매도하는 기간동안은 0으로 설정), 0 -> 1 로 변하는 point를 shift()를 이용해서 detecting을 하면 해당 point가 '매수' 시점입니다. 반대로 1 --> 0 으로 변하는 지점을 찾아내면 해당 point가 '매도' 시점이게 됩니다.

이 아이디어에 착안해서 구현하시면 vectorized operation으로 충분히 구현이 가능합니다 : )

김정식님의 프로필 이미지
김정식
질문자

감사합니다!!!! ^^ 다음강의 나오면 또 들을께요^^^^ 

0

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

무슨말씀인지 대략적으로 알것같습니다. 혹시 '원하는 포지션 시그널' 이 결국 '매도' 컬럼의 값에 NOT을 붙인형태(반대 값, '~')인 것 같은데, df['포지션'] = ~df['매도']로 처리가 가능한 부분일까요?

현재 어떤 컬럼값부터 계산을 시작해서 '포지션'계산까지 도출하는지에 대한  흐름 파악이 어려워서 이정도로 말씀드릴 수 있을 것 같습니다.

그리고 좋은 소식(?)은 해당 내용은 현재 준비중인 part2 강의에서 signal based backtesting이라는 주제로 하나의 section에서 다룹니다 :) 

혹시 답변이 안되었다면 답글 남겨주세요!

김정식님의 프로필 이미지
김정식
질문자

단순히 포지션을 매도 컬럼값으로만 하면 매수시그널이 떴을때의 포지션 컬럼은 어떤식으로 조작해줘야 하나요??

매수시그널 발생 -> 포지션 값(1)변경 -> 매도시그널 발생 -> 포지션 값(0)변경

이렇게 하고 싶은데,  매수시그널 발생 -> 포지션(1) 변경 -> 매도시그널 발생전 매수시그널이 False로 되는순간 -> 포지션도 같이 FALse 가 되는 문제를 해결 못하겠네요 ,, ㅎㅎㅎ ㅜㅜ

df['포지션'] = df['매수'] == 1  -> 이렇게 포지션을 조작하면, 매도 시그널 발생전에 ['매수'] 시그널이 FALSE 값으로 변해버리면 포지션도 덩달아 같이 변해버려서 ...  짱구를 굴려도 잘 안되네요 ㅜㅜ

애초에 접근자체를 매수매도의 시그널로 포지션을 조작하면 안되는건지 ,,, 흠 어렵네요,,ㅜㅜ

for 루프 쓰면 되긴하느데 너무 오래걸려서 ,,, ㅎㅎ 멀티쓰레드로 여러 프로세스로 해도 엄청난 시간이 소비 되더라구요... 

0

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

안녕하세요! 

혹시 `1. expected output(기대 결과)`와 `2. 현재 나오는 결과` 를  샘플 DataFrame 형태로 첨부해주실 수 있을까요?

김정식님의 프로필 이미지
김정식
질문자

매수시그널은 한개의 ROW 에서 발생 후 FALSE 될수도 있는데,

포지션은 매수시그널이 TRUE 한번만 발생하면 포지션 TRUE 로 값이 변하고,

매도시그널 TRUE 가 발생하기전까진 계속 TRUE 를 유지하기를 원합니다. 

이해가 되시려나 모르겠네요...ㅜㅜ 댓글 감사합니다!!

김정식님의 프로필 이미지
김정식

작성한 질문수

질문하기