Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++
- bitcoin
- mutex
- 영화
- json
- File
- Linux
- channel
- go
- write
- Golang
- JavaScript
- go언어
- window
- C
- range
- windows
- Callback
- GO 언어
- FOR
- install
- 책
- API
- 리뷰
- tcp
- Sync
- Close
- http
- Python
- package
Archives
- Today
- Total
Code Habit
[python] upbit-api 이용하여 비트코인 rsi 구하기 본문
rsi는 'Relative Strength index'의 약자로 상대강도지수를 뜻하는데 투자에서 보조지표로 많이 활용된다. 이를 upbit-api를 통해 구해보겠다.
먼저 구하고자하는 기준캔들의 가격정보를 가져와야 한다.
import requests
import pandas as pd
url ="https://api.upbit.com/v1/candles/minutes/15"
querystring = {"market" : "KRW-BTC", "count" : "200"}
response = requests.request("GET", url, params=querystring)
data = response.json()
df =pd.DataFrame(data)
df=df.reindex(index=df.index[::-1]).reset_index()
"KRW-BTC" 마켓의 15분봉 캔들 정보를 최근 것부터 200개 가져와서 pd.DataFrame()함수를 이용하여 테이블 형식의 데이터로 전환한다.
이렇게 구한 가격 정보를 기반으로 rsi를 계산한다.
ohlc = df
delta = ohlc["trade_price"].diff()
gains, declines = delta.copy(), delta.copy()
gains[gains < 0] = 0
declines[declines > 0] = 0
_gain = gains.ewm(com=(period-1), min_periods=period).mean()
_loss = declines.abs().ewm(com=(period-1), min_periods=period).mean()
RS = _gain / _loss
rsi = pd.Series(100-(100/(1+RS)), name="RSI")
print(rsi)
(본 포스팅은 실제 사용을 위해 코드를 남기는 것이 주목적이므로 rsi를 구하는 자세한 공식은 생략하겠다 ㅜㅜ!)
위 내용을 모듈로 정리하면 다음과 같다.
import requests
import time
import pandas as pd
def rsi_upbit(itv, symbol="KRW-BTC"):
url = "https://api.upbit.com/v1/candles/minutes/"+str(itv)
querystring = {"market" : symbol, "count" : "200"}
response = requests.request("GET", url, params=querystring)
data = response.json()
df =pd.DataFrame(data)
df=df.reindex(index=df.index[::-1]).reset_index()
nrsi=rsi_calc(df, 14).iloc[-1]
print("현재" + str(itv) +"분 rsi :" +str(nrsi))
return nrsi
def rsi_calc(ohlc: pd.DataFrame, period: int = 14):
ohlc["trad_price"] = ohlc["trade_price"]
delta = ohlc["trade_price"].diff()
gains, declines = delta.copy(), delta.copy()
gains[gains < 0] = 0
declines[declines > 0] = 0
_gain = gains.ewm(com=(period-1), min_periods=period).mean()
_loss = declines.abs().ewm(com=(period-1), min_periods=period).mean()
RS = _gain / _loss
return pd.Series(100-(100/(1+RS)), name="RSI")
# test
while True:
rsi_upbit(15)
rsi_upbit(60)
rsi_upbit(240)
time.sleep(1)