見出し画像

(β版)ccxtの上位互換を目指すライブラリpybottersのベータ版をリリースしました

こんにちは、まちゅけん(@MtkN1XBt)です。
pybottersの開発とドキュメント整備がある程度進んだので、今回はベータ版としてリリースします。
このnoteではベータ版の変更点とDiscordサーバーを開設したのでその紹介をしていきたいと思います🙂(後半に開発談もあります)

pybottersとは?

仮想通貨botter 向けのPythonライブラリです。
ccxt の上位互換なライブラリを目指して開発しています。
オープンソースなので無料でだれでもご利用いただけます。
主な機能紹介からインストール方法はGitHubリポジトリ、またアルファ版リリースの記事にまとめてあるのでそちらをご覧ください👇

What's New ?

✨ bitFlyer、GMO Coin、Liquid、bitbank、FTX、BitMEXのプライベートAPI認証を実装しました
Bybit、Binance、BTXMEXに加え上記取引所に対応しました。これで多くの国内外の主要取引所で取引ができます。

画像1

✨ Bybit、BTCMEX向けのDataStoreを実装しました
WebSocketの受信データをハンドリングするDataStoreを実装しました。BybitとBTCMEXではDataStoreを利用すれば高頻度取引が可能です。

✨ PyPIにパッケージを登録しました
PyPI(Python Package Index)にpybottersを登録しました。これにより誰でも簡単にpip installが行えるようになりました。

pip install pybotters

✨ ドキュメント(Wiki)を作成しました
pybottersの利用方法を順を追って解説をしているので、利用方法を学ぶにはWikiをご覧ください。
🟢Home: イントロダクションのページです。
🟠Example: 実際のbotでの実装例を紹介したページです。
https://github.com/MtkN1/pybotters/wiki

Discordサーバー開設しました

質問をTwitterのDMなどで頂きますが、コードのやりとりとかちょっと限界があったのでDiscordサーバーを開設します。コミュニティ運営は初めてなので不慣れですが是非ご参加ください🙇‍♂️🙇‍♂️

ロードマップ

・各取引所のデータストアの実装
・同期クライアント(requests)の実装
(バックテスト機能などは現状考えていません)

✨🍰✨

リリース記事としてのコンテンツは以上です。
これより下は雑談ですが今回はなぜpybottersを開発し始めたのかと言う経緯を書こうと思います。

開発の経緯(長めの雑談)

取引所公式のPythonライブラリは基本ポンコツ
Bybitの公式BitMEXの公式BTCMEXの公式
REST APIはどれもOpenAPI(Swagger)というフレームワーク作られておりこれはエンドポイントから自動生成されるツールのようです。正直使いにくくて実用レベルではありません。公式のWebSocketクライアントも接続ができるだけで全く使い物になりませんでした。
あとそもそも国内取引所はライブラリを提供していません。

ccxtは標準化されすぎている、WebSocket(ccxt pro)は有料
ccxtってすごい便利でめちゃくちゃな数の取引所に対応していて、それにAPIキー・シークレットを入れて「create_order」や「fetch_positon」の関数を呼べば簡単に自動取引botも作れちゃいますよね?
しかしながらこれは汎用性とのトレードオフで、取引所固有のAPIが叩けなかったり、シンボルをBTC/USDと指定するようなccxtのお作法などもあるなどの課題がありました。
そこで「create_order」のような関数を呼ぶのではなく、requestsライブラリの「requests.get('...')」のようにエンドポイント指定で叩けるようなクライアントを作りたいと思いました。これであればccxtの標準に左右されず、取引所のAPIドキュメントをみながら汎用性の高いbotを作れます。
またWebSocketが使えるccxt proは有料(サブスク)なので普及してません。

botter界隈のライブラリ事情
上記2つの理由から多くのPython系botterは、ccxt + websocket-clientでbotを開発しているとかと思われます。
REST APIの認証はccxtが担ってくれるもののwebsocket-clientは独自実装しなければいけません。これを実装するにはやはりそれなりにプログラミング知識がないと厳しいかと思います。
それをフレームワークとして織り込んだ、
くもすけさんBFSX2 (requests + websocket-client)
イナトレさんNeoDuelBot (ccxt + websocket-client)
が高性能で人気がありますね。OSSだと
pentaさんbtc_bot_framework (ccxt + websockets)
・まちゅけんのpybybit(requests + websocket-client)
などもあります。
基本的にこれらはthreadingで別スレッドを立ててWebSocket接続をする仕組みになっています。

asyncio/aiohttpがいい感じ
pybottersが最も影響を受けたと言っても過言ではないのは、ニッケルメッキ先生のbitFlyer APIラッパークラスです。

このnoteは本当に参考になりました。
asyncioをここで初めて知り調べてみるとどうやら別スレッドを立てるより非同期処理の方がより効率的に処理できるらしいのです。しかもaiohttpライブラリならこれ1つでHTTPとWebSocketが利用できます。
ドースーさんもnoteでaiohttpラッパークラスを公開されてますね。

それ以降asyncio/aiohttpを勉強し始めてbot開発に本格的に利用し始めました。aiohttpライブラリの仕様は大体把握してそれを応用できるレベルになり、また本業でGitHubでの開発スキルが身についたこともあって、より汎用性が高い複数取引所対応のライブラリを開発すべくpybottersのプロジェクトを始めた次第です。

おわり

pybottersのベータリリースノートと今回話したかったことは以上です。
Twitterフォロー・Discord参加・noteサポートして頂けると励みになります🙇‍♂️🙇‍♂️



いいなと思ったら応援しよう!