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를 지정해야 한다. ↩