기술/코인 알림 봇 만들기 (기초)

[python]코인 알림 봇 만들기(4편) : 비트코인 선물 지표 데이터 추출

금붕맨 2023. 3. 12. 06:18
반응형

이번 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 우클릭하시면 내용물을 복사하실 수 있습니다.

Requests URL

 

3) user-agent

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. 의 URLuser-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개의 지표 데이터를 받아왔습니다. 물론 다른 지표도 가능합니다. 이 말은 즉, 웹스크래핑 테크닉이 있다면 모든 지표를 다룰 수 있고 그 수치에 따라 조건을 지정할 수 있는 알림 봇을 만들 준비가 되신 겁니다.

반응형