仮想通貨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が取引所ごとにことなるが, この差分を吸収するライブラリ.

cf. 🔧ko0hi/pybotters-wrapper

🔧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はシングルスレッドなので杞憂だよとのこと.

並行プログラミングのTips

pybotttersだけだと, 情報の受信まではできるがその先の並行プログラミングがどうやればいいのか混乱する.

ペ(Pe)さんがサンプルをたくさん書いている. 並行プログラミングのテクニックが学べる.

Example · MtkN1/pybotters Wiki · GitHub

🔧ko0hi/pybotters-wrapper

ペ(Pe)さんによるpybottersのwrapper.

References

黒枝さんの記事も参考に.


Topics

🆚One-Way Mode vs Hedge Mode(Long/Short)

One-Way Modeは片方向しかポジションをもつことができないが, Hedge Mode(Two-Way Mode)はロングとショートの両方のポジションを持つことができる. すると, トレーダーは長期ボジションを保持しつつ, 短期的な値動きに対して売買できる.


同じ目的のために, 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