かぶだいくん 注文照会の最適化のメモ

id:unibon:20091120:p2 の続き。
注文照会に数十件単位のページ送りがあり、かつ、注文照会のしかたに、すべての注文一覧と、訂正・取消可能な注文のみの一覧が選べる証券会社で、画面の遷移数を少なくして注文照会するロジックのメモ。


まず注文の状態をつぎの3種類に分類する。

  • 生き系(発注済・訂正済): 今後、状態が勝手に遷移(約定済に遷移)する可能性があり、訂正・取消可能な注文一覧に表示される状態。
  • 途中系(発注中・訂正中・取消中): 今後、状態が勝手に遷移(発注済・訂正済・取消済あるいは約定済に遷移)する可能性があるが、訂正・取消可能な注文一覧には表示されない状態。
  • 確定系(全部約定済・取消済・失効): もう状態が遷移しないことが確定し、訂正・取消可能な注文一覧にも表示されない状態。


注文照会のしかたについて。

  • かぶだいくんなどのツール起動直後は、まっさらなので、すべての注文一覧の全ページをめくって、存在するすべての注文を取得する。
  • その後は、適当な間隔でポーリングをおこない、訂正・取消可能な注文一覧のすべてのページを取得する。
  • 訂正・取消可能な注文一覧を取得後、「ミス」(後述)があるかどうかを調べる。「ミス」があった場合は、それが解消できるまで、すべての注文一覧のページ送りを順次おこなう。「ミス」が解消できたらページ送りの途中で中断して良い。

これを繰り返す。


「ミス」の定義。つぎの2つのいずれかに合致した場合、「ミス」を見つけたことになる。なお「ミス」を解消する過程で、新しく取得し直した注文は、検査の対象から除外して良い。これは、最終的な目的はあくまでも最新の注文状態を取得することであり、「ミス」の解消(あるいは途中系が生き系または確定系に遷移して、ミスが解消されるまで待機すること等)が最終目的ではないからである。

  • 最後にすべての注文一覧で取得して、生き系であったにもかかわらず、最後に取得した訂正・取消可能な注文一覧に存在しない注文があった場合。
  • 最後にすべての注文一覧で取得して、途中系の注文があった場合。

(なお、最後とは直近という意味。)