[python]코인 알림 봇 만들기(4편) : 비트코인 선물 지표 데이터 추출
이번 4편은 3편(웹스크래핑)의 응용 편입니다
저번 3편에서는 비트코인의 시가, 고가, 저가, 종가, 거래량처럼 차트의 기본적인 데이터만을 가져왔다면 이번 3.5편은 다른 다양한 지표도 추출할 수 있는지 응용하는 방법을 포스팅하도록 하겠습니다. 이전글의 복습과도 비슷하기 때문에 몇몇은 생략했으니 자세한 설명을 원하시면 (3편)을 참고하시기 바랍니다.
코인알림봇 만들기(3편) : CCXT, BeautifulSoup, Selenium 없이 차트데이터 가져오는 방법
이제 본격적으로 알림봇을 만들어 보도록 하겠습니다. 우선 알림조건에는 시세 변동폭, 거래량급증, 어떤지표의 수치가 몇 이상 등등 차트의 데이터가 필요합니다. 이 데이터를 가져와서 조건
goldfishman.tistory.com
1. 먼저 원하시는 지표를 정해줍니다
제가 요즘 흥미롭게 보고 있는 선물시장의 지표로는 (a) OpenInterest, (b) LongShortAccountRatio, (c) LongShortMarginBalanceRatio 이 세 가지가 있습니다. 각각의 지표에 대한 설명은 아래 제 블로그 매매일지에 작성해 두었으니 참고하시기 바랍니다.
코인매매 8,9,10,11일 차(84달러) : 선물시장 데이터 수집 (tistory.com)
코인매매 8,9,10,11일차(84달러) : 선물시장 데이터 수집
23년 3월 6일 월요일 매매 11일차입니다. 7일차 매매일지에서 비트상황이 24K를 뚫는 시도를 했으나 바로 하락했다는 점이 우려스럽다고 했는데요. 글 쓰고나서 8시간 후에 비트가 5%이상 폭락을 했
goldfishman.tistory.com
2. 저번과 같이 requests와 pandas 모듈을 임포트 해줍니다
import requests
import pandas as pd
3. 구글크롬으로 바이낸스 선물시장 BTC/USDT로 들어가 줍니다
주소는 아래와 같습니다.
20123.1 | BTCUSDT USDⓈ-Margined Perpetual | Binance Futures
www.binance.com
바이낸스 가입 절차 (수수료 할인 및 주의 사항)
바이낸스 신규 가입 레퍼럴(추천인) 코드 - 수수료 할인 혜택 주의사항(가짜사이트, 거짓정보) 가입 절차 레퍼럴(추천인) 코드 - 수수료 할인 혜택 바이낸스에는 추천인 제도가 있으며 신규 가입
goldfishman.tistory.com
4. 차트에 원하는 지표를 추가합니다
지표(indicator) 아이콘 - Sub Trading Data - (a) O.I., (b) L.S.Account, (c) L.S.Position - Save
5. 개발자도구로 들어가 Request URL과 user-agent의 정보를 복사합니다
1) 단축키 F12로 개발자도구로 들어가 Network - Fetch/XHR - 세 개의 지표 클릭해 줍니다
2) Request URL 우클릭하시면 내용물을 복사하실 수 있습니다.
3) user-agent
6. 다음과 같은 양식으로 복사한 Request URL과 user-agent의 값을 작성해 줍니다
url = "https://www.binance.com/futures/data/openInterestHist?symbol=BTCUSDT&period=15m&limit=500"
headers = {"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}
res = requests.get(url, headers=headers)
res.raise_for_status()
저는 O.I. 의 URL과 user-agent의 값을 넣어주었습니다.
7. 응답받은 값을 판다스 모듈의 데이터프레임으로 정리해 줍니다
value = res.json()
df = pd.DataFrame(value)
8. 출력(print)하여 확인해 줍니다
print(df)
symbol sumOpenInterest sumOpenInterestValue timestamp
0 BTCUSDT 106474.58400000 2400320431.86240000 1678118400000
1 BTCUSDT 106957.49200000 2410441119.51961330 1678119300000
2 BTCUSDT 107085.32100000 2407752488.11079450 1678120200000
3 BTCUSDT 106864.17900000 2402865396.59488530 1678121100000
4 BTCUSDT 106923.84700000 2407433184.74380000 1678122000000
.. ... ... ... ...
495 BTCUSDT 91962.05700000 1856998899.30249620 1678563900000
496 BTCUSDT 91893.87900000 1857289275.90532020 1678564800000
497 BTCUSDT 91947.95400000 1858332513.90780000 1678565700000
498 BTCUSDT 92272.41700000 1868359581.14110000 1678566600000
499 BTCUSDT 91747.90000000 1870565359.99000000 1678567500000
[500 rows x 4 columns]
500개의 행과 4개의 열로 이루어진 데이터프레임을 확인하실 수 있습니다. 500번째 행이 가장 최근의 정보이며 열은 순서대로 심벌, O.I., O.I.Value(USDT), 시간으로 이루어져 있네요. (타임스탬프는 지금 알아보기 어렵지만 datetime함수로 변환해 주면 저희가 평소 쓰는 년, 월, 일, 시, 분처럼 나타낼 수 있습니다.)
9. 나머지 두 개의 지표도 똑같이 반복합니다
import requests
import pandas as pd
url = "https://www.binance.com/futures/data/openInterestHist?symbol=BTCUSDT&period=15m&limit=500"
headers = {"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}
res = requests.get(url, headers=headers)
res.raise_for_status()
url2 = "https://www.binance.com/futures/data/topLongShortAccountRatio?symbol=BTCUSDT&period=15m&limit=500"
res2 = requests.get(url2, headers=headers)
res2.raise_for_status()
url3 = "https://www.binance.com/futures/data/topLongShortPositionRatio?symbol=BTCUSDT&period=15m&limit=500"
res3 = requests.get(url3, headers=headers)
res3.raise_for_status()
value = res.json()
df = pd.DataFrame(value)
value2 = res2.json()
df2 = pd.DataFrame(value2)
value3 = res3.json()
df3 = pd.DataFrame(value3)
print(df)
print(df2)
print(df3)
실행해 주시면
symbol sumOpenInterest sumOpenInterestValue timestamp
0 BTCUSDT 106957.49200000 2410441119.51961330 1678119300000
1 BTCUSDT 107085.32100000 2407752488.11079450 1678120200000
2 BTCUSDT 106864.17900000 2402865396.59488530 1678121100000
3 BTCUSDT 106923.84700000 2407433184.74380000 1678122000000
4 BTCUSDT 107032.57100000 2410138027.26380000 1678122900000
.. ... ... ... ...
495 BTCUSDT 91893.87900000 1857289275.90532020 1678564800000
496 BTCUSDT 91947.95400000 1858332513.90780000 1678565700000
497 BTCUSDT 92272.41700000 1868359581.14110000 1678566600000
498 BTCUSDT 91747.90000000 1870565359.99000000 1678567500000
499 BTCUSDT 91607.84100000 1863460262.67201610 1678568400000
[500 rows x 4 columns]
symbol longAccount longShortRatio shortAccount timestamp
0 BTCUSDT 0.6209 1.6378 0.3791 1678118400000
1 BTCUSDT 0.6173 1.6130 0.3827 1678119300000
2 BTCUSDT 0.6157 1.6021 0.3843 1678120200000
3 BTCUSDT 0.6176 1.6151 0.3824 1678121100000
4 BTCUSDT 0.6175 1.6144 0.3825 1678122000000
.. ... ... ... ... ...
495 BTCUSDT 0.6335 1.7285 0.3665 1678563900000
496 BTCUSDT 0.6329 1.7241 0.3671 1678564800000
497 BTCUSDT 0.6329 1.7241 0.3671 1678565700000
498 BTCUSDT 0.6334 1.7278 0.3666 1678566600000
499 BTCUSDT 0.6302 1.7042 0.3698 1678567500000
[500 rows x 5 columns]
symbol longAccount longShortRatio shortAccount timestamp
0 BTCUSDT 0.5325 1.1389 0.4675 1678119300000
1 BTCUSDT 0.5326 1.1396 0.4674 1678120200000
2 BTCUSDT 0.5325 1.1391 0.4675 1678121100000
3 BTCUSDT 0.5325 1.1390 0.4675 1678122000000
4 BTCUSDT 0.5324 1.1386 0.4676 1678122900000
.. ... ... ... ... ...
495 BTCUSDT 0.5146 1.0602 0.4854 1678564800000
496 BTCUSDT 0.5140 1.0576 0.4860 1678565700000
497 BTCUSDT 0.5136 1.0557 0.4864 1678566600000
498 BTCUSDT 0.5137 1.0565 0.4863 1678567500000
499 BTCUSDT 0.5139 1.0574 0.4861 1678568400000
[500 rows x 5 columns]
Process finished with exit code 0
3개의 선물지표를 데이터프레임형식으로 가져올 수 있습니다.
만약 CCXT 모듈을 사용한다면 이런 잘 알려지지 않은 지표를 받아올 함수를 찾기 힘드셨을 겁니다. 하지만 저희는 이번에 3개의 지표 데이터를 받아왔습니다. 물론 다른 지표도 가능합니다. 이 말은 즉, 웹스크래핑 테크닉이 있다면 모든 지표를 다룰 수 있고 그 수치에 따라 조건을 지정할 수 있는 알림 봇을 만들 준비가 되신 겁니다.