LoginSignup
0

posted at

updated at

【v45】各種ツールを先頭カラムのタイムスタンプに対応する

はじめに

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

54番目の記事で、先頭カラムにクライアントのタイムスタンプを追加したので、このファイルにマージツールを対応する。

方針

本来ならば、ChartData.csvの形式が変わるごとに、ChartData_r17.csvのように変えていけばよかったが、過去でも売買高を追加したときにファイル名を変えなかったのは、(おそらく)読み込む方が複数のファイル名に対応する必要があったためと思われる。

売買高を追加した際に、指数には売買高は存在しないため、レコードのカラム数がまちまち(さらにOPはGreeksを追加)のため、判定していた。

			int volume = 0;
			if (cols.length > 2) { // 指数には売買高は存在しない
				volume = (int) StringUtil.parseDouble(cols[2]);
			}

実装

v38.MergeChartDataCommon_r10のソースを改めて見ると、細かいところで手を抜いていたため、最初に修正した。

  • 同じChartData.csvの読み込みを1回にする
  • fix 置換時にprevが代入されていない
  • readCsvChartData()からreadCsvChartLine()を切り出し
  • CSVファイルのコメント行チェック

違いは、カラム1があるかないかなので、判定する。
PUSH APIの日付はハイフン'-'で、こちらはスラッシュ'/'なので、この2文字を判定に使う。

r17データ
2022/10/21 08:45:00.207,2022-10-21 08:45:01,26945.0,21354.0

r10データ
2022-10-21 08:45:01,26945.0,21354.0
			// カラム1にクライアントのタイムスタンプが含まれている場合、データ本体はカラム2以降
			int dateColIdx = 0;
			if (s.length() > 8 && s.charAt(4) == '/' && s.charAt(7) == '/') {
				dateColIdx = 1;
			}

cols[0], cols[1],...とアクセスしているところを、cols[dateColIdx], cols[dateColIdx + 1],...と修正する。

実行結果

2銘柄で、r10ファイルとr17ファイルを用意する。

Warning: REPLACE line=2022-08-09 00:00:00,27855.0,181357.0, new=2022-08-10 00:00:00, prev=2022-08-09 23:59:58
Warning:     NEW line=2022-08-10 00:00:00,27855.0,181357.0

Warning: REPLACE line=2022/10/22 00:00:35.622,2022-10-21 00:00:00,26915.0,403878.0, new=2022-10-22 00:00:00, prev=2022-10-21 23:59:59
Warning:     NEW line=2022/10/22 00:00:35.622,2022-10-22 00:00:00,26915.0,403878.0

追記:MergeChartInfo_r10をv38.beanからbeanに移動

今後、おそらく変わらないので、v38からルート直下のbeanにクラスを移動する。
v45.bean.MergeChartInfo_r17は変更ないため、v45もMergeChartInfo_r10を参照する。

追記:Tickデータのコピーツールも対応

v42.MainCopyTickData_r14をベースに、v45.MainCopyTickData_r17を作成する。
ただし、RESTサーバーへ送信する機能は、PUSH APIを受信した際に送信しているため、あまり意味が無くなったため、無効にする。
このため、v40.MainCopyTickData_r12をベースにしたものに近い。

マージツールでreadCsvChartLine()に分離した部分を反映する。
コピーツールの先に、イベントトリガーがあるが、先頭カラムをトリガーの対象する価値は無いので、このツールの出力形式でクライアントのタイムスタンプを削除する。

追記:リアルタイム監視ツールも対応

v42.MainWatchChartData_r14をベースに、v45.MainWatchChartData_r17を作成する。
コピーツールと同様にRESTサーバーへ送信する機能は意味がないため、無効にする。

v45(r17)未満のクラスは、従来のクラスをそのまま使う。

  • v45.CopyTickData_r17
  • v40.TriggerTickData_r12
  • v45.i.MergeChartData_r17
  • v38.CalcCoordinator_r10
  • v39.TriggerCoordinator_r11

追記:売買ツールも対応

売買ツール(特にトレイル注文)において、前回起動時からの最高値/最低値を検索するため、ChartDataLogic.searchHighLow()を呼び出した際に、ChartData.csvを読み込むが、先頭カラムのタイムスタンプに対応していないため、カラム数が3以外のため無視していた。

ファイル名でgrepして、定数名は統一したが、ファイル入出力をユーティリティメソッドに共通化した方がよい。

追記:各種ツールを統合

単体テストするには個別に分かれていた方がログを読みやすいが、実際はバッチファイルで逐次実行しているため、JVM起動コストが各ツールごとにかかるので、1つのツールにまとめる。

ダウンロードした4本値のツール群を、v45.MainManageChartData_r17にまとめる。
MainChartCalendar_r17はファイル保存するが、その後のツールが毎回ファイルを読みなおすため、initCalendarList()を追加し、prevWorkday()とnextWorkday()のための初期化のみを行う。
Migrate対象の分足の組み合わせをlistTwinTypesForMigrate()から受け取る。
3つのブロックに分かれてループする。

  • カレンダー登録
  • 日足、時間足、月足の登録
  • 整数倍の分足の生成と、統合

イベントトリガーに関するツール群を、v45.MainTriggerSuite_r17にまとめる。
こちらは個別のmain()から呼び出していたexecute()をそのまま並べる。

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