본문 바로가기
Python

[Python] finterstellar를 사용하여 Envelope로 주식 매매 시그널 만들기

by llHoYall 2021. 12. 11.

2021.12.09 - [Python] - [Python] finterstellar를 사용하여 RSI로 주식 매매 시그널 만들기

먼저 finterstellar가 처음이라면 이전 글을 보고 와주세요.

Envelope

Envelope는 주가를 감싸고 있어서 붙은 이름입니다.

그림처럼 주가의 위아래를 감싸고 있습니다.

가운데 이동평균선을 중심으로 각각 ±X%의 선을 만든 것입니다.

보통 위에 있는 선을 저항선, 아래에 있는 선을 지지선이라 부릅니다.

 

Envelope를 사용한 투자전략은 모멘텀, 평균회귀에 모두 사용될 수 있습니다.

모멘텀 투자를 한다면 주가가 envelope를 상향 돌파하면 매수하여 다시 envelope 안으로 들어가면 매도를 할 것이고, 평균회귀 투자를 한다면 주가가 envelope의 아래쪽에 있을 때 매수를 하여 envelope의 상단으로 올라오면 매도를 하겠죠.

백테스팅

finterstellarenvelope() 함수로 해당 기능을 제공하고 있습니다.

이번엔 AMD 주식으로 살펴보겠습니다.

envelope(데이터, 이동평균을 위한 기간, envelope 사이즈)

사이즈는 예를 들어 위아래 10%를 만들고 싶다면 0.1을 입력하면 됩니다.

Band를 그리는 함수는 다음을 사용합니다.

draw_band_chart(데이터)

이제 코드로 살펴볼까요?

df = fs.get_price('AMD', start_date='2021-01-01', end_date='2021-11-30')
fs.envelope(df, w=20, spread=.1)
fs.draw_band_chart(df)

깔끔하게 잘 나오네요. ^^

 

이제 매매 시그널을 만들어 보겠습니다.

밴드를 통한 매매 시그널을 만드는 함수는 다음과 같습니다.

band_to_signal(데이터, 매수 구간, 매도 구간)

각 구간은 A~D까지 표시해 놓은 것을 참고해보시면 됩니다.

먼저 모멘텀 전략을 써보겠습니다.

fs.band_to_signal(df, buy='A', sell='B')
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)

확실한 상승구간에서 여러차례 매매가 일어나는 모슴을 보여죽네요.

다음은 평균회귀 전략을 적용해보겠습니다.

fs.band_to_signal(df, buy='D', sell='B')
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)

매수 포지션만 바뀐 것을 확인하실 수 있습니다.

단 한번의 매매이후 거래가 없네요.

투자 성과분석

모멘텀 전략 평균회귀 전략

모멘텀 투자의 경우나 평균회귀 투자의 경우나 모두 처참한 수익률을 보여줍니다.

벤치마크에 비해 정말 처참하죠?

맺음말

이제 각자 원하는 종목을 선정하고, 기간을 바꿔보거나 EMA를 적용해보는 식으로 튜닝을 해볼 수도 있습니다.

Envelope는 모멘텀 투자, 평균회귀 투자 모든 곳에 사용가능한 방법이지만, 위의 예에서 알 수 있듯이 전략 없이 보유만 한 것보다도 못한 수익을 보일 수도 있습니다.

하지만, 각자가 선정한 종목에 맞춰 전략을 짜는 데 하나의 지표로는 충분히 사용할 만 합니다.

열심히 공부해서 다들 성투하시길 바래요.

댓글