An advanced API client for python crypto bot traders
Project description
pybotters
An advanced API client for python botters. This project is in Japanese.
📌 Description
pybotters
is a Python library for 仮想通貨 botter (crypto bot traders).
This library is an HTTP and WebSocket API client. It has the following features, making it useful for developing a trading bot.
🚀 Features
- ✨ HTTP / WebSocket Client
- Automatic authentication for private APIs.
- WebSocket automatic reconnection and automatic heartbeat.
- A client based on
aiohttp
.
- ✨ DataStore
- WebSocket message data handler.
- Processing of differential data such as order book updates
- High-speed data processing and querying
- ✨ Other Experiences
- Support for type hints.
- Asynchronous programming using
asyncio
. - Discord community.
🏦 Exchanges
Name | API auth | DataStore | Exchange API docs |
---|---|---|---|
bitFlyer | ✅ | ✅ | Link |
GMO Coin | ✅ | ✅ | Link |
bitbank | ✅ | ✅ | Link |
Coincheck | ✅ | ✅ | Link |
OKJ | ✅ | Not yet | Link |
BitTrade | ✅ | Not yet | Link |
Bybit | ✅ | ✅ | Link |
Binance | ✅ | ✅ | Link |
OKX | ✅ | ✅ | Link |
Phemex | ✅ | ✅ | Link |
Bitget | ✅ | ✅ | Link |
MEXC | ✅ | No support | Link |
KuCoin | ✅ | ✅ | Link |
BitMEX | ✅ | ✅ | Link |
🐍 Requires
Python 3.9+
🔧 Installation
From PyPI (stable version):
pip install pybotters
From GitHub (latest version):
pip install git+https://github.com/pybotters/pybotters.git
⚠️ Compatibility warning
pybotters is planning a completely new code base v2. It is recommended to specify version less than 2.0 (pybotters<2.0
) when specifying it as a dependency.
[!IMPORTANT] The roadmap is here: pybotters/pybotters#248
📝 Usage
Example of bitFlyer API:
HTTP API
New interface from version 1.0: Fetch API.
More simple request/response.
import asyncio
import pybotters
apis = {
"bitflyer": ["YOUER_BITFLYER_API_KEY", "YOUER_BITFLYER_API_SECRET"],
}
async def main():
async with pybotters.Client(
apis=apis, base_url="https://api.bitflyer.com"
) as client:
# Fetch balance
r = await client.fetch("GET", "/v1/me/getbalance")
print(r.response.status, r.response.reason, r.response.url)
print(r.data)
# Create order
CREATE_ORDER = False # Set to `True` if you are trying to create an order.
if CREATE_ORDER:
r = await client.fetch(
"POST",
"/v1/me/sendchildorder",
data={
"product_code": "BTC_JPY",
"child_order_type": "MARKET",
"side": "BUY",
"size": 0.001,
},
)
print(r.response.status, r.response.reason, r.response.url)
print(r.data)
asyncio.run(main())
aiohttp-based API.
import asyncio
import pybotters
apis = {
"bitflyer": ["YOUER_BITFLYER_API_KEY", "YOUER_BITFLYER_API_SECRET"],
}
async def main():
async with pybotters.Client(
apis=apis, base_url="https://api.bitflyer.com"
) as client:
# Fetch balance
async with client.get("/v1/me/getbalance") as resp:
data = await resp.json()
print(resp.status, resp.reason)
print(data)
# Create order
CREATE_ORDER = False # Set to `True` if you are trying to create an order.
if CREATE_ORDER:
async with client.post(
"/v1/me/sendchildorder",
data={
"product_code": "BTC_JPY",
"child_order_type": "MARKET",
"side": "BUY",
"size": 0.001,
},
) as resp:
data = await resp.json()
print(data)
asyncio.run(main())
WebSocket API
import asyncio
import pybotters
async def main():
async with pybotters.Client() as client:
# Create a Queue
wsqueue = pybotters.WebSocketQueue()
# Connect to WebSocket and subscribe to Ticker
await client.ws_connect(
"wss://ws.lightstream.bitflyer.com/json-rpc",
send_json={
"method": "subscribe",
"params": {"channel": "lightning_ticker_BTC_JPY"},
},
hdlr_json=wsqueue.onmessage,
)
# Iterate message (Ctrl+C to break)
async for msg in wsqueue:
print(msg)
try:
asyncio.run(main())
except KeyboardInterrupt:
pass
DataStore
import asyncio
import pybotters
async def main():
async with pybotters.Client() as client:
# Create DataStore
store = pybotters.bitFlyerDataStore()
# Connect to WebSocket and subscribe to Board
await client.ws_connect(
"wss://ws.lightstream.bitflyer.com/json-rpc",
send_json=[
{
"method": "subscribe",
"params": {"channel": "lightning_board_snapshot_BTC_JPY"},
},
{
"method": "subscribe",
"params": {"channel": "lightning_board_BTC_JPY"},
},
],
hdlr_json=store.onmessage,
)
# Watch for the best prices on Board. (Ctrl+C to break)
with store.board.watch() as stream:
async for change in stream:
board = store.board.sorted(limit=2)
print(board)
try:
asyncio.run(main())
except KeyboardInterrupt:
pass
📖 Documentation
🔗 https://pybotters.readthedocs.io/ja/stable/ (Japanese)
🗽 License
MIT
💖 Author
Please sponsor me!:
X:
Discord:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pybotters-1.5.1.tar.gz
.
File metadata
- Download URL: pybotters-1.5.1.tar.gz
- Upload date:
- Size: 174.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd5a96b765d75c4aba58fb0ecbd43294f80435cba48a71c3efb66860faa6198e |
|
MD5 | b6ad3524723af9546c8bff5360e127c9 |
|
BLAKE2b-256 | 719ab8b9c84857f46e8af64a47e9071f260b7894937fdaa821fe0b8541b6a17c |
File details
Details for the file pybotters-1.5.1-py3-none-any.whl
.
File metadata
- Download URL: pybotters-1.5.1-py3-none-any.whl
- Upload date:
- Size: 60.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f6ec3feeebe4cacb41a3410e9e3c2de5c2b1f65e3c025a892ebadfe50c7113c |
|
MD5 | 7e416df291622b8e061beee82e37e411 |
|
BLAKE2b-256 | da5f618694b3c5333ce21f5440f052c482a16e789d7d48dce4047d78df3380fa |