inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

267

김정식

작성한 질문수 7

0

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

판다스 투자 pandas 퀀트

답변 3

1

DeepingSauce

안녕하세요

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

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

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

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

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

0

김정식

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

0

DeepingSauce

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

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

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

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

0

김정식

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

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

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

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

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

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

0

DeepingSauce

안녕하세요! 

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

0

김정식

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

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

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

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

No module named 'FinanceDataReader' 문제

0

833

3

처음 requirements.txt 폴더, 문의 드립니다.

0

462

2

강의 5.9 질문있습니다.

0

278

1

2.1 라이브러리가 설치부터 에러가 발생하네요..

0

364

1

파일 설치시 오류 메세지

0

304

1

질문이 있습니다.

0

290

2

7.9 왜 재생이 안되죠? 다른건 다 되는데..

0

223

1

append삭제

0

449

1

이틀째 설치에서 멈췄어요..제발도와주세요

0

1275

1

강의자료

0

352

1

2.6 reindex 관련 예제 질문

0

560

1

my_data

0

289

1

드랍박스 경로 다시 공유해주실수있나요?

0

469

1

fdr 오류 도오ㅏ주세요 ㅠ

0

668

1

row 출력 개수 변경

0

412

1

df.nsmallest(5, "PER(배)") 중 양수값만 표출

0

356

1

df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 오류

0

677

3

!pip install -r requirements.txt 설치시 에러2

0

895

1

!pip install -r requirements.txt 설치시 에러

0

1569

1

강의 7.9, 슈퍼가치전략 질문

0

294

0

주피터 라이브러리 설치(pandas, numpy, finance-datareader) 관련 문의

0

588

1

pivot() 하니 row의 수가 줄어들었는데 이유가 무엇인지요?

0

361

1

설치 에러

0

378

3

가상환경에서 FinanceDataReader import

0

546

1