LoginSignup
0

posted at

updated at

【v45】イベントトリガーの結果を統合してソートして保存する

はじめに

過去記事は「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ソース

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