일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 데이터불러오기
- open_interest
- xgboost
- bitcoin
- 백테스팅
- Public_Trading_Records
- 호가창
- 바이비트
- 파이썬
- API
- 코인
- Bybit
- kline
- orderbook
- myposition
- 롱숏비율
- 비트코인
- 자동매매
- Query_Premium_Index_Kline
- 파아썬
- 변동성돌파
- 프리미엄지수
- Query_Index_Price_Kline
- Python
- Query_Kline
- 모멘텀지표
- 머신러닝
- place_active_order
- Machine Learning
- latest_big_deal
- Today
- Total
돈벌고싶다
파이썬으로 모멘텀 지표 주가추세 매매 백테스팅 본문
소개
최근에 나름 유용하게 보고 있는 보조지표인 momentum 지표에 대해 소개할까 한다. 심지어 코드 구현이 너무나도 쉽게 때문에, 이를 활용하여 자동매매 프로그램 만들기가 변동성 돌파 전략보다 쉽다.
해당 전략은 다음 글에서 사용되는 전략으로, 10일 모멘텀 지표와 그에 대한 9일 이동평균선을 시그널선으로 이용하여 매수매도시점을 포착한다. 백테스팅 결과 생각보다 의미있는 수익률이 나왔다(https://layhope.tistory.com/321)
모멘텀 지표 (Momentum) 주가추세 매매기법
주식투자시 모멘텀(Momentum) 이라는 말을 많이 들어보셨을 겁니다. 모멘텀의 사전적의미는 탄력,가속도 다른 방향이나 상태로 바뀌는 순간을 의미합니다. 이 뜻과 마찬가지로 주식차트의 모멘텀
layhope.tistory.com
자세한 내용은 링크를 참고하도록 하고, 그럼 코드를 통해 백테스팅을 해보자.
코드
1. 라이브러리
# 라이브러리
from pybit import usdt_perpetual
import numpy as np
import pandas as pd
import schedule
import time
import datetime
import calendar
import math
import matplotlib.pyplot as plt
2. 데이터 request 함수
def get_data(symbol, interval, limit):
if type(interval) == int:
now = datetime.datetime.utcnow()
unixtime = calendar.timegm(now.utctimetuple())
since = unixtime-interval*60*limit;
response = session.query_kline(symbol=symbol,interval=str(interval), from_time=since, limit=limit)['result']
elif interval == 'D':
now = datetime.datetime.utcnow()
unixtime = calendar.timegm(now.utctimetuple())
since = unixtime-1440*60*limit;
response = session.query_kline(symbol=symbol,interval=interval, from_time=since, limit=limit)['result']
return pd.DataFrame(response)
3. 필요 변수 정의
# 필요 변수 정의.
symbol = "BTCUSDT" # 코인명
interval = 'D' # 데이터 기준
limit = 200 # 데이터양
# api 정보 입력
session = usdt_perpetual.HTTP(
endpoint="https://api-testnet.bybit.com",
api_key='my_api_key',
api_secret='my_api_secret',
)
4. momentum 지표 생성 및 시각화
data = get_data(symbol, interval, limit)
data['momentum'] = data['open'].pct_change(10)
data['ma_momentum'] = data['momentum'].rolling(window=9).mean()
data[['open_time', 'close', 'momentum', 'ma_momentum']].plot(x='open_time', figsize=(12, 5), secondary_y=['momentum', 'ma_momentum'])
plt.axhline(0, color='lightgray', linestyle='--', linewidth=2)
5. 백테스팅 : 0시 0분에 매수, 23시 59분에 매도
leverage = 1
fees = 0.048
data['long'] = data.apply(lambda x: (x['close']/x['open']-(fees/100)*2-1)*leverage+1 if x['momentum'] > x['ma_momentum'] else 1, axis=1)
data['short'] = data.apply(lambda x: (x['open']/x['close']-(fees/100)*2-1)*leverage+1 if x['momentum'] < x['ma_momentum'] else 1, axis=1)
6. 결과
data['long'].cumprod().iloc[-2], data['short'].cumprod().iloc[-2]
실행 결과 2021년 12월 12일 ~ 2022년 6월 30일 사이에는 위 시각화 자료에서 볼 수 있듯 하락장이였으며, long으로는 -29프로 수익률을, short으로는 63프로 수익률을 기록하였다. 독립사건으로 50대 50으로 투자를 진행하였다면 34프로의 수익률을 기록한 셈이다. 즉, 모멘텀 지표를 활용한 매매를 할 경우 상승이던 하락이던 추세가 형성될 경우 큰 수익률을 얻을 수 있다.
지속적인 테스트를 거치며...
아니나 다를까. 역시나 테스트했던 기간이 좋았을 뿐, 장기적으로는 수익을 보기 힘들었다. 결국 횡보장은 자동매매 프로그램에게 있어 극복하기 힘든걸까?
'코인과코딩, 그리고 인공지능' 카테고리의 다른 글
파이썬을 이용한 페어 트레이딩과 실패 (1) | 2022.08.29 |
---|---|
Back Testing의 함정 (0) | 2022.07.31 |
머신러닝으로 지지선 & 저항선 긋기 (10) | 2022.07.22 |
가격 데이터, 지수 가격 데이터, 그리고 프리미엄 지수 가격 데이터 (0) | 2022.05.16 |
파이썬을 이용한 매우 간단한 백테스팅 (1) | 2022.04.27 |