바이낸스 코인 데이터를 가져오기
from binance.spot import Spot
import datetime
import mplfinance as mpf
import pandas as pd
client = Spot()
print(client.time())
client = Spot(key='', secret='')
data = client.klines(symbol='BTCUSDT', interval='3m', limit=1000)
len(data)
for i in range(len(data)):
for j in range(len(data[i])):
if isinstance(data[i][j], str):
data[i][j] = float(data[i][j])
df = pd.DataFrame(data, columns=
[
'datetime',
'open',
'high',
'low',
'close',
'volume',
'closeTime',
'QuoteAssetVolume',
'NumTrades',
'TakerBuyBaseAssetVolume',
'TakerBuyQuoteAssetVolume' ,
'Ignore'
]
)
df['datetime'] = pd.to_datetime(df['datetime'], unit='ms')
df.set_index('datetime', inplace=True)
df = df[['open', 'high', 'low', 'close', 'volume']]
모멘텀이란 쉽게말해 가격 변동 비율(혹은 속도)를 말한다. 여러가지 방식이 있지만 가장 간단하게 구할수 있는 모멘텀 지표는 N일전과 현재의 가격차이를 산출하여 나타낸 것이다.
단순 모멘텀 = 현재 가격 - N일 전 가격
import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np
def sub(s):
return s[-1] - s[0]
df['MMT20'] = df['close'].rolling(20).apply(sub)
df_draw = df[-200:]
adps = []
adps.append(
mpf.make_addplot(df_draw['MMT20'],panel=1,type='line',ylabel='Momentum'))
adps.append(
mpf.make_addplot(np.ones((len(df_draw))), panel=1,type='line', color='red', linestyle='dotted',secondary_y=False))
mpf.plot(df_draw, type='candle', style='charles', figratio=(3,2),figscale=1.5, addplot=adps)
차트 하단에 모멘텀 지표를 살표보면 붉은색 선인 0을 기준으로 20일전보다 가격이 비싸면 +, 작을경우 - 값을 가진다.
위 차트를 보면 20일전 대비 가격차는 대략 500달러 선에서 박스권을 형성하는것으로 보인다.
import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np
def sub(s):
return s[-1] - s[0]
df['MMT20'] = df['close'].rolling(20).apply(sub)
df_draw = df[-200:]
adps = []
adps.append(
mpf.make_addplot(df_draw['MMT20'],panel=1,type='line',ylabel='Momentum'))
adps.append(
mpf.make_addplot(np.ones((len(df_draw))) * 500, panel=1,type='line', color='red', linestyle='dotted',secondary_y=False))
adps.append(
mpf.make_addplot(np.ones((len(df_draw))) * -500, panel=1,type='line', color='red', linestyle='dotted',secondary_y=False))
mpf.plot(df_draw, type='candle', style='charles', figratio=(3,2),figscale=1.5, addplot=adps)
500달러 이상의 차이가 나는 부분이 추세이탈 신호로 포착하여 진입하는 전략을 세워 볼 수 있다. 또한 다시 500달러 안으로 진입하는 시점을 다시 추세진입 구간으로 포착해 청산을 할 수 있겠다.
위 간단한 모멘텀 계산방법과 유사하지만 현재가격에 N일전 가격을 나누어 비율을 산정한 지표가 변화율이다.
ROC = 금일가격 / N일전 가격
import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np
def div(s):
return s[-1] / s[0]
df['ROC20'] = df['close'].rolling(20).apply(div)
df_draw = df[-200:]
adps = []
adps.append(
mpf.make_addplot(df_draw['ROC20'],panel=1,type='line',ylabel='ROC'))
mpf.plot(df_draw, type='candle', style='charles', figratio=(3,2),figscale=1.5, addplot=adps)
비율로 나타내니 자산 가격과 상관없이 1을 기준으로 표기가 되어 위 간단한 모멘텀 지표보다 훨씬 정량화 하기 좋아보인다.
위 모멘텀 전략을 참고하여 비슷한 전략을 구상해 볼 수 있다.
고전적인 기술적지표 분석에서는 ROC, 모멘텀 등의 지표에 기준선을 그려 해당 기준선을 초과할경우 과매수구간, 미만일 경우 과매도 구간으로 추정한다.
가만히 생각해보면 일리가 있다. 과거보다 가격이 급하게 변경되어 있으니 말이다. 이를 통해 과매도 구간에서는 매수, 과매수구간에는 매도 전략을 일반적으로 생각할 수 있다. 하지만 대부분의 최근 차트에서는 이같은 정석적인 방법으로 투자를 하게되면 수익률이 형편없을 확률이 높다. 위 차트를 보며 한번 생각 해보길 바란다.