-
-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bybitの型問題の抜本的な解決方法について #82
Comments
追記検討BybitのAPIドキュメントのFAQに色々少し書いてあった。 https://bybit-exchange.github.io/docs/inverse/#t-faq_float_precision
Bybitの開発側がうまく設計できてなくて、この問題の為か文字列の数値で送っている模様。 実装暫定でfloat, int変換するBybitDataStoreを実装した。 Dicimalではなくてfloat, intで実装した。 |
課題
Bybitのレスポンスデータは、REST・WebSocket・エンドポイント・契約取引、によって異なる型のデータが配信される。
例: RESTはfloatたが、WebSocketはstrなど
こちらのPR #81 (comment) でまとめて頂いたコメントにてそれが顕著にみられる。
pybottersは各データをデータストアといったモデルにしデータを格納しているが、これを解決するのに全てのデータモデルに対して型の一致を図るのはかなりの作業量を要するし、Bybit APIが変更が多いのでそれに追従することも難しい。
そこで何か現実的で抜本的な解決方法を検討する。
これを解決することによって、ユーザー側の型に関する変換作業などの負担を軽減することができる。
解決策
フィールド名単位で変換を掛けるフィールド名単位で変換を定義する。
例としては「このデータのこのフィールド」に変換を定義するのではなく、「このフィールド名だったら」変換を掛けるように定義する。
"price"や"size"などのフィールド名は法則上数値であるはずなので、元がintであろうかfloatであろうがstrでもDecimal型に変換すればよい。
メリットとしてはデータモデル(エンドポイント)関係なしにフィールド名で変換をかけるので、定義の数がするなくなるし新しエンドポイントにも対応し易い。
デメリットとしては法則に則っていないフィールドがあった場合、対応ができない。
無粋に変換を掛ける上記案は定義作業は少ないにしても、デメリットの点について結局は全てのデータモデルの型を確認して作業しなければならない。
それならば最初から無粋に全てのデータモデルに対して変換型を定義してあげた方がいいかもしれない。
✅ 自動で変換する
str型のフィールドには
int()
を試みて、ValueErrorだったらfloat()
を試みる。処理負荷が上がるのでインスタンス生成時の引数でこの機能を有効にできるようにする(デフォルトは無効)。
チェックリスト
The text was updated successfully, but these errors were encountered: