Pybotters

Latest version: v1.5.1

Safety actively analyzes 681866 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 7 of 8

0.3.0

✅ 試験的にBinanceのDataStoreを実装する(各取引所のDataStoreを実装する) 20
✅ BybitのInstrumentが重複する 45

🌈 Experimental

✨ 試験的にBinanceのDataStoreを実装しました 20

一部のマーケットストリームとユーザーデータストリームのDataStoreを実装しました。
** **重要** **
基本的にはFutures(USDⓈ-M、COIN-M)でテストをしており、Spotは対応できてない可能性があります。
板情報は未実装です。ベスト値のみ取れる板ティッカー(`bookticker`)のみ使えます。
また、`initialize`のようなメソッドも実装していないのでポジションやオーダーの初期値は取得できません。
完全なDataStoreは今後実装予定です。

実装済みストリーム

- `trade` (Market Streams `trade`, `aggTrade`)
- `bookticker` (Market Streams `bookTicker`)
- `balance` (User Data Streams)
- `position` (User Data Streams)
- `order` (User Data Streams)

ユーザーデータストリーム(USDⓈ-M)の例

WebSocket受信ごとにオーダー・残高・ポジションを表示する。
※`listenKey`の自動keepaliveは現状pybotters側で実装していないので手動でタスク化する必要があります。

py

async def main():
async with pybotters.Client(base_url='https://fapi.binance.com') as client:
store = pybotters.BinanceDataStore()
r = await client.post('/fapi/v1/listenKey')
data = await r.json()
listenKey = data['listenKey']
pybotters.print(data)
wstask = await client.ws_connect(
f'wss://fstream.binance.com/ws/{listenKey}',
hdlr_json=store.onmessage,
)
listentask = asyncio.create_task(keepalive(client))
while True:
pybotters.print(store.order.find())
pybotters.print(store.balance.find())
pybotters.print(store.position.find())
print('-' * 80)
await store.wait()


async def keepalive(client: pybotters.Client):
while not client._session.closed:
await client.put('/fapi/v1/listenKey')
await asyncio.sleep(1800.0) 30 minutes


🐛 Bugfix

🐛 BybitのDataStoreのレコードが重複するバグを修正しました 45

再接続時にレコード重複するバグを修正しました。(Issues参照)

0.2.2

🚀 New Experience

データストアでソート済みの板情報の取得可能にする 40

✨ ソート済みの板情報が取得できるようになりました

FTXの例

py
async def main():
store = pybotters.FTXDataStore()
ws = await client.ws_connect(
'wss://ftx.com/ws',
send_json={'op': 'subscribe', 'channel': 'orderbook', 'market': 'BTC-PERP'},
hdlr_json=store.onmessage,
)
pybotters.print(store.orderbook.sorted())
{
'asks': [

0.2.1

🐛 Bugfix

(hot-fix)FTXのサブアカウントのWebSocket認証に対応した 37

0.2.0

🚀 New Experience

FTXのデータストアを実装した 20
同期リクエストをサポートした 27
apisの暗黙的な読み込みに対応した 36
FTXのサブアカウントのWebSocket認証に対応した 37

✨ FTXのデータストアを実装しました、サブアカウントのWebSocket認証に対応しました

FTXのWebSocketのデータを簡単に扱えるようになりました!

[Reference](https://github.com/MtkN1/pybotters/wiki/Reference#class-pybottersftxdatastore)、および[Exchanges](https://github.com/MtkN1/pybotters/wiki/Exchanges#ftx)をご覧ください。

✨ 同期リクエストをサポートしました

`requests`ライブラリのように、`asyncio`を表面的に使用せずいとも簡単にリクエストが可能になりました!

python
import pybotters

r = pybotters.request('GET', 'https://...', apis=apis)
r = pybotters.get('https://...', params={'foo': 'bar'}, apis=apis)
r = pybotters.post('https://...', data={'foo': 'bar'}, apis=apis)
r = pybotters.put('https://...', data={'foo': 'bar'}, apis=apis)
r = pybotters.delete('https://...', data={'foo': 'bar'}, apis=apis)

print(r.text())
print(r.json())


> NOTE:
この呼び出し方は自動的にセッションを開き必ず閉じるのでkeep-alive接続はありません。
対話モードや検証に利用する際に便利ですが、botとして実装する場合は非同期の`Client`クラスの利用をおすすめします。

詳細は[Advanced Usage](https://github.com/MtkN1/pybotters/wiki/Advanced-Usage#%E5%90%8C%E6%9C%9F%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88)をご覧ください。

✨ apisの暗黙的な読み込みに対応しました

カレントディレクトリにJSONファイルを配置したり、環境変数を設定することで`apis`の設定を省力可能になりました!

詳細は[Advanced Usage](https://github.com/MtkN1/pybotters/wiki/Advanced-Usage#apis%E3%81%AE%E6%9A%97%E9%BB%99%E7%9A%84%E3%81%AA%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF)をご覧ください。

🚧 Specification Change

♻️ BybitDataStore.initialize の引数仕様を変更しました

`initialize`メソッドはリストを受け入れていましたが、可変長引数に変更しました。

python
store = pybotters.BybitDataStore()
before
await store.initialize([
client.get('https://...'),
client.get('https://...'),
])
after
await store.initialize(
client.get('https://...'),
client.get('https://...'),
)

0.1.2

🔧 Bugfix

BybitデータストアのUSDTの契約ポジションが正常に反映されない 34

📖 Documentation

READMEとWikiに取引所APIドキュメントのリンクを追加する 33

0.1.1

🚀 New Experience

23 WebSocket接続時に複数回リクエストに対応した(bitFlyerなどで複数チャンネルが購読に対応した)
28 BybitデータストアのREST API経由の初期化に対応した
29 リクエストメソッドのkwargsに対応した
30 apisをJSON形式のファイルオープンに対応した

✨ WebSocketの複数回リクエストに対応しました

bitFlyer等、WebSocketの購読に複数回リクエスト送信がいる取引所で、必要なトピックを購読できるようになりました。

`send_json`(または`send_str`)をリストで指定します。

python
async def main():
async with pybotters.Client(apis=apis) as client:
wstask = await client.ws_connect(
'wss://ws.lightstream.bitflyer.com/json-rpc',
send_json=[
{
'method': 'subscribe',
'params': {'channel': 'child_order_events'},
'id': 'subscribe:child_order_events',
},
{
'method': 'subscribe',
'params': {'channel': 'parent_order_events'},
'id': 'subscribe:lightning_ticker_FX_BTC_JPY',
},
],
hdlr_json=lambda msg, ws: print(msg),
)
await wstask


✨ BybitデータストアのREST API経由の初期化に対応しました

BybitのWebSocketは初期データ(オーダー・ポジション・ウォレット等)が配信されませんでしたが、REST API経由のデータを取得できるようになりました。

python
async def main():
async with pybotters.Client(apis=apis.getall(), base_url='https://api.bybit.com') as client:
store = pybotters.BybitDataStore()
await store.initialize([
client.get('/v2/private/order', params={'symbol': 'BTCUSD'}),
client.get('/v2/private/position/list', params={'symbol': 'BTCUSD'}),
client.get('/v2/private/wallet/balance'),
])
print(store.order.find())
print(store.position.find())
print(store.wallet.find())


✨ リクエストメソッドのkwargsに対応しました

主にFTXで、リクエスト毎にサブアカウントを指定できるようになります。

python
async def main():
async with pybotters.Client(apis=apis, base_url='https://ftx.com/api', headers={'FTX-SUBACCOUNT': 'my_subaccount_nickname'}) as client:
r = await client.get('...')
r = await client.get('...', headers={'FTX-SUBACCOUNT': 'my_alt_subaccount_nickname'})


✨ apisをJSON形式のファイルオープンに対応しました

API情報をJSONで保存している場合、コード内に変数で書かなくても読み込みるようになりました。

(ファイル名:`apis.json`)
json
{
"bybit": ["BYBIT_API_KEY", "BYBIT_API_SECRET"],
"btcmex": ["BTCMEX_API_KEY", "BTCMEX_API_SECRET"],
"binance": ["BINANCE_API_KEY", "BINANCE_API_SECRET"],
"....": ["...", "..."]
}


文字列(ディレクトリパス)を指定して読み込む。

python
async def main():
async with pybotters.Client(apis='apis.json') as client:
...

Page 7 of 8

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.