본문 바로가기

파이썬을 이용한 비트코인 자동 매매 프로그램 만들기

바이비트(bybit) 자동매매 2024년 2월 최신버전 파이썬 코딩 (V5 API)

반응형

안녕하세요. 교육이입니다^^

 

오늘은 바이비트 V5에서 자동거래 하는 방법을 알려드리려 해요.

 

 

교육이는 자동거래로 계속 거래를 하다가

최근 다른 전략을 적용하려 했더니..

 

옛날버전에서는 지갑 정보를 불러올 때,

"pybit - ERROR - Too many visits. Exceeded the API Rate Limit.

(ErrCode: 10006). Ratelimited on current request. Sleeping, then trying again.

Ratelimit will reset at . Sleeping for seconds. retries remain."

가 뜨면서 10분에 한번씩 밖에 작동을 못하더라구요.

옛날버전 pybit API 에러

 

그래서 새 버전인 V5 API를 설치해서 적용했더니 문제없이 실행됐어요.

 

새 버전인 만큼, 코드가 많이 바뀌어서 프로그램을 다시 짜야했어요.

 

지금부터 간단한 거래를 할 수 있도록 코드를 알려드릴게요.

 

★ ★ ★ ★ ★ 본 내용은 자동 매매하는 방법을 소개하는 것으로 수익을 보장하지 않으며,

                   손실에 대해서도 일절 책임지지 않습니다.

                   바이비트 홈페이지 또는 어플에서 설정한 레버리지로 거래가 진행되기 때문에 주의해야합니다~!!

 

 

새로운 API 버전을 설치하기 위해서  아나콘다에서 새로운 환경을 만들어야 해요.

 

아나콘다에 대해 모르시는 분들은 아래에 링크를 걸어뒀어요.

(아나콘다 환경을 만들 수 있으시면, 3번으로

  바이비트 API KEY가 있으시면, 4번으로 가주세요.

  새로운 거래 코드가 궁금하신분은 6번으로 가주세요.)

 

1. [미니콘다 설치하기]

 

미니콘다3 설치하기_윈도우 용

안녕하세요 교육이 입니다. 요즘 비트코인에 관심이 생겼는데요~ 세상에나! 자동 매매 프로그램을 만들 수 있다는것! 알고 계셨나요? (저만 몰랐을 수도...^^;ㅋㅋ) 직접 프로그램을 만들 수 있다

giftededu.tistory.com

 

2. [환경 생성 및 주피터 노트북 설치 및 실행]

 

주피터 노트북 설치 및 실행_윈도우 용

안녕하세요! 교육이 입니다. 파이썬을 이용해 비트코인을 자동으로 매매할 수 있는 프로그램을 만드는 방법! 같이 알아보기로 했었죠?! 오늘은 두 번째 게시글 입니다~ 웹 브라우저에서 파이썬

giftededu.tistory.com

 

3. [바이비트 API KEY 발급받기]

 

바이비트(Bybit)에서 자동거래를 하기 위한 API KEY 발급받기

안녕하세요! 교육이 입니다. 지난 시간에는 python 코딩 네 번째 시간으로 '다양한 정보를 모니터에 출력'하는 방법에 대해 알아보았는데요, (파이썬 파일 생성 및 API Key 입력 방법은 [지난 포스팅]

giftededu.tistory.com

 

4. [pybit 모듈 설치하기]

 

바이비트(Bybit)에서 자동거래를 하기 위한 pybit 모듈 설치하기

안녕하세요! 교육이 입니다. 지난 시간에는 바이비트(Bybit)에서 자동거래를 하기 위한 코딩 첫 번째 시간으로 '바이비트(Bybit)에서 자동거래를 하기 위한 API KEY를 발급'하는 방법에 대해 알아보았

giftededu.tistory.com

4번 방법으로 pybit를 설치하면 V5 API가 설치되더라구요.

 

5. [API key 입력 하기]

 

바이비트(Bybit)에서 자동거래를 하기 위한 python 코딩 첫번째– API Key 입력 및 잔고 조회

안녕하세요! 교육이 입니다. 지난 시간에는 바이비트(Bybit)에서 자동거래를 하기 위한 준비 두번째 시간으로 '바이비트(Bybit)에서 자동거래를 하기 위한 pybit 모듈 설치'하는 방법에 대해 알아보

giftededu.tistory.com

이 링크의 4번까지 따라하셔서 API key 와 API secret이 있는 파일까지 생성해주세요.

 

 

 

6. V5 API 최신 버전 python 코딩

이제부터 새롭게 바뀐 코딩으로 들어갈게요.

"이전 코딩들에서 바뀐 부분들만 포스팅 할게요.

거래 전략이나 반복 수행 방법 등은 이전 포스팅을 봐주세요."

 

① 모듈과 API key 파일 불러오기

from pybit.unified_trading import HTTP

with open("bybit.key") as f():
    lines = f.readlines()
    api_key = lines[0].strip()
    api_secret = lines[1].strip()
session = HTTP(
    testnet = False,
    api_key=api_key,
    api_secret=api_secret
)

 

 

② 바이비트 지갑과 포지션 정보, BTCUSDT 현재가 불러오기

USDT = float(session.get_wallet_balance(accountType = "CONTRACT", coin = "USDT")[
    'result']['list'][0]['coin'][0]['equity'])  #USDT 보유량

my_positions = session.get_positions(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list']

if my_positions[0]['side'] == 'Buy':
    l_side = 0
    s_side = 1
elif my_positions[1]['side'] == 'Buy':
    l_side = 1
    s_side = 0
    
position_size_long = float(my_positions[l_side]['size'])  # BTCUSDT long size
position_size_short = float(my_positions[s_side]['size'])  # BTCUSDT short size
position_average_long = float(my_positions[l_side]['avgPrice'])  # BTCUSDT long 평균가격
position_average_short = float(my_positions[s_side]['avgPrice'])  # BTCUSDT short 평균가격
position_leverage_long = float(my_positions[l_side]['leverage'])  # BTCUSDT long 레버리지
position_leverage_short = float(my_positions[s_side]['leverage'])  # BTCUSDT short 레버리지

BTCUSDT_now = float(session.get_tickers(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list'][0]['lastPrice']) #BTCUSDT 현재가

"#USDT 보유량"등등..  문자 #과 그 다음 글자들은 해당 줄을 설명하는 것으로

안적으셔도 실행에는 영향이 없어요.

(angry 님 댓글을 반영해서 If 문을 추가하여 side 기반으로 정보를 불러오도록 수정했어요.)

 

 

③ long open (롱 오픈) 코드

    - 시장가로 오픈

 open_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Buy',
    orderType = 'Market',
    qty = '0.001',
    positionIdx = 1,
)['result']['orderId']

현재 시장가로 long open 하는 코드예요.

symbol을 BTCUSDT대신 다른 것으로 바꾸면 해당 코인에 대한 거래가 가능해요.

qty의 0.001은 BTCUSDT 오픈 양을 나타내요.

 

    - 타겟 가격으로 오픈

open_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Buy',
    orderType = 'Limit',
    qty = '0.001',
    price = 50000.00,
    positionIdx = 1,
)['result']['orderId']

price = 50000.00는 BTCUSDT를 가격 50000.00에 오픈 주문을 넣는거예요.

 

 

④  long close (롱 클로즈) 코드

    - 시장가로 close

close_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Sell',
    orderType = 'Market',
    qty = 0.001,
    positionIdx = 1
)['result']['orderId']

시장가로 long close 코드예요.

 

    - 타겟 가격으로 close

close_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Sell',
    orderType = 'Limit',
    qty = 0.001,
    price = 50000.00,
    positionIdx = 1
)['result']['orderId']

BTCUSDT 가격 50000.00으로 close 주문을 넣는 거예요.

 

 

⑤  short open (숏 오픈) 코드

    - 시장가로 오픈

open_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Sell',
    orderType = 'Market',
    qty = '0.001',
    positionIdx = 2,
)['result']['orderId']

현재 시장가로 short open 하는 코드예요.

long open과는 side와 positionIdx가 달라요.

 

    - 타겟 가격으로 오픈

open_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Sell',
    orderType = 'Limit',
    qty = '0.001',
    price = 50000.00,
    positionIdx = 2,
)['result']['orderId']

50000.00으로 short 오픈이예요.

 

 

⑥ short close (숏 클로즈) 코드

    - 시장가로 close

close_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Buy',
    orderType = 'Market',
    qty = 0.001,
    positionIdx = 2
)['result']['orderId']

시장가 short 클로즈 코드예요.

 

    - 타겟 가격으로 close

close_ID = session.place_order(
    category = 'linear',
    symbol = 'BTCUSDT',
    side = 'Buy',
    orderType = 'Limit',
    qty = 0.001,
    price = 50000.00,
    positionIdx = 2
)['result']['orderId']

50000.00으로 short 클로즈 코드예요.

 

⑦ 주문 확인 코드

order_st = session.get_open_orders(
    category = 'linear',
    symbol = 'BTCUSDT',
    orderId = open_ID,
)['result']['list'][0]['orderStatus']

print(order_sts)

주문 ID(orderId)를 이용해서 해당 주문의 현재 상태를 확인하는 코드예요.

결과가 New 이면 거래가 완료되지 않은 주문이고,

Filled 이면 거래가 완료된 주문이예요.

Cancelled 이면 취소한 주문이예요.

 

그럼, 모두 성공적인 투자 하세요~

 

오늘도 즐거운 하루 되세요~

 

 

★ ★ ★ ★ ★ 본 내용은 자동 매매하는 방법을 소개하는 것으로 수익을 보장하지 않으며,

                   손실에 대해서도 일절 책임지지 않습니다.

                   바이비트 홈페이지 또는 어플에서 설정한 레버리지로 거래가 진행되기 때문에 주의해야합니다~!!

반응형