Python Wrapper for Bithumb API - grruju/uju GitHub Wiki

Installation

pip install pybithumb

Import

from pybithumb import Bithumb

Public API

์•”ํ˜ธํ™”ํ ๋ชฉ๋ก

๋น—์ธ์ด ์ง€์›ํ•˜๋Š” ์•”ํ˜ธํ™”ํ ๋ชฉ๋ก์„ ์–ป์–ด์˜จ๋‹ค.

print(Bithumb.get_tickers())
['BTC', 'ETH', 'LTC', 'ETC', 'XRP', 'BCH', 'QTUM', 'BTG', 'EOS', 'ICX', 'TRX', 'ELF', 'OMG', 'KNC', 'GLM', 'ZIL', 'WAXP', 'POWR', 'LRC', 'STEEM', 'STRAX', 'ZRX', 'REP', 'XEM', 'SNT', 'ADA', 'CTXC', 'BAT', 'WTC', 'THETA', 'LOOM', 'WAVES', 'TRUE', 'LINK', 'ENJ', 
'VET', 'MTL', 'IOST', 'TMTG', 'QKC', 'HDAC', 'AMO', 'BSV', 'ORBS', 'TFUEL', 'VALOR', 'CON', 'ANKR', 'MIX', 'CRO', 'FX', 'CHR', 'MBL', 'MXC', 'FCT', 'TRV', 'DAD', 'WOM', 'SOC', 'EM', 'BOA', 'FLETA', 'SXP', 'COS', 'APIX', 'EL', 'BASIC', 'HIVE', 'XPR', 'VRA', 'FIT', 'EGG', 'BORA', 'ARPA', 'APM', 'CKB', 'AERGO', 'ANW', 'CENNZ', 'EVZ', 'CYCLUB', 'SRM', 'QTCON', 'UNI', 'YFI', 'UMA', 'AAVE', 'COMP', 'REN', 'BAL', 'RSR', 'NMR', 'RLC', 'UOS', 'SAND', 'GOM2', 'RINGX', 'BEL', 'OBSR', 'ORC', 'POLA', 'AWO', 'ADP', 'DVI', 'GHX', 'MIR', 'MVC', 'BLY', 'WOZX', 'ANV', 'GRT', 'MM', 'BIOT', 'XNO', 'SNX', 'RAI', 'COLA', 'NU', 'OXT', 'LINA', 'MAP', 'AQT', 'WIKEN', 'CTSI', 'MANA', 'LPT', 'MKR', 'SUSHI', 'ASM', 'PUNDIX', 'CELR', 'LF', 'ARW', 'MSB', 'RLY', 'OCEAN', 'BFC', 'ALICE', 'CAKE', 'BNT', 'XVS', 'CHZ', 'AXS', 'DAI', 'MATIC', 'BAKE', 'VELO', 'BCD', 'XLM', 'GXC', 'BTT', 'VSYS', 'IPX', 'WICC', 'ONT', 'LUNA', 'AION', 'META', 'KLAY', 'ONG', 'ALGO', 'JST', 'XTZ', 'MLK', 'WEMIX', 'DOT', 'ATOM', 'SSX', 'TEMCO', 'HIBS', 'BURGER', 'DOGE', 'KSM', 'CTK', 'XYM', 'BNB', 'SUN', 'XEC', 'PCI', 'SOL']

์ตœ๊ทผ ์ฒด๊ฒฐ๊ฐ€๊ฒฉ

get_current_price ํ•จ์ˆ˜๋Š” ์ตœ๊ทผ ์ฒด๊ฒฐ ๊ฐ€๊ฒฉ์„ ์กฐํšŒํ•œ๋‹ค.

for coin in Bithumb.get_tickers()[:5]:
    print(coin, Bithumb.get_current_price(coin))
BTC 78568000.0
ETH 4697000.0
LTC 229200.0
ETC 64400.0
XRP 1329.0

์‹œ์žฅ ํ˜„ํ™ฉ ์ƒ์„ธ์ •๋ณด

get_market_detail ํ•จ์ˆ˜๋Š” 00์‹œ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ฐ€/๊ณ ๊ฐ€/์ €๊ฐ€/์ข…๊ฐ€/๊ฑฐ๋ž˜๋Ÿ‰ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

for coin in  Bithumb.get_tickers():
    print(coin, Bithumb.get_market_detail(coin))
BTC (76498000.0, 78746000.0, 76261000.0, 78588000.0, 1260.7801685)
ETH (4651000.0, 4699000.0, 4629000.0, 4699000.0, 7710.88377203)
LTC (226500.0, 229700.0, 226300.0, 229200.0, 2414.08790075)
ETC (64250.0, 64500.0, 64000.0, 64400.0, 20317.59633999)
XRP (1325.0, 1334.0, 1320.0, 1329.0, 11575639.48943114)

๋งค์ˆ˜/๋งค๋„ ํ˜ธ๊ฐ€

get_orderbook ํ•จ์ˆ˜๋Š” ํ˜ธ๊ฐ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ 5๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, limit ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ 30๊ฐœ๊นŒ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

for coin in  Bithumb.get_tickers():
    print(coin, Bithumb.get_orderbook(coin))

์‹œ๊ฐ„๋ณ„ ๊ฐ€๊ฒฉ์ •๋ณด

์‹œ๊ฐ€/์ข…๊ฐ€/๊ณ ๊ฐ€/์ €๊ฐ€/๊ฑฐ๋ž˜๋Ÿ‰ ์ •๋ณด๋ฅผ DataFrame์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

df = Bithumb.get_candlestick("BTC")
print(df.tail(5))
                           open        high         low       close       volume
time
2021-10-16 00:00:00  73679000.0  76605000.0  73102000.0  74339000.0  4313.858489
2021-10-17 00:00:00  74319000.0  75283000.0  73926000.0  74727000.0  2922.465535
2021-10-18 00:00:00  74776000.0  77000000.0  73717000.0  76297000.0  4088.309876
2021-10-19 00:00:00  76329000.0  77200000.0  75493000.0  76498000.0  3374.366920
2021-10-20 07:00:00  76498000.0  78746000.0  76261000.0  78616000.0  1264.517067

chart_intervals ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์กฐํšŒ ๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 1m, 3m, 5m, 10m, 30m, 1h, 6h, 12h, 24h
df = Bithumb.get_candlestick("BTC", chart_intervals="30m")
print(df.tail(5))
                           open        high         low       close      volume
time
2021-10-20 05:30:00  78432000.0  78746000.0  78407000.0  78660000.0   78.082516
2021-10-20 06:00:00  78653000.0  78669000.0  78023000.0  78169000.0   75.424302
2021-10-20 06:30:00  78175000.0  78633000.0  78157000.0  78459000.0  100.155448
2021-10-20 07:00:00  78461000.0  78626000.0  78269000.0  78290000.0   80.078140
2021-10-20 07:32:00  78311000.0  78357000.0  78259000.0  78357000.0    6.885242

์›น์†Œ์ผ“

WebSocket์„ ์ด์šฉํ•ด์„œ ํ˜„์žฌ๊ฐ€, ํ˜ธ๊ฐ€, ์ฒด๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ˆ˜์‹ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉฐ ticker, orderbook, transaction์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ตฌ๋…ํ•  ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋ฉฐ ์•”ํ˜ธํ™”ํ์˜ ํ‹ฐ์ปค๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์—์„œ๋Š” ์›ํ™” ์‹œ์žฅ๋งŒ์„ ์ง€์›ํ•œ๋‹ค.
if __name__ == "__main__":
    wm = WebSocketManager("ticker", ["BTC_KRW"])
    for i in range(10):
        data = wm.get()
        print(data)
    wm.terminate()

์ฃผ์˜ํ•  ์‚ฌํ•ญ์€ multiprocessing์„ ์œ„ํ•ด __name__ guard๋ฅผ ๋ฐ˜๋“œ์‹œ ์จ์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

PyQt5์™€ ํ•จ๊ป˜ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Private API

๋กœ๊ทธ์ธ

connectkey์™€ secretkey๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊ทธ์ธํ•œ๋‹ค. ๋‘ key๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

bithumb = Bithumb("conkey", "seckey")

์ˆ˜์ˆ˜๋ฃŒ ์กฐํšŒ

for coin in  Bithumb.get_tickers():
    print(coin, bithumb.get_trading_fee(coin))

์ž”๊ณ  ์กฐํšŒ

for coin in Bithumb.get_tickers():
    print(coin, bithumb.get_balance(coin))

๋งค์ˆ˜/๋งค๋„ ์ฃผ๋ฌธ

๋น„ํŠธ์ฝ”์ธ์„ 1100๋งŒ์›์— 1๊ฐœ ๋งค์ˆ˜/๋งค๋„ํ•œ๋‹ค.

desc = bithumb.buy_limit_order("BTC", 11000000, 1)
desc = bithumb.sell_limit_order("BTC", 11000000, 1)

๋งค์ˆ˜/๋งค๋„ ์ž”๋Ÿ‰ ํ™•์ธ

quanity = bithumb.get_outstanding_order(desc)

๋งค์ˆ˜/๋งค๋„ ์ฃผ๋ฌธ ์ทจ์†Œ

status = bithumb.cancel_order(desc)