見出し画像

信じた私がバカでした 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で株価をダウンロードする際はご注意ください。

この記事が気に入ったらサポートをしてみませんか?