はじめに
過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。
47番目の記事でイベントトリガーを作成した際に、x分足とテクニカル指標の組み合わせを2重ループで実行し、それぞれをユニークなファイル名で保存していた。ファイル数が最大8×8=64個ほど出力されると、チェックするのが面倒なので、銘柄ごとに統合して1つのファイルに保存する。
ゴール
v45でリアルタイム監視ツールを最新のマージツールに対応しているので、まず1銘柄のみ、テクニカル指標のみに対応する(Tickデータは未対応)。
後から、バッチ処理の各ツールを対応する。その際にv45にコピーする。
実装
execute()のファイルポーリングしている処理の末尾に追加する。
起動時にファイル削除しているため、eventSetが空の状態と整合が取れている。
eventListはループごとに追記する行の差分のため、毎回クリアする。
while (true) {
eventList.clear();
List<String> lines = pollingCsvChartData();
// RestClientUtil.postChartData(name, lines);
copyObj.copyCsvChartData(lines);
// copyObj.writeChartList();
List<String> chartList = copyObj.getChartList();
triggerObj.execute(chartList);
// ----- triggerObjの統合は後回し
for (String key : BarNameFactory_r10.getBarNames()) {
MergeChartData_r17 merge = mergeMap.get(key);
merge.mergeCsvChartData(lines);
// merge.writeChartMap();
Map<String, MergeChartInfo_r10> chartMap = merge.getChartMap();
CalcCoordinator_r10 calc = calcMap.get(key);
calc.execute(chartMap);
TriggerCoordinator_r11 trigger = triggerMap.get(key);
trigger.execute(chartMap, calc);
// ----- ここから追加
Map<String, EventInfo_r11> map = trigger.getEventMap();
for (String key2 : map.keySet()) {
if (!eventSet.contains(key2)) {
eventSet.add(key2);
EventInfo_r11 ei = map.get(key2);
eventList.add(ei);
}
}
}
writeEventList(eventList);
}
writeEventList()で差分を追記したいため、eventSetでキーの重複チェックを行う。
キーはEventInfoで"167110019_F202211_20221021_222000_10m_1_GC"のような文字列を生成し、このキーをソートキーとしてComparableを実装する。
MainWatchChartData_r17->TriggerCoordinator_r11->TriggerIndicator_r11(TriggerIndicatorCommon_r11)と順番に呼ばれるので、2層目、3層目にMap eventMapを持って、重複チェックしながら、メモリ上に蓄えて、呼び出し元から参照できるようにする。
実行結果
10個のファイルに分かれていたTriggerIndicatorXm_Y.outが、1つのTriggerSummary.outファイルに統合される。
167110019_F202211_20221021_164500_15m_2_BUY 2022/10/28 14:40:17.656 167110019_F202211 15m 2 2022/10/21 16:45:00 BUY Close < BB-2 (26915 26870.34)->(26850 26860.73)
167110019_F202211_20221021_215000_20m_2_SEL 2022/10/28 14:40:17.742 167110019_F202211 20m 2 2022/10/21 21:50:00 SEL Close > BB+2 (26825 26945.43)->(26985 26957.82)
167110019_F202211_20221021_220000_10m_2_SEL 2022/10/28 14:40:17.575 167110019_F202211 10m 2 2022/10/21 22:00:00 SEL Close > BB+2 (26855 26892.04)->(26985 26922.92)
167110019_F202211_20221021_220000_15m_2_SEL 2022/10/28 14:40:17.656 167110019_F202211 15m 2 2022/10/21 22:00:00 SEL Close > BB+2 (26855 26909.08)->(26930 26918.53)
167110019_F202211_20221021_222000_10m_1_GC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/21 22:20:00 GC SMA5 > SMA75 (26883.00 26889.87)->(26906.00 26890.33)
167110019_F202211_20221021_223000_20m_2_SEL 2022/10/28 14:40:17.743 167110019_F202211 20m 2 2022/10/21 22:30:00 SEL Close > BB+2 (26940 26960.78)->(26990 26973.36)
167110019_F202211_20221021_223000_30m_2_SEL 2022/10/28 14:40:17.792 167110019_F202211 30m 2 2022/10/21 22:30:00 SEL Close > BB+2 (26940 26981.21)->(27085 27011.19)
167110019_F202211_20221021_224000_10m_2_SEL 2022/10/28 14:40:17.575 167110019_F202211 10m 2 2022/10/21 22:40:00 SEL Close > BB+2 (26945 26952.04)->(26990 26969.94)
167110019_F202211_20221021_231000_10m_1_GC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/21 23:10:00 GC SMA25 > SMA75 (26890.60 26896.53)->(26900.00 26898.13)
167110019_F202211_20221022_002000_10m_1_DC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/22 00:20:00 DC SMA5 < SMA25 (26927.00 26922.40)->(26914.00 26923.00)
167110019_F202211_20221022_004000_10m_1_DC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/22 00:40:00 DC SMA5 < SMA75 (26899.00 26898.47)->(26898.00 26898.27)
167110019_F202211_20221022_005000_10m_1_GC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/22 00:50:00 GC SMA5 > SMA75 (26898.00 26898.27)->(26901.00 26897.87)
167110019_F202211_20221022_011500_5m_1_GC 2022/10/28 14:40:17.505 167110019_F202211 5m 1 2022/10/22 01:15:00 GC SMA5 > SMA25 (26936.00 26944.00)->(26951.00 26938.40)
167110019_F202211_20221022_014000_10m_1_GC 2022/10/28 14:40:17.574 167110019_F202211 10m 1 2022/10/22 01:40:00 GC SMA5 > SMA25 (26943.00 26945.20)->(26958.00 26951.80)
167110019_F202211_20221022_023000_30m_2_SEL 2022/10/28 14:40:17.792 167110019_F202211 30m 2 2022/10/22 02:30:00 SEL Close > BB+2 (27005 27029.90)->(27080 27053.91)
167110019_F202211_20221022_024500_5m_2_SEL 2022/10/28 14:40:17.506 167110019_F202211 5m 2 2022/10/22 02:45:00 SEL Close > BB+2 (27030 27039.86)->(27055 27050.37)
167110019_F202211_20221022_034200_3m_1_DC 2022/10/28 14:40:17.444 167110019_F202211 3m 1 2022/10/22 03:42:00 DC SMA5 < SMA25 (27057.00 27056.60)->(27050.00 27057.60)
167110019_F202211_20221022_035500_5m_1_DC 2022/10/28 14:40:17.505 167110019_F202211 5m 1 2022/10/22 03:55:00 DC SMA5 < SMA25 (27040.00 27033.20)->(27033.00 27034.80)
167110019_F202211_20221022_041500_5m_1_GC 2022/10/28 14:40:17.506 167110019_F202211 5m 1 2022/10/22 04:15:00 GC SMA5 > SMA25 (27037.00 27041.80)->(27049.00 27045.80)
167110019_F202211_20221022_041800_3m_1_GC 2022/10/28 14:40:17.444 167110019_F202211 3m 1 2022/10/22 04:18:00 GC SMA5 > SMA25 (27046.00 27051.80)->(27053.00 27051.00)
167110019_F202211_20221022_042700_3m_2_SEL 2022/10/28 14:40:17.445 167110019_F202211 3m 2 2022/10/22 04:27:00 SEL Close > BB+2 (27080 27086.90)->(27095 27090.59)
167110019_F202211_20221022_050400_1m_2_SEL 2022/10/28 14:40:17.370 167110019_F202211 1m 2 2022/10/22 05:04:00 SEL Close > BB+2 (27110 27116.21)->(27125 27120.06)
167110019_F202211_20221022_052700_1m_2_SEL 2022/10/28 14:40:17.370 167110019_F202211 1m 2 2022/10/22 05:27:00 SEL Close > BB+2 (27135 27139.08)->(27145 27141.87)
167110019_F202211_20221022_054800_1m_2_SEL 2022/10/28 14:40:17.370 167110019_F202211 1m 2 2022/10/22 05:48:00 SEL Close > BB+2 (27145 27148.76)->(27150 27149.16)
バッチツール対応のためのメモ
バッチツールは毎回起動され、メモリがクリアされるので、同じように対応すると、毎回全イベントを検知して(2カラム目が毎回更新される)、ファイルをまるごと上書きすることになる。その場合、古いチャートデータは消しているので、サイズが増えることはない。
最初にファイルを読み込んで、idのユニークチェックを入れれば、前回からの差分で追記できるかもしれないが、どこかでファイル削除するタイミングがないと、永遠に追記されていく(リアルタイム監視ツールは、朝一に起動するときに、クリアされる)。
ただし、マージ時点から、ファイルまるごとを処理しているので、そこから差分計算を入れないと、バッチツールで全銘柄(最大50)はCPU負荷がかかりすぎて、頻繁に実行できない。
追記:Tickデータイベントを統合したTriggerSummary.outを出力
テクニカル指標のイベントに、Tickデータイベントを統合したTriggerSummary.outを出力する。
追記:4本値の日付調整ツールが週足、月足に対応
日足と同様に日付は調整しないが、週足、月足をDBに登録する。
githubソース