仮想通貨bot開発APIクライアントまとめ
📝仮想通貨bot開発における, 📝APIクライアント開発の知識をまとめる.
クライアントライブラリによる共通インタフェース
各取引所はAPIがあり, 仮想通貨botはそのAPIを利用して取引をする. それらのAPIは取引所ごとにかなり似ているものの, 微妙に使い方が異なるところに課題がある.
ひとつの解決策は, クライアントライブラリを利用する. これらのライブラリはAPIを直接プログラムからコールするのではなく, クライアント間の差異を吸収してくれるような共通インタフェースを提供する.
ライブラリ抽象化による抽象レベル
ただ, その共通の抽象度にはレベルがある. 💡APIクライアントライブラリのレベルと責務(high level/low level/lightweight)
- 呼び出しのみを抽象するもの(lighteight)
- 呼び出しからドメインまで抽象するもの
呼び出し用語やモードの違い
ライブラリでは細かい指定ができないこともあり, 特殊な制御はAPIドキュメントをみて自分で追加で開発する必要がある.
APIのモード指定には取引所間で似ていたり共通している特殊注文方法なども多く, その知識をここではあつめたい.
取引所別まとめ
クライアントライブラリ
なんかこまったらccxtとpybottersのコードを除くとヒント得られるかも.
🔧ccxt/ccxt
https://docs.ccxt.com/en/latest/manual.html
ccxt-rest
ccxtはresponseが取引所ごとにことなるが, この差分を吸収するライブラリ.
🔧MtkN1/pybotters
複数取引所に対応した非同期I/OのAPIクライアント.
https://github.com/MtkN1/pybotters
まちゅけんさん作成.
- REST通信とwebsocket通信の両方のクライアントを提供.
- 受信したデータを保存して読み出すDBを提供(DataStore).
ccxtと似ているが, ポイントはwebsocketであり, 開発者が外人でないというところが日本コミュニティにおいて大きい.
なにかと評判はいいので使わなくてもテクニックは参考になるかも. websocket周りに実装がかんたんになる.
asyncioについて
いろいろ開発の動機はあるもののasyncioにインスパイヤされたことが大きいとか.
通信技術としては, もちろんasyncio, そしてそれをwrapしたaiohttpが使われている.
まちゅけんさんのasyncio解説のZenn記事.
非同期通信とマルチスレッド
📝非同期通信とは, ノンブロッキングでありある処理が別の処理が動いているときに待たされないこと. 外部との通信で時間がかかるとき非同期処理はとても活躍する.
Pythonはその性質上, 📝マルチスレッドができないことに注意(非同期 != マルチスレッド).
ただ, asyncioがそれをCythonでハックしてマルチスレッドできるようになっているのかは未調査. またはマルチプロセス, 具体的にはPythonのプログラムを複数走らせてしまえばマルチな挙動ができる. ($ python a.py & python b.py 的な).
DataStoreではdictというhashmapのデータ構造にkey-valueでデータが保存されているようで, JavaとかだとConcurrentHashmapが必要なのだが, Stack OverflowによるとPythonはシングルスレッドなので杞憂だよとのこと.
- Python equivalent of concurrentHashMap from Java? - Stack Overflow
- ConcurrentModificationException が Java で発生したときの対処方法 | Futurismo
並行プログラミングのTips
pybotttersだけだと, 情報の受信まではできるがその先の並行プログラミングがどうやればいいのか混乱する.
ペ(Pe)さんがサンプルをたくさん書いている. 並行プログラミングのテクニックが学べる.
Example · MtkN1/pybotters Wiki · GitHub
- pybottersとasyncioでmagito MM!|pe|note
- pybottersとasyncioでinago flyer!|pe|note
- pybottersとasyncioでpenny jump!|pe|note
🔧ko0hi/pybotters-wrapper
ペ(Pe)さんによるpybottersのwrapper.
References
黒枝さんの記事も参考に.
Topics
🆚One-Way Mode vs Hedge Mode(Long/Short)
One-Way Modeは片方向しかポジションをもつことができないが, Hedge Mode(Two-Way Mode)はロングとショートの両方のポジションを持つことができる. すると, トレーダーは長期ボジションを保持しつつ, 短期的な値動きに対して売買できる.
- Bybit Blog | Bybit App: One-Way Mode and Hedge Mode Supported
- What Are The Benefits Of Trading Using Hedge Mode? - Phemex Blog
同じ目的のために, Hedged Modeではなくサブアカウントを利用する方法もある.
✅API制限を回避するには?
同一IPからのたくさんのリクエストはIP制限がかかる. これをどうやって回避するかというIssue.
まずHFTbotの場合はwebsocketをつかうことでREST APIを叩く頻度を減らす.
Proxy サービスを利用するのも一つの手. Proxy サービスはたくさんあるのでどこがいいかはわからない. Proxyレンタルサービスは月額のところが多いが, FaaS的なリクエスト毎の課金もある.
Proxy Manager を利用してCCXT の Too Many Requests を回避した話|くりぷとべあー|note
botを走らせるサーバを複数借りつつ, そこにProxy サーバを自前で構築する手段もある. Proxy サーバ立ち上げはSquidを使えばそこまで難しいものではない. Dockerイメージもあるかな? 以下, 私の過去記事.
GCEで一時的なプロキシサーバを立ち上げ - マシンイメージのコピーでロケーションも選びたい放題! | Futurismo