はじめに
過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。
もともとMACDの後にDMIを計算する予定だったが、計算式がややこしいので後回しにしていた。
前回のクラスの流用
MainCalcIndicator_r4をコピーして、MainCalcIndicator_r5にする。
とりあえず、v27とv28のクラスをimportしてそのまま使えるものはコピーしない。
DMIの計算
+DM, -DM, TRを計算し、14本の平均から+DI, -DI, DXを計算し、さらに9本の平均からADXを計算し、さらに2本の平均からADXRを計算する。
27番目の記事のHVの計算では、double[] ratioに前日比を前処理で計算したが、今回は前処理を複数回計算する必要があるため、IndicatorWork[] workに複数の計算値を保持する。
- +DM, -DM, TRを使ってIndicatorWorkを生成する。その他は-1で初期化。
- +DI, -DI, DXを計算して更新する。
- ADXを計算して更新する。
- ADXRを計算してIndicatorInfoを確定する。
したがって、ADXRまで計算できない時刻の場合は、最終的に出力されない。
検証
4本値
2022/08/10 23:59:00 28015 28015 28005 28005 2
2022/08/11 00:00:00 28015 28020 28015 28020 2
2022/08/11 00:01:00 28025 28035 28020 28035 2
計算値
2022/08/11 00:00:00,28020,2,13.64,22.73,35.69,49.06
2022/08/11 00:01:00,28035,2,25.00,20.83,31.14,50.95
過去の特殊なデータ
05:28:00からhigh, lowに変化がなく、05:29:00以降の+DMと-DMが0となり、05:42:00にて14本の平均を取った+DIと-DIも0となる。
この場合、DX=0/0=0として、ADX, ADXRを計算する。
2022/07/20 05:27:00 27390 27395 27385 27390 1
2022/07/20 05:28:00 27390 27390 27385 27385 1
2022/07/20 05:29:00 27390 27390 27385 27390 1
2022/07/20 05:30:00 27390 27390 27385 27385 1
2022/07/20 05:31:00 27385 27390 27385 27390 1
2022/07/20 05:32:00 27390 27390 27385 27385 1
2022/07/20 05:33:00 27385 27390 27385 27385 1
2022/07/20 05:34:00 27390 27390 27385 27385 1
2022/07/20 05:35:00 27390 27390 27385 27385 1
2022/07/20 05:36:00 27385 27390 27385 27385 1
2022/07/20 05:37:00 27385 27390 27385 27390 1
2022/07/20 05:38:00 27385 27390 27385 27390 1
2022/07/20 05:39:00 27385 27390 27385 27385 1
2022/07/20 05:40:00 27390 27390 27385 27385 1
2022/07/20 05:41:00 27390 27390 27385 27390 1
2022/07/20 05:42:00 27390 27390 27385 27385 1
計算値
2022/07/20 05:42:00,27385,1,0.00,0.00,51.85,35.41
なお、TR=0となるには、high, low, closeがずっと変わらない状態で、実データには存在しなかったが、ソース上で0/0を計算する可能性がある部分は、初期値を0としてb=0以外の場合のみa/bを計算する。
追記:v27.MainCalcIndicator_r3.ChartInfoをv27.CalcIndicatorChartInfo_r3に変更
v28以降でもChartInfoを共通に使用したいため、クラスを独立させる。
追記:v27.MainCalcIndicator_r3.IndicatorInfoをv27.CalcIndicatorIndicatorInfo_r3に変更
v28以降でもChartInfoを共通に使用したいため、クラスを独立させる。
追記:ソースをarchiveブランチへ移動
最新版に移行し、もう使われることはないので、アーカイブする。
githubソース