앞서 바이낸스 데이터를 가져오는 것에 대하여 알아보았다. 다시한번 데이터를 차트로 그려보자.
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']]
df_100 = df.iloc[-100:]
mpf.plot(df_100,type='candle', style='charles', title='BTC/USDT')
위 차트를 보고 우리는 언제 거래하면 수익을 극대화 할 수 있을까?
주식거래의 A-Z는 쌀때 사서 비싸게 파는것이다.
상대적 저점(Relative High: RH)에 사서 상대적 고점(Relative Low: RL)에 파는것을 반복하면 우리는 돈을 많이 벌 수 있다.
눈으로 대충 차트를 보고 상대적 고점과 저점을 붉은색과 푸른색으로 표기해 보았다.
상대적 저점과 상대적 고점이 계속해서 증가하고 있다가 노란색 표시가 된부분은 상대적 저점을 뚫고 내려갔다. 계속해서 증가하는 상대적 저점 패턴이 붕괴되어 하락함을 확인 할 수 있다.
상대적 저점과 고점이 계속해서 내려가다 직전 상대적 고점보다 주가가 올라가서 하락 패턴이 붕괴되어 상승함을 확인 할 수 있다.
이러한 추세 패턴이 깨진다는 것은 추세전환이 일어나는 하나의 단서가 될 수 있다.
상대적 고점을 선으로 이으면 하락 추세선을 그릴 수 있다.
상대적 저점을 선으로 이으면 상승 추세선을 그릴수 있다.
이 두 평행선을 추세 채널이라고 한다. 이 두 평행선 근처에서 추세에 대한 반발이 흔히 시작된다.
- 가격이 채널 하단 임계점(양 추세선)에 근접하면 매수 포지션
- 가격이 채널 상단 임계점을 돌파하면 하락 추세 패턴 붕괴로 매수 포지션
하지만 추세선은 RL과 RH가 계속 변함에 따라 기울기가 계속해서 변하므로 사후 분석에서 특정 지점의 추세선은 매우 왜곡이 아래와 같이 심할 수 있다.
결국 입맛에 맞게 추세선을 그리고 수익률을 상상에 맞춰 올릴 수 있다. 이러한 오류를 해결하기 위한 자세한 기술들은 이후 다시 다루도록 하겠다.
이동평균은 관찰 기준점에서의 N봉 이전의 값들의 평균값을 의미한다.
N이 5, 20, 40인 이동평균선을 그려보자
import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np
# df = ...
# df_100 = ...
ma5 = df['close'].rolling(window=5).mean()[-100:]
ma20 = df['close'].rolling(window=20).mean()[-100:]
ma40 = df['close'].rolling(window=40).mean()[-100:]
plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize = (12,6))
mpf.plot(df_100,type='candle', volume=False, style='charles', ax=ax)
xpoints = np.arange(len(df_100))
ax.plot(xpoints, ma5, color = 'b', linewidth = 1, label='Close, 5-Day SMA')
ax.plot(xpoints, ma20, color = 'g', linewidth = 1, label='Close, 20-Day SMA')
ax.plot(xpoints, ma40, color = 'r', linewidth = 1, label='Close, 40-Day SMA')
ax.set_xlabel('Date')
ax.set_ylabel('Price ($)')
ax.legend()
ax.set_title('BTC/USDT')
장기 이동평균선(이하 이평선)이 단기 이동평균선보다 아래에 있다는것은 상승 추세에 있다는 의미이다. 그래서 장기 이평선을 단기 이평선이 뚫고 역전해서 올라갈때가 상승 전환 추세라 생각 할 수 있고, 이를 정배열 또는 골든크로스라고 한다. 반대로 장기 이평선을 단기 이평선이 뚫고 내려가는것을 역배열 또는 데드크로스라고 한다.
위 코드는 종가의 평균값으로 이평선을 그렸는데, 고가 또는 저가 등을 활용해서 여러가지 이평선을 그릴 수 있다. 이평선은 이후 추세 관련 분석에서 기본이 되는 개념이니 잘 이해하자.