LoginSignup
0

posted at

updated at

【v38】マージしたチャートデータからテクニカル指標を計算する(パラボリック編)

はじめに

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

チャート表示をいろいろ選んでみて、パラボリックがいい感じなので、計算してみたが、なかなか大変だった。

仕様

とにかく仕様があいまいで、『EPとはイクストリーム・ポイントといって買い持ちしている間の高値、売り持ちしている間の安値をいいます。』を解釈した。
他の証券会社では『EP(極大値)については、上げ相場なら一定期間内の高値、下げ相場なら安値を用いる。』と説明しているが、この一定期間って何本分なんだよ。。。
さらに他のサイト『EP(極大値):SARが買いシグナルを示している期間は、その期間の最高値。SARが売りシグナルを示している期間は、その期間の最安値。』。

どうやら、一定期間=買いor売りと見なしてよいようだ。

実装

実際にチャートで表示してみて、
下の例では10:45にベアからブルに転換されたので、SARの差=25625.80-25615.00=10.8から、AF=0.02として10.8/0.02=540から、EP=25615+540=26155から、10:45の高値26155を使って11:45のSARを計算したのだろう。。。

2022/10/03 10:45:00	26025	26155	26015	26095	7113	25615.00
2022/10/03 11:45:00	26095	26130	26055	26080	3075	25625.80

かなり手作業で調べて、結果が一致したぽいソースが以下のソースで、一度消したら、元通りに作り直せる自信はない。。。

	private void calcParabolic(List<MergeChartInfo_r10> chartList) {
		if (chartList.size() < 1) {
			return;
		}
		MergeChartInfo_r10 ci = chartList.get(0);
		double sar = ci.openPrice;
		boolean bBull = true;
		int ep = ci.openPrice;
		int eph = ep;
		int epl = ep;
		int af = 0;
		indicatorList.add(new CalcIndicatorInfo_r10(ci, sar, bBull ? 1 : -1, ep, af));
		for (int i = 1; i < chartList.size(); i++) {
			MergeChartInfo_r10 ci0 = chartList.get(i - 1);
			MergeChartInfo_r10 ci1 = chartList.get(i);
			int high0 = ci0.highPrice;
			int low0 = ci0.lowPrice;
			int high1 = ci1.highPrice;
			int low1 = ci1.lowPrice;
			if (low0 < epl) {
				epl = low0;
			}
			if (eph < high0) {
				eph = high0;
			}
			if (bBull) {
				if (ep < high0) {
					ep = high0;
					af += 2;
				}
			} else {
				if (low0 < ep) {
					ep = low0;
					af += 2;
				}
			}
			if (af <= 0) {
				af = 2;
			} else if (af > 20) {
				af = 20;
			}
			sar = (ep - sar) * af / 100 + sar;
			if (bBull) {
				if (low1 < sar) {
					sar = ep;
					ep = eph;
					eph = epl;
					epl = eph;
					af = 0;
					bBull = !bBull;
				}
			} else {
				if (sar < high1) {
					sar = ep;
					ep = epl;
					epl = eph;
					eph = epl;
					af = 0;
					bBull = !bBull;
				}
			}
			indicatorList.add(new CalcIndicatorInfo_r10(ci1, sar, bBull ? 1 : -1, ep, af));
		}
	}

組み込み

クラスをv38.c.CalcIndicator7_r10を作成し、ファクトリー設定ファイル(CalcIndicatorFactory_r10.properties)に追加する。

7=v38.c.CalcIndicator7_r10

テスト

画面に表示した値を手入力したもの(日時、始値、高値、安値、終値、売買高、SAR値)。

chart_20221004

2022/09/30 08:45:00	26215	26265	26055	26075	8568	26276.31
2022/09/30 09:45:00	26070	26105	25980	26020	5749	26261.54
2022/09/30 10:45:00	26025	26085	25925	25960	4821	26239.01
2022/09/30 11:45:00	25955	25990	25925	25945	3177	26207.61
2022/09/30 12:45:00	25940	25945	25800	25855	5605	26179.35
2022/09/30 13:45:00	25850	25910	25805	25880	5231	26133.83
2022/09/30 14:45:00	25875	26010	25845	26010	4632	26093.77
2022/09/30 16:30:00	26150	26150	26095	26120	2692	25800.00	BULL
2022/09/30 17:30:00	26125	26170	26075	26100	2218	25807.00
2022/09/30 18:30:00	26095	26130	26070	26105	1803	25821.52
2022/09/30 19:30:00	26105	26115	25995	26050	1857	25835.46
2022/09/30 20:30:00	26050	26100	25975	26080	2081	25848.84
2022/09/30 21:30:00	26075	26080	25955	26010	3340	25861.69
2022/09/30 22:30:00	26015	26115	25970	26095	3995	25874.02
2022/09/30 23:30:00	26090	26250	26085	26210	2960	25885.86
2022/10/01 00:30:00	26210	26230	26055	26085	1876	25907.71
2022/10/01 01:30:00	26085	26125	26055	26095	1213	25928.24
2022/10/01 02:30:00	26095	26095	25990	26000	1371	25947.55
2022/10/01 03:30:00	26005	26025	25920	25980	1415	26250.00	BEAR
2022/10/01 04:30:00	25985	25995	25905	25920	1494	26243.40
2022/10/01 05:30:00	25920	25920	25870	25875	 343	26229.88
2022/10/03 08:45:00	25850	25850	25615	25660	11733	26208.27
2022/10/03 09:45:00	25660	26040	25615	26025	9348	26160.81
2022/10/03 10:45:00	26025	26155	26015	26095	7113	25615.00	BULL
2022/10/03 11:45:00	26095	26130	26055	26080	3075	25625.80
2022/10/03 12:45:00	26085	26115	26015	26085	3203	25636.38
2022/10/03 13:45:00	26085	26125	26045	26125	2581	25646.76
2022/10/03 14:45:00	26125	26255	26125	26235	3841	25656.92
2022/10/03 16:30:00	26190	26205	26080	26115	2096	25680.84
2022/10/03 17:30:00	26115	26210	26105	26200	1908	25703.81
2022/10/03 18:30:00	26205	26225	26175	26215	1323	25725.86
2022/10/03 19:30:00	26215	26275	26190	26265	1252	25747.02
2022/10/03 20:30:00	26265	26365	26265	26365	1690	25778.70
2022/10/03 21:30:00	26365	26445	26350	26410	2066	25825.61
2022/10/03 22:30:00	26410	26550	26335	26510	4157	25887.55
2022/10/03 23:30:00	26515	26575	26510	26545	1905	25967.04
2022/10/04 00:30:00	26550	26595	26505	26565	1456	26052.15
2022/10/04 01:30:00	26565	26630	26550	26605	1073	26139.01
2022/10/04 02:30:00	26610	26675	26600	26670	 796	26227.39
2022/10/04 03:30:00	26665	26715	26645	26675	 694	26316.91
2022/10/04 04:30:00	26670	26680	26595	26620	1142	26396.53
2022/10/04 05:30:00	26620	26625	26610	26610	 124	26460.22

ツールが出力したもの(日時、終値、フラグ、SAR値、LorS、EP値、AF値)。

2022/09/30 08:45:00,26075,1,26276.31,S,26030.00,0.06
2022/09/30 09:45:00,26020,1,26261.54,S,26030.00,0.06
2022/09/30 10:45:00,25960,1,26239.01,S,25980.00,0.08
2022/09/30 11:45:00,25945,1,26207.61,S,25925.00,0.10
2022/09/30 12:45:00,25855,1,26179.35,S,25925.00,0.10
2022/09/30 13:45:00,25880,1,26133.83,S,25800.00,0.12
2022/09/30 14:45:00,26010,1,26093.77,S,25800.00,0.12
2022/09/30 16:30:00,26120,1,25800.00,L,25800.00,0.00
2022/09/30 17:30:00,26100,1,25807.00,L,26150.00,0.02
2022/09/30 18:30:00,26105,1,25821.52,L,26170.00,0.04
2022/09/30 19:30:00,26050,1,25835.46,L,26170.00,0.04
2022/09/30 20:30:00,26080,1,25848.84,L,26170.00,0.04
2022/09/30 21:30:00,26010,1,25861.69,L,26170.00,0.04
2022/09/30 22:30:00,26095,1,25874.02,L,26170.00,0.04
2022/09/30 23:30:00,26210,1,25885.86,L,26170.00,0.04
2022/10/01 00:30:00,26085,1,25907.71,L,26250.00,0.06
2022/10/01 01:30:00,26095,1,25928.24,L,26250.00,0.06
2022/10/01 02:30:00,26000,1,25947.55,L,26250.00,0.06
2022/10/01 03:30:00,25980,1,26250.00,S,26480.00,0.00
2022/10/01 04:30:00,25920,1,26243.40,S,25920.00,0.02
2022/10/01 05:30:00,25875,1,26229.86,S,25905.00,0.04
2022/10/03 08:45:00,25660,1,26208.27,S,25870.00,0.06
2022/10/03 09:45:00,26025,1,26160.81,S,25615.00,0.08
2022/10/03 10:45:00,26095,1,25615.00,L,25615.00,0.00
2022/10/03 11:45:00,26080,1,25625.80,L,26155.00,0.02
2022/10/03 12:45:00,26085,1,25636.38,L,26155.00,0.02
2022/10/03 13:45:00,26125,1,25646.76,L,26155.00,0.02
2022/10/03 14:45:00,26235,1,25656.92,L,26155.00,0.02
2022/10/03 16:30:00,26115,1,25680.84,L,26255.00,0.04
2022/10/03 17:30:00,26200,1,25703.81,L,26255.00,0.04
2022/10/03 18:30:00,26215,1,25725.86,L,26255.00,0.04
2022/10/03 19:30:00,26265,1,25747.02,L,26255.00,0.04
2022/10/03 20:30:00,26365,1,25778.70,L,26275.00,0.06
2022/10/03 21:30:00,26410,1,25825.61,L,26365.00,0.08
2022/10/03 22:30:00,26510,1,25887.55,L,26445.00,0.10
2022/10/03 23:30:00,26545,1,25967.04,L,26550.00,0.12
2022/10/04 00:30:00,26565,1,26052.15,L,26575.00,0.14
2022/10/04 01:30:00,26605,1,26139.01,L,26595.00,0.16
2022/10/04 02:30:00,26670,1,26227.39,L,26630.00,0.18
2022/10/04 03:30:00,26675,1,26316.91,L,26675.00,0.20
2022/10/04 04:30:00,26620,1,26396.53,L,26715.00,0.20
2022/10/04 05:30:00,26610,1,26460.22,L,26715.00,0.20

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