backtest 전략을 실제 투자에 적용하기 #3
사이드 프로젝트 링크 : https://www.github.com/fromitive/backtest
이전 글 : backtest 전략을 실제 투자에 적용하기 #2
고려해야할 사항 (계속)
이전 글에서 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파일이 있으며, 맨처음에 패키지를 설치하는 방법이 나온다.
설치가 완료되었으면 python을 실행한 후 import 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 API 및 private 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 | 
public 🌍 api 사용법
pybithumb 에서 public api는 상태를 저장하지 않도록 내부에 @staticmethod 데코레이터1를 넣어서 구분하였다. 
따라서 Bithumb 객체를 생성하지 않고, Bithub안의 method를 호출하는 형태로 이루어 진다.
| pybithumb_public_api.py | |
|---|---|
private 🔒 사용법
pybithumb 에서 private api는 bithumb API Key가 필요하므로 맴버변수를 사용한다.
따라서 Bithumb 객체를 생성할 때 API Key 및 Secret을 설정하여 method를 호출하는 형태로 이루어 진다.
| pybithumb_private_api.py | |
|---|---|
다음은?
pybithumb 패키지에는 API를 편하게 호출 하도록 편리한 기능이 많이 들어있다. 그러나, 일부 API 함수는 Bithumb API에서 반환하는 값들을 온전히 받지 못하는 경우가 많다.2
따라서 다음 시간에는 pybithumb의 기능이 아닌 구조 측면에서 분석 할 예정이다.
- 
@staticmethod를 지정하게 되면, class 함수의 메소드에 self를 넣을 수 없게되어, 객체의 맴버변수를 참조할 수 없게 된다. 따라서 public api를 이용하여 apikey 및 secret에 접근하지 못하도록 도와준다. ↩
- 
private api인 .get_balance 메소드가 그렇다. Bithumb API 문서에 따르면 기본 값을 안넣어도 되나, pybithumb에서는 currency에 default 값이 설정되어 있지 않아 꼭 currency를 지정해야 한다. ↩