LoginSignup
0

posted at

updated at

【logic】銘柄コード取得APIのキャッシュ管理

はじめに

過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。

銘柄コード取得API(symbolnameFutureGet,symbolnameOptionGet)は、取得したコードと名称は変わらないため、キャッシュを保存して、後から参照する。

設計

現時点では、PUSH API受信ツールのみが銘柄コード取得APIを使用している。
テストするのに、WebSocket環境を用意する必要があり、モックサーバーでは開発できないので、銘柄コード取得部分を切り出した単体のツールToolSymbolNameを作成する。

キャッシュ管理クラス(SymbolNameLogic)はMapでキャッシュ管理するが、AutoCloseableを実装し、コンストラクタでファイルから読み込み、close()でファイルに保存する。
ファイルロックでの排他制御は行わない。
なお、キャッシュが変化していない場合は、保存しない。

キャッシュのキーは、複合キーを作成する。

  • 先物:futureCode + "_" + derivMonth
  • OP:derivMonth + "" + putOrCall + "" + strikePrice

永続化ファイルは、タブ区切りで、2カラム用意する。
2カラム目のデータは、code + "," + nameでカンマ区切りにする。
(3カラムにしてもよかった)

実装

呼び出し元は、SymbolNameApi.getFuture()を呼び出していたところを、SymbolNameLogic.getFuture()に置き換える。
getFuture()の冒頭で、引数の複合キーをgetFutureKey()で作成する。
OPも同じようにメソッドを作成する。

close()時に保存するかの判断のために、bFutureUpdate=falseで用意し、Map.put()したときにtrueにする。

実行結果

# type_yyyyMM code,name
NK225_202212	167120018,日経平均先物 22/12
NK225_202303	168030018,日経平均先物 23/03
NK225mini_202211	167110019,日経225mini 22/11
NK225mini_202212	167120019,日経225mini 22/12
NK225mini_202301	168010019,日経225mini 23/01
NK225mini_202302	168020019,日経225mini 23/02
# yyyyMM_PorC_price code,name
202211_C_24500	147114518,日経平均オプション 22/11 コール 24500
202211_C_24750	147114718,日経平均オプション 22/11 コール 24750
:
202211_P_24500	137114518,日経平均オプション 22/11 プット 24500
202211_P_24750	137114718,日経平均オプション 22/11 プット 24750
:

追記:銘柄コード取得APIラッパー

InfoApiからInfoApiWrapperに移行する。
SymbolNameApiのenumからStringが無くなるが、ログ出力とスリープがあるので、さらにSymbolNameApiTestを作る。

githubソース

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0