Skip to content

backtest 전략을 실제 투자에 적용하기 #3

사이드 프로젝트 링크 : https://www.github.com/fromitive/backtest

고려해야할 사항 (계속)

이전 글에서 bithumb api 가이드를 보면서 직접 구현을 했다면, 오늘은 이미 잘 만들어진 패키지인 pybithumb을 이용해보자.

요구사항
1. top 5 거래량은 어떻게 추출할 것인지 (완료)
2. 매수를 하는 API는 어떻게 구현 하는지
3. 매수 할 때의 금액은 어떻게 계산할 것인지
4. 매수 플래그는 어떻게 세팅할 것인지
5. 주문은 했으나, 구매에 성공했는지 안했는지 어떻게 확인할 수 있는지
6. 매수한 코인의 수익율은 어떻게 실시간으로 계산하는지
7. 매수한 코인의 매도에 실패 했을 때, 어떻게 주문을 취소하고 재 매도할 수 있는지

pybithumb 사용

pybithumb github 주소 : https://github.com/sharebook-kr/pybithumb

pybithumb은 bithumb API를 편하게 사용하기 위한 wrapper라고 소개 된다. 얼마나 사용하기 편한지 알아보자.

pybithumb 설치

위의 pybithumb github 주소로 접속하게 되면 가장 먼저 보이는 README.md파일이 있으며, 맨처음에 패키지를 설치하는 방법이 나온다.

pybithumb 설치 방법
pip install pybithumb

설치가 완료되었으면 python을 실행한 후 import pybithumb이라고 쳐서 오류가 안나오는지 확인하자 아무것도 안나오면 설치가 제대로 완료된 것이다.

pybithumb 설치 확인 방법
(env) ubuntu@ubuntu:~/backtest$ python
Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pybithumb
>>> 

pybithumb 사용법

pybithumb은 public APIprivate API, 그리고 websocket를 지원한다. 각 지원하는 API를 간단하게 소개하자면 아래와 같다.

public / private Method 명 설명
public 🌍 get_tickers bithumb API에서 제공하는 현재가 정보 조회(ALL) (/public/ticker/ALL_{마켓 종류})를 지원한다.
public 🌍 get_current_price bithumb API에서 제공하는 현재가 정보 조회 (자산별) (/public/ticker/{코인 종류}_{마켓 종류})를 지원한다
public 🌍 get_market_detail pybithumb 에서 bithumb API의 현재가 정보 조회 (자산별) (/public/ticker/{코인 종류}_{마켓 종류})를 계량한 것 bithumb API에서 제공하는 현재가 정보 조회 (자산별) (/public/ticker/{코인 종류}_{마켓 종류})를 지원한다
public 🌍 get_ohlc pybithumb 에서 bithumb API의 현재가 정보 조회 (자산별) (/public/ticker/{코인 종류}_{마켓 종류})를 계량한 것으로 현재 코인의 OHLC(시가,고가,저가,종가)를 튜플로 제공한다.
public 🌍 get_orderbook bithumb API에서 제공하는 호가 정보 조회 (자산별) (/public/orderbook/{order_currency}_{payment_currency})를 지원한다
public 🌍 get_btci bithumb API에서 제공하는 BTCI (빗썸지수) (/public/btci)를 지원한다
public 🌍 get_transaction_history bithumb API에서 제공하는 최근 체결 내역 (/transaction_history/{order_currency}_{payment_currency})을 지원한다.
public 🌍 get_candlestick bithumb API에서 제공하는 CANDLESTICK API (/public/candlestick/{order_currency}_{payment_currency}/{chart_intervals})를 지원한다. 결과값으로 pandas.DataFrame이 반환된다.
private 🔒 get_trading_fee pybithumb 에서 bithumb API의 회원 정보 조회 (/info/account)를 계랑한 것으로 코인 별 거래 수수료를 가져올 수 있다.
private 🔒 get_balance pybithumb 에서 bithumb API의 회원 정보 조회 (/info/account)를 계랑한 것 회원의 잔고를 (보유코인, 사용중인코인, 보유원화, 사용중언화) 튜플로 제공함
private 🔒 buy_limit_order pybithumb 에서 bithumb API의 지정가 주문하기 (/trade/place)를 계량한 것으로 구매할 코인 에 대해 가격 및 개수를 지정하여 주문할 수 있음
private 🔒 sell_limit_order pybithumb 에서 bithumb API의 지정가 주문하기 (/trade/place)를 계량한 것으로 판매할 코인 에 대해 가격 및 개수를 지정하여 주문할 수 있음
private 🔒 get_outstanding_order pybithumb 에서 bithumb API의 거래 주문내역 조회 (/info/orders)를 계랑한 것으로 미체결된 코인의 정보 를 확인할 수 있음
private 🔒 get_order_completed pybithumb 에서 bithumb API의 거래 주문내역 조회 (/info/orders)를 계랑한 것으로 체결된 코인의 정보 를 확인할 수 있음
private 🔒 cancel_order pybithumb 에서 bithumb API의 주문 취소하기 (/trade/cancel)를 계랑한 것으로 최근 주문한 코인의 거래를 취소할 수 있음
private 🔒 buy_market_order bithumb API에서 제공하는 시장가 매수하기 (/trade/market_buy) 기능을 제공함
private 🔒 sell_market_order bithumb API에서 제공하는 시장가 매도하기 (/trade/market_sell) 기능을 제공함
private 🔒 withdraw_coin bithumb API에서 제공하는 코인 출금하기 (/trade/btc_withdrawal) 기능을 제공함
private 🔒 withdraw_cash ⚠ 해당 API는 빗썸 API 문서 등록되어 있지 않음 - deprecated

public 🌍 api 사용법

pybithumb 에서 public api는 상태를 저장하지 않도록 내부에 @staticmethod 데코레이터1를 넣어서 구분하였다.

따라서 Bithumb 객체를 생성하지 않고, Bithub안의 method를 호출하는 형태로 이루어 진다.

pybithumb_public_api.py
1
2
3
4
from pybithumb import Bithumb

# public api 호출 - 객체를 생성하지 않고 바로 사용할 수 있다.
Bithumb.get_tickers(payment_currency="KRW")  # 거래 가능한 코인에 대해 현재가 정보를 가져온다.

private 🔒 사용법

pybithumb 에서 private apibithumb API Key가 필요하므로 맴버변수를 사용한다.

따라서 Bithumb 객체를 생성할 때 API KeySecret을 설정하여 method를 호출하는 형태로 이루어 진다.

pybithumb_private_api.py
1
2
3
4
5
6
from pybithumb import Bithumb

# private api 호출 - API Key와 Secret을 이용하여 객체를 생성한다.
bithumb = Bithumb('api key','secret')  # api key 및 secert 을 설정하여 Bithumb 객체 생성

bithumb.get_balance(currency="BTC")  # 회원의 잔고를 조회한다 currency를 꼭 하나라도 지정해야 한다.

다음은?

pybithumb 패키지에는 API를 편하게 호출 하도록 편리한 기능이 많이 들어있다. 그러나, 일부 API 함수는 Bithumb API에서 반환하는 값들을 온전히 받지 못하는 경우가 많다.2

따라서 다음 시간에는 pybithumb의 기능이 아닌 구조 측면에서 분석 할 예정이다.



  1. @staticmethod를 지정하게 되면, class 함수의 메소드에 self를 넣을 수 없게되어, 객체의 맴버변수를 참조할 수 없게 된다. 따라서 public api를 이용하여 apikey 및 secret에 접근하지 못하도록 도와준다

  2. private api인 .get_balance 메소드가 그렇다. Bithumb API 문서에 따르면 기본 값을 안넣어도 되나, pybithumb에서는 currency에 default 값이 설정되어 있지 않아 꼭 currency를 지정해야 한다. 

Comments