信じた私がバカでした Pythonで株価をダウンロードする際はご注意ください編
Pythonプログラムに一目均衡表を加えようとデバッグしていた時でした
以前の記事で、Neural Network Console向けAIモデル用の学習データおよび評価データを作成するPythonプログラムを公開しました。
上記のPythonプログラムがサポートしているのは、ローソク足データ、SMA, ボリンジャーバンド、MACDです。
このPythonプログラムに一目均衡表を加えようとデバッグしていた時でした。
私は、SBI証券のHYPER SBI 2という株式トレードツールを使用しています。
このHYPER SBI 2にはチャート表示機能があり、一目均衡表もサポートしています。
私がプログラミングした一目均衡表の数値と、HYPER SBI 2で表示させた一目均衡表の数値を比べることで、デバッグを行うことができます。
一目均衡表は、チャート上での表示は複雑ですが、算出方法は単純(一定期間内の最高値と最安値を足して2で割るとか)です。
このため、全ての数値がピッタリ合うと思っていたのですが、なぜか合わないものがありました。
原因はStooqからダウンロードした株価データでした
よくよく調べたところ、ある日の日経平均株価における最高値が、Stooqからダウンロードした株価データとHYPER SBI 2のローソク足データで違っていました。
そんなことあるの!?
冷静に考えて、正しいのはHYPER SBI 2です。
インターネットで調べたところ、Pythonで株価データをダウンロードする方法は2つあり、StooqとYahoo Financeでした。
そこで、Yahoo Financeから日経平均株価をダウンロードして、Stooqのそれと比べてみることにしました。
信じた私がバカでした
StooqとYahoo Financeからダウンロードした日経平均株価を比較したところ、驚くべき事実を発見しました。
それは、どちらも株価データの欠損があるということです。
日数に対する比較
日経平均株価の期間: 1986年1月6日~2024年1月31日
Stooqからダウンロードした株価データの日数: 9414日
Yahoo Financeからダウンロードした株価データの日数: 9355日
Stooqのデータに比べてYahoo Financeのデータは少ないので、Yahoo Financeのデータに欠損があるのは間違いありません。
しかし、詳細を調べたところ、Stooqの株価データにも欠損がありました。
Stooqの株価データにおける欠損日(全10日)
1986-03-26
1986-03-28
1986-05-02
1986-08-22
1986-09-01
1986-09-15
1986-09-23
1987-10-21
1987-12-25
2018-07-16
Yahoo Financeの株価データにおける欠損日(全69日)
1986-09-06
1986-09-27
1986-10-04
1986-10-25
1986-11-01
1986-11-22
1986-11-29
1986-12-06
1986-12-27
1987-01-24
1987-01-31
1987-02-07
1987-02-28
1987-03-07
1987-03-28
1987-04-04
1987-04-25
1987-05-02
1987-05-23
1987-05-30
1987-06-06
1987-06-27
1987-07-04
1987-07-25
1987-08-01
1987-08-22
1987-08-29
1987-09-05
1987-09-26
1987-10-03
1987-10-24
1987-10-31
1987-11-07
1987-11-28
1987-12-05
1987-12-26
1988-01-23
1988-01-30
1988-02-06
1988-02-27
1988-03-05
1988-03-26
1988-04-02
1988-04-23
1988-04-30
1988-05-07
1988-05-28
1988-06-04
1988-06-25
1988-07-02
1988-07-23
1988-07-30
1988-08-06
1988-08-27
1988-09-03
1988-09-24
1988-10-01
1988-10-22
1988-10-29
1988-11-05
1988-11-23
1988-11-26
1988-12-03
1988-12-24
1989-01-28
2009-09-01
2010-07-20
2010-09-15
2020-10-01
続いて、始値、高値、安値、終値に関する差分ですが、これは始値だけでも600日以上ありました。
全て挙げるのは大変なので、直近の差分を以下に記載します。
直近のローソク足データに対する差分
2024-01-31 始値 Stooq: 35759.55, Yahoo: 35747.89 → Yahooが正しい
2022-12-02 安値 Stooq: 27664.07, Yahoo: 27662.12 → Yahooが正しい
2022-11-30 高値 Stooq: 27971.45, Yahoo: 27972.89 → Yahooが正しい
2022-11-30 安値 Stooq: 27804.73, Yahoo: 27802.71 → Yahooが正しい
2022-11-28 始値 Stooq: 28221.96, Yahoo: 28220.56 → Yahooが正しい
2022-11-25 高値 Stooq: 28398.77, Yahoo: 28399.88 → Yahooが正しい
2022-11-24 安値 Stooq: 28373.72, Yahoo: 28363.66 → Yahooが正しい
2022-11-15 高値 Stooq: 28037.44, Yahoo: 28038.63 → Yahooが正しい
2022-11-15 安値 Stooq: 27904.76, Yahoo: 27903.27 → Yahooが正しい
2022-11-11 高値 Stooq: 28325.80, Yahoo: 28329.54 → Yahooが正しい
2022-11-09 高値 Stooq: 27920.49, Yahoo: 27926.52 → Yahooが正しい
2022-11-08 安値 Stooq: 27708.64, Yahoo: 27704.64 → Yahooが正しい
2022-11-07 始値 Stooq: 27373.32, Yahoo: 27406.78 → Yahooが正しい
2022-11-02 始値 Stooq: 27678.92, Yahoo: 27562.30 → Yahooが正しい
株価データの信頼性に対する私なりの対応策
全て調べたわけではありませんが、これまでの結果から、次のようのことが言えると考えます。
Yahoo Financeの株価データは欠損日が多いものの、数値に対する正確性はStooqの株価データよりも高い
このため、私は次のように対応することにしました。
株価データの信頼性に対する私なりの対応策
Yahoo Financeを株価データの基準とする
Stooqからも株価データをダウンロードし、Yahoo Financeの欠損日に対しては、Stooqの株価データをそのまま使用する
完璧な対応とは言えないかもしれませんが、上記が最善の策と考えています。
Pythonで株価をダウンロードする際はご注意ください。
この記事が気に入ったらサポートをしてみませんか?