Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자동매매
- 변동성돌파
- open_interest
- API
- 프리미엄지수
- 바이비트
- 파아썬
- 비트코인
- latest_big_deal
- Python
- 모멘텀지표
- Query_Index_Price_Kline
- orderbook
- 롱숏비율
- xgboost
- Machine Learning
- 머신러닝
- myposition
- Query_Kline
- 백테스팅
- bitcoin
- Public_Trading_Records
- place_active_order
- Query_Premium_Index_Kline
- kline
- 코인
- 파이썬
- Bybit
- 데이터불러오기
- 호가창
Archives
- Today
- Total
돈벌고싶다
파이썬으로 모멘텀 지표 주가추세 매매 백테스팅 본문
728x90
반응형
소개
최근에 나름 유용하게 보고 있는 보조지표인 momentum 지표에 대해 소개할까 한다. 심지어 코드 구현이 너무나도 쉽게 때문에, 이를 활용하여 자동매매 프로그램 만들기가 변동성 돌파 전략보다 쉽다.
해당 전략은 다음 글에서 사용되는 전략으로, 10일 모멘텀 지표와 그에 대한 9일 이동평균선을 시그널선으로 이용하여 매수매도시점을 포착한다. 백테스팅 결과 생각보다 의미있는 수익률이 나왔다(https://layhope.tistory.com/321)
자세한 내용은 링크를 참고하도록 하고, 그럼 코드를 통해 백테스팅을 해보자.
코드
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프로의 수익률을 기록한 셈이다. 즉, 모멘텀 지표를 활용한 매매를 할 경우 상승이던 하락이던 추세가 형성될 경우 큰 수익률을 얻을 수 있다.
지속적인 테스트를 거치며...
아니나 다를까. 역시나 테스트했던 기간이 좋았을 뿐, 장기적으로는 수익을 보기 힘들었다. 결국 횡보장은 자동매매 프로그램에게 있어 극복하기 힘든걸까?
728x90
반응형
'코인과코딩, 그리고 인공지능' 카테고리의 다른 글
파이썬을 이용한 페어 트레이딩과 실패 (1) | 2022.08.29 |
---|---|
Back Testing의 함정 (0) | 2022.07.31 |
머신러닝으로 지지선 & 저항선 긋기 (10) | 2022.07.22 |
가격 데이터, 지수 가격 데이터, 그리고 프리미엄 지수 가격 데이터 (0) | 2022.05.16 |
파이썬을 이용한 매우 간단한 백테스팅 (1) | 2022.04.27 |
Comments