Skip to content
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

FTXDataStore の orders チャネルにおける close されたオーダーの取り扱いについて #75

Closed
kaznak opened this issue Jul 18, 2021 · 7 comments

Comments

@kaznak
Copy link
Contributor

kaznak commented Jul 18, 2021

FTXDataStore を使用して WebSocket API を利用した BOT を作成しています。
そのなかで IOC オーダーを post した後、その執行状況(どの程度fillされたかなど)を確認してから次のループを実行したいと思っています。

このとき store.orders を利用して執行状況を確認できればよいのですが、現状の実装では close されたオーダーは store.orders から削除される実装になっています
一方で IOC オーダーは直ちに close されるため、 store.orders からは取得できず、やむなく都度 REST API を発行して対応しています。

一応実装はできているのですがレートリミットもこわいので、 store.orders から close されたオーダーも取得できるようにはならないでしょうか。よろしくお願いします。

@kaznak kaznak changed the title IOC オーダー FTXDataStore の orders チャネルにおける IOC オーダーの取り扱いについて Jul 18, 2021
@kaznak kaznak changed the title FTXDataStore の orders チャネルにおける IOC オーダーの取り扱いについて FTXDataStore の orders チャネルにおける close されたオーダーの取り扱いについて Jul 18, 2021
@MtkN1
Copy link
Member

MtkN1 commented Jul 19, 2021

イシュー報告ありがとうございます。
FTXに関わらずcloseされたオーダーはストアから削除する仕様にしていますが、仰るようなIOCや他に即時キャンセルされたPostOnlyオーダーはストアに情報が全く残らないことは少なからず問題があると考えていました。
そのようなオーダー情報もストアから取得できるよう検討します。

@MtkN1
Copy link
Member

MtkN1 commented Jul 19, 2021

アイディア

  • ① onmessage時削除されないようにする
    • ユーザーが手動でclose済みオーダーを削除するメソッドが必要
  • ② onmessageはそのままでストアにデータキューみたいなものを持たせる
    • アクティブオーダーのみ管理できるメリットはそのままに執行状況などより高度な実装が可能になるかもしれない

@kaznak
Copy link
Contributor Author

kaznak commented Jul 20, 2021

的はずれな issue ではなくて良かったです。

①はシンプルですね。僕自身はとりあえずこれが挙動を理解しやすくてよい気がしています。

削除のメソッドの実装としては、 store.get/store.find の亜種として、マッチしたレコードを返し、ストアからはレコードを削除するようなメソッドを用意するのが良いように思います。今の _delete の実装も get とほとんど同じなので、 find でも作れそうですし、他のチャネルのデータにも使えそうです。
試しに削除メソッドを実装してみました。

②はどのようなものですか?ストアに新たにキューを追加して、 closed なオーダーがそちらに移される実装でしょうか。
orderbook の sorted メソッドの挙動が何となく似ていそうですね。

@MtkN1
Copy link
Member

MtkN1 commented Jul 22, 2021

プルリクありがとうございます! 確認しますので少々お待ちください。

②のアイディアは、もう少し考えた結果 store.order.wait メソッドを拡張する案です。
現状waitメソッドは次のメッセージがあるまで待機するメソッドですが戻り値はありません。
この戻り値として次に受信するメッセージが取得(キューイング)できれば、オーダーストアでは残らないデータを取得できるので即時キャンセルされたのか約定されたのか執行状況を確認することが可能かと思います。

@kaznak
Copy link
Contributor Author

kaznak commented Jul 22, 2021

②のアイディアは、もう少し考えた結果 store.order.wait メソッドを拡張する案です。

それは良いアイディアですね。実際のところ約定状況はほとんどの場合で一度だけしか必要でないので、僕のユースケースではそれで十分です。また、他のケースでも一度だけしかデータが必要ないケースは、まあまある印象があります。
あとは find などと同じようにクエリが使用できて、かつ他のデータでも wait で新着のデータが取れれば、互換性を保ったままコードの結構な部分ががシンプルになりそうです。

僕の実装は get/_delete と find の拡張で、①のケースの削除の実装です。よろしくお願いします。

@kaznak
Copy link
Contributor Author

kaznak commented Jul 22, 2021

自分の理解している範囲で②のアイディアを簡単に実装してみました。いかがでしょうか。

MtkN1 added a commit that referenced this issue Aug 15, 2021
MtkN1 added a commit that referenced this issue Aug 15, 2021
@MtkN1
Copy link
Member

MtkN1 commented Aug 15, 2021

コントリビュートありがとうございました!
マージしましたので本Issueはクローズします。

@MtkN1 MtkN1 closed this as completed Aug 15, 2021
MtkN1 added a commit that referenced this issue Aug 15, 2021
✨v0.6.0リリース

## Issues
✅ 対応取引所の追加(Phemex、Coincheck) #52
✅ GMO コインの DataStore を実装する #60
✅ リリース表記をPreview版にする #73
✅ FTXDataStore の orders チャネルにおける close されたオーダーの取り扱いについて #75
✅ DataStoreInterfaceのクラス名を変更する #79
## Pull requests
✅ GMO コイン用の DataStore を一部実装する #74
✅ DataStore のレコード削除メソッドのサンプル実装 #76
✅ DataStore の wait メソッドが変更されたデータを返す実装 #77
✅ Sphinxのドキュメントを追加 #78
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants