코딩/파이썬

스택스 역프 봇 만들기 - 파이썬으로 텔레그램 봇 만들기 [7]

몽당. 2023. 2. 16. 18:04

오랜만입니다 여러분ㅠ 요즘 매일 학교를 갈 일이 생겨서 너무 바빴습니다..흑흑

오늘은 예전부터 주기적으로 가끔 찾아오는 스택스 역프를 먹을 때 도움이 될만한 스택스 역프 계산 봇에 대해 포스팅해보려합니다. (코인판 대표 먹거리)

 

항상 트레이딩뷰 알람 걸어놓고 울리면 호다닥 들어가서 업비트-바이비트 선물 호가 계산기로 노가다하면서 잡았었는데 너무 귀찮아서 그냥 봇을 만들어버렸습니다.

 

마침 요즘 마진봇 공부하면서 다 배웠던거라 간단하게 만들 수 있었네요ㅎ

일단 기능은 이렇게 1초마다 업비트-바이비트 선물 가격의 역프와 환산 테더값을 계산해서 알려줍니다.

 

그리고 이 데이터를 이용해서 좀만 응용하면 자동 주문도 시킬 수 있습니다.

 

업비트 스택스 가격 받아오기

 

업비트의 여러가지 정보를 API로 받아오기 위해서는 pyupbit라는 모듈을 사용합니다.

 

(ㄹㅇ 파이썬 짱짱맨 모듈만들어주신분들 감사합니다)

 

일단 pyupbit 모듈을 다운받아줍니다.

pip install pyupbit
 

이제 호가창 정보를 불러와야하는데 우리는 역프가 뜨면 지정가로 느긋하게 걸고 기다리는게 아니라 시장가로 바로바로 긁어야겠죠?

그래서 이러한 상황에서 시장가 주문을 넣으면 443원에 체결되므로 매도호가의 가장 낮은 가격의 정보를 받아와야합니다.

price_upbit=pyupbit.get_orderbook('KRW-STX')
stx_upbit=float(price_upbit['orderbook_units'][0]['ask_price'])
 

우선 pyupbit에서 호가창 정보를 받아오는 함수는 get_orderbook입니다.

 

우리는 스택스의 정보를 받아와야하므로 pyupbit.get_orderbook('KRW-STX') 를 통해 스택스 호가창 정보를 받아옵니다.

그럼 이렇게 매수, 매도에 걸려있는 호가 정보들이 나오는데 bid 가격이 매수호가, ask 가격이 매도 호가입니다.

 

우리는 가장 낮은 매도 호가가 필요하므로 인덱싱을 통해 키값이 'orderbook_units' 인 딕셔너리의 첫번째 값의 ask_price(매도가격)을 받아옵니다. (그냥 노가다로 찾으면댐)

 

그리고 마지막으로 나중에 이 값으로 계산을 해야하므로 실수형태인 float로 바꿔줍니다.

 

(실수 형태로 안바꿔주면 숫자가 아니라 문자형태라 계산할 때 오류가 생깁니다!)

 

그런 후 테스트겸 출력해보면

이렇게 가장 낮은 매도호가의 정보만 출력됩니다.

 

바이비트 선물 스택스 가격 받아오기

 

업비트는 pyupbit라는 너무 편한 모듈로 불러올 수 있었는데 제발 바이비트도 있어라ㅠㅠ 하며 검색해보니 역시 근본 거래소중 하나답게 pybit라는 간편한 모듈이 있었습니다!

 

pybit모듈 정보들 공부하러 이것저것 뒤적뒤적 검색하며 찾아보니 비슷비슷하더라구요ㅎ

 

우선 똑같이 pybit모듈 다운로드 해주시고

pip install pybit
 

바이비트 스택스 선물 정보 받아오는 코드입니다.

bybit_session = HTTP("https://api.bybit.com")
ret = bybit_session.orderbook(symbol="STXUSDT")['result']
stx_bybit=float(ret[0]['price'])
 

우선 bybit api 서버에서 정보를 받아오고 orderbook 함수를 통해 호가창 정보를 받아옵니다

 

그리고 symbol에 STXUSDT를 넣어주면

엄청난 양의 호가창 정보를 받아옵니다.

 

우리는 시장가 숏을 쳐야 하므로 가장 높은 매수호가 정보를 받아와야겠죠?

저 많은 데이터중 'result' 키값에 이 정보가 들어있으므로 인덱싱을 통해 받아와서 ret 변수에 넣어줍니다.

 

ret 변수에 가격, 매수/매도, 호가크기 정보가 담겨있는데 우리는 가격정보만 필요하기 때문에 또 인덱싱으로 price 부분만 잘라줍니다.

 

그리고 이 값도 마지막으로 나중에 계산을 해야하므로 실수형태인 float로 바꿔줍니다.

 

그런 후 테스트겸 출력해보면

짜란 요렇게 바이비트 스택스 선물의 가장 높은 매수 호가 가격이 출력됩니다!

 

역프 %와 테더값 출력하기

 

이제 이 2가지 가격 정보를 통해 역프가 몇 퍼센트인지 테더값은 얼마인지 알아봅시다.

import requests
from bs4 import BeautifulSoup

url = "https://wise.com/kr/currency-converter/usd-to-krw-rate?amount=1"
req = requests.get(url)
req.raise_for_status()
soup = BeautifulSoup(req.text,"html.parser")

dollar = soup.find("td",class_="CurrencyConversionTable_CurrencyConversionTable__Cell__7F10V CurrencyConversionTable_CurrencyConversionTable__Value__DqPpm").get_text()[:7]
dollar=float(dollar)

stx_gimp_print=str(round(stx_upbit/stx_bybit/dollar*100-100,2))+'%'
stx_gimp=round(stx_upbit/stx_bybit/dollar*100-100,2)
    
print(stx_gimp_print,round(stx_upbit/stx_bybit,2))
time.sleep(1)
 

달러값 받아오는건 3편 참고바랍니다!

김프 구하는 식은 다음과 같습니다.

stx_gimp=round(stx_upbit/stx_bybit/dollar*100-100,2)
 

김프를 구하고 round를 이용해 소수점 둘째짜리까지 stx_gimp 변수에 저장해줍니다.

 

ex) round(값,n) => 값을 소수점 n번째자리까지 저장

 

출력할 때 이쁘게 %까지 붙이기 위해

stx_gimp_print=str(round(stx_upbit/stx_bybit/dollar*100-100,2))+'%'
 

요렇게 바꿔줍니다.

 

테더값은 그냥 업비트가격/바이비트가격이므로

print(stx_gimp_print,round(stx_upbit/stx_bybit,2))
 

이렇게 출력하면 김프값, 테더값이 출력됩니다.

최종 코드
 
import pyupbit
import time
from pybit import HTTP
import requests
from bs4 import BeautifulSoup

while True:   
    price_upbit=pyupbit.get_orderbook('KRW-STX')
    stx_upbit=float(price_upbit['orderbook_units'][0]['ask_price'])
        
    bybit_session = HTTP("https://api.bybit.com")
    ret = bybit_session.orderbook(symbol="STXUSDT")['result']
    stx_bybit=float(ret[0]['price'])

    url = "https://wise.com/kr/currency-converter/usd-to-krw-rate?amount=1"
    req = requests.get(url)
    req.raise_for_status()
    soup = BeautifulSoup(req.text,"html.parser")

    dollar = soup.find("td",class_="CurrencyConversionTable_CurrencyConversionTable__Cell__7F10V CurrencyConversionTable_CurrencyConversionTable__Value__DqPpm").get_text()[:7]
    dollar=float(dollar)

    stx_gimp_print=str(round(stx_upbit/stx_bybit/dollar*100-100,2))+'%'
    stx_gimp=round(stx_upbit/stx_bybit/dollar*100-100,2)
    
    print(stx_gimp_print,round(stx_upbit/stx_bybit,2))
    time.sleep(1)
 

결과 확인할 때마다 실행시키기 귀찮으므로 1초마다 업데이트해서 가격이 찍히도록 만들었습니다.

 

while True를 쓰면 코드가 무한 반복되며 마지막에 time.sleep(1)을 통해 한번 출력하고 1초씩 쉬게 했습니다.

 

이렇게하고 실행하면 1초마다 자동으로 스택스의 업비트-바이비트 선물 역프를 계산해서 퍼센트와 테더값을 출력해줍니다ㅎ


여기에 업비트, 바이비트 API 키를 통해 본인 계정과 연결시켜 역프가 몇퍼이상 끼면 자동으로 주문도 넣게 할 수 있습니다. (써봤는데 짱편함) + 텔레그램과 연동도 가능

 

최근 스택스 역프 먹을 기회를 계속 줘서 간만에 맛있게 먹었네요ㅎ

 

코인판에서 코딩을 쓰니 너무 편합니다..

 

ㄹㅇ코딩 최고 코딩이 미래다!!

 

파이썬이 재밌어서 계속 공부하고 싶은데 2주뒤에 개강하면 이제 C만 할 생각에 어질어질하네요..