メインコンテンツへスキップ
見出し画像

分足株価取得ツールVer3 ~DBスキーマの更新と機能強化~

    こんにちはRcatです。
    先日の近況報告で申し上げた通り、ちゃんと勉強した結果株価取得ツールのDBの使い方が誤っていることが判明しました!
    このままでも使えますが、間違っていると気づいたら個人的に耐えられないので、データベースを再構築するアップデートを行いV3とします。

    もちろん、変更するからにはメリットもあります!
    また、今回のアップデートをもって新機能の追加はV3以降のみとします。予めご了承ください。

    メインの紹介はこちら


    はじめに

    利用規約

    情報や作品の活用時は事前に利用規約をご確認ください。

    コメントについて

    利用規約のガイドラインを確認の上コメントしてください。
    則っていないコメントは削除します。


    概要

    本ツールについて

    まず、本記事はアップデート記事となりますので、概要は承知の前提です。まだの方はこちらの初回記事+初回から誘導されるVer2を確認してから戻っていただくとより深く理解できます。

    簡単に言うと、楽天証券の提供するツールを使って、"分足"の株価を取得できますよというツールです。
    初回はCSVファイルだけでしたが、Ver2からデータベースを活用することで管理効率をUPしました。

    そして今回のVer3にて、データベースの部分で大きな改良を施しますといった具合です。
    もちろん、DBなんて使えないよという方向けにCSVも残していたり、DBからCSVダウンロードを行う機能もきちんと設けてますのでご安心ください。

    本ツールで出来ること

    まずは本作で何ができるのか簡単に列挙します

    • 全自動で株価を保存
      入力した銘柄を連続で取得するためボタン一つで実行できます。

    • 分足株価の取得
      ほぼ出回っていない"分足"の貴重なデータを取得することができます

    • CSVで保存
      誰でも扱いやすい、CSV形式で分足を保存できます

    • データベース(MySQL)対応
      データベースを使うことで、後のデータ検索やメンテナンス性を向上できます。例えば株式分割補正はDB限定機能です

    • 為替の取得
      対応している組み合わせの為替も取得できます
      詳しくはMarketSpeed RSSのヘルプをご確認ください。

    • 新規データ自動取得
      前回の取得から一定以上経っているデータを自動で検出して取得します。
      ※アドオン機能

    • 上場廃止検知
      上場廃止を検知し、フラグを変更します。これにより自動取得機能で次回以降銘柄は無視されます。
      また、このフラグで絞り込むことで上場廃止銘柄を調べることもできます。
      ※DB限定

    • 株式分割検知&自動補正
      株式分割が行われると、取得時は補正済みですが、手元のデータは補正されません。つまり急騰や急落に見えるわけですね。
      この急な変動を検出して自動で補正プランを作成します(AI機能有効時)
      手動で実行プランを作成し、一括で補正を掛けることもできます。
      ※DB限定

    • オプションツール搭載
      いくつかのデータの管理ツールが同梱されています
      ※全てDB限定

      • バックアップ
        データベースからすべてのデータをZIPに落とします。約80%圧縮がかかります。

      • 最終データチェック
        最後の足が何日なのかチェックし、取得忘れが無いか確認できます。

      • 一覧表示&CSVダウンロード
        DB内に保持されている銘柄と足の組み合わせをExcel上に表示し、選んだデータをCSVとして手軽に落とせます。
        DBが分からない方でもデータが行方不明になることはありません。

      • チャートの描写
        範囲を指定して手元のデータでチャートを描写可能です


    何がどうおかしいのか

    ここから先のセクションはVer2からどう変えるのかという話です。
    ※難しいと思う方は読み飛ばして構いません。先のアップデート内容へお進みください。

    Ver1はCSVファイルとして分足の株価を取得していましたが、ファイルだと扱いが煩雑になるので、興味本位でDBを使うことを画策し、V1.5で仮対応、V2.0からはDBが前提になったうえでいろんな機能を搭載しました。

    問題はここからです。
    元々証券コードごとのCSVファイルだったので、ファイルがそのままDBのテーブルになっている感じでした。
    さすがに、日付で分かれていたファイルをひとつのテーブルに統合するくらいはしましたが…実はこれが間違いでした。

    画像
    元のイメージ

    本来のDBの使い方ですが、ファイルごとではなく要素毎に管理するというイメージが正解です。
    イメージ的には以下のような感じで、すべてのCSVファイルをひとつにまとめ、重複する情報を別の表に移します。

    画像

    例えば、以下のデータだった場合

    コード,会社名,株価
    1234,XXX(株),100
    1234,XXX(株),101
    1234,XXX(株),102
    5678,ZZZ(株),1000
    5678,ZZZ(株),1010
    5678,ZZZ(株),1010
    1234,XXX(株),103

    こんな感じで、いろんな銘柄を混ぜてひとつの表に入れてしまいます。
    しかし、証券コードが分かれば会社名は決まるので、どっちかは毎回要らない情報で、データ容量の無駄です。
    なので、"コードと会社名"の表と、"コードと株価"の表に分けるといったことをします。
    読み込むときはコードで絞り込めばすぐ取り出せるので、混ざっていてよいのです。

    どう直すの?

    というわけで表の中身とその関係性を表したのがこちらのE-R図です。
    無料エリアなのでいろいろと見せられませんが…。

    画像

    簡単に言えば、まずは銘柄情報表があり、ここを見るとデータベースにある銘柄のコードや名前の一覧が分かります。

    また、ここでIDを管理しているので、他の表では銘柄はIDで管理します。
    ぶっちゃけますと、証券コードで管理すると4桁の文字(最近は100Aみたいなのが出てきた)なので最低4バイト必要ですが、IDにすれば上場企業はそんなに多くないので2バイトで管理できます。・・・という意図もあります。

    何がよくなるの?

    表の関係性が明確になったことで銘柄を跨いで集計ができるようになります。例えばビューを導入できます。
    ビューとは、予め定義した列を持ってきたり、集計を定義したりできるもので、分かりやすいのだとデータ数や日数などの一覧が見られるビューが今回追加されました。

    画像

    分析の方では出来高や株価の統計分析を取ってボラリティなんかも計算予定。
    ただしこっちは重いので実表&ストアドプロシージャにします。

    また、株式分割についても、今までより直感的に再計算が可能になります。


    アップデート内容

    データベース構造の再構成

    データベースとして本来あるべき姿にテーブルの管理方法を変更しました。
    CSVファイルをそのままUPしたような旧構造では、データを跨いだ集計や管理ができませんでしたが、本来あるべき姿になったことで銘柄を跨いだ集計が出来たり、分析を行うことができるようになります。
    また、メンテナンス性が向上します。

    画像

    一覧表示&グラフ作成&CSVダウンロード機能

    データベースがよくわからないという方でも安心してご利用いただくため、格納されているデータの一覧をExcelに表示して、そこからダウンロードできる機能を搭載しました。
    また、その場でグラフを表示する機能も搭載しました!

    画像
    通信系5分足の例

    グラフ表示に関しては追加のツールを別途作成しました。こちらのほうが簡単高速高機能です。ぜひお試しください。

    株式分割検出及び適用精度向上

    今までは、株式分割の検出をデータベース登録後にデータ全体を見ながら急騰急落を検知するやり方でしたが、この方法の場合だと正確な再計算ポイントが導けない可能性が0ではありませんでした。
    特に複数種類の足を違う日に取得している場合は、分割後の価格が適用されるタイミングが変わるため最悪検出されない可能性もあります。
    また、処理中に適用するかどうかも聞かれるので、処理中は離れられませんでした。
    さらに、単純なストップ安なども拾って調査をするため効率がよくありませんでした。

    そこで、今回のアップデートでやり方を変えます。
    やり方を変更することで、検知さえできれば100%の精度で分割情報を適用できます。
    検知できない場合でも、手動でいつ分割が行われたのかを入力すれば、取得日時に関係なく正確に再計算が可能です。

    検知についてですが、新規データを登録する時点で検知を行います。DBの最後のデータと今回の最初のデータで大きなずれがあれば疑うというのは前回と同じ仕組みです。しかし、この境界線だけ計算なので圧倒的に演算量が減ります。
    そして、疑いがある場合はメモを残して処理を続行します。
    つまりは、たぶんこの場所から分割したデータじゃないの?という記録が残ります。
    ログはこんなイメージ

    py DataBase3.py --mode upload --file 9999_Rcat_5M_2.csv
    2025-08-05 23:46:58,722 INFO DataBase3 処理開始: 9999
    2025-08-05 23:47:00,523 INFO DataBase3 9999に2025-02-03以降のデータをUploadします
    2025-08-05 23:47:09,440 INFO DataBase3 9999_Rcat_5M_2.csvから3944件のデータをアップロードしました
    
    >py DataBase3.py --mode upload --file 9999_Rcat_5M_3.csv
    2025-08-05 23:49:19,653 INFO DataBase3 処理開始: 9999
    2025-08-05 23:49:22,179 INFO DataBase3 9999に2025-05-01以降のデータをUploadします
    2025-08-05 23:49:37,517 INFO DataBase3 9999_Rcat_5M_3.csvから3685件のデータをアップロードしました
    2025-08-05 23:49:37,518 WARNING DataBase3 9999: 株式分割の疑いがあります(2796.5 -> 1400.0)

    2までは普通で、3のファイルは株価を半分にしてあるデータです。
    アップロードした瞬間検知されています。

    実際のデータはこちら。ちゃんと境界線で検出しています。

    画像

    この後、今回から新しく追加された情報を用い、後から銘柄を選んで分割の適用を行います。
    さすがにどんな方法かは無料エリアでは伏せておきますのでご了承ください。

    上場廃止の自動検知&無効化

    DB取得モードにおいて、上場廃止=楽天が"存在しない銘柄コードです"を返す場合、自動的に上場廃止のフラグを立てて、次回以降処理をしなくなります。
    ただし、これは自動取得機能を使った場合の話となります。

    自動取得機能とは、一度でも取得したことのある銘柄及び足種に組み合わせに対して、推奨取得間隔に達したものを自動で選別して取得を行う機能です。取得間隔は楽天の仕様に合わせ、毎週行った場合ちょうどよくなる程度にしています。
    特に複数の足種を取得している場合、切り替えやスパンの管理の手間が削減されます。

    画像
    自動実行ボタンで自動取得が実行可能



    アップデートの取得方法

    アップデート版のV3には2つの入手経路を設けます。
    ご自身にあったほうをお選びください。

    V2からアップデートを適用

    2Vをお持ちで、アップデートを適用したい方向け。
    ツール本体は旧V2の配布データの中にV3のツールも同梱という形で提供します。ただし、DB移行ツールやDB登録用のPythonスクリプトは本記事の方からの配布とするので、どちらかだけではV3として使えない構成とします。

    • 特典
      旧バージョンから使っていただいている方はこちらになりますので特典を付けます。

      • データベースの構造解説や新株式分割検知&補正機構の解説

      • 銘柄・足種毎の全体/直近一カ月平均の株価/出来高、偏差と変化率の分析テーブル

    • 開示情報

      • 株式分割検知後の旧データ補正の方法は?
        検知したメモを使いどうやって補正をするのか

      • V2からV3新DBに移行する方法は?
        V2でDBを導入している場合、ほぼコピペで移行可能な用意があります。

      • 新機能の集計に見方は?
        DB移行を行うとデータ数や日数、平均株価や平均出来高、直近一カ月の統計などいくつかの分析がDBで自動で行えるようになります。
        アイディアは募集中なので実現可能なら追加できるかも。

    ダウンロードリンク

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=株価自動分足ダウンロード_Ver3移行用

    V3配布情報

    V3から新規に購入いただく方向け。下記配布情報記事を購入いただくとV3がダウンロードできます。
    ただし上記の特典は付きません。欲しい場合は両方お買い上げいただくか、V2と本記事をお買い上げいただいたうえでファイルセットを整理する必要がありますが、操作が煩雑になるためおすすめしません。

    ダウンロードリンク

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=株価自動分足ダウンロード_Ver3


    使い方

    長くなってしまったので分けます
    Ver3でいろいろ変わりましたので、使い方だけの記事を作成します
    公開まで少しタイムラグがあると思いますが、ご了承ください


    まとめ

    今回は株価取得ツールのバージョン3のアップデートを紹介しました。
    正直、最初はここまでガッチガチに作るつもりじゃなかったんですが、いつの間にかはまっちゃいましてね…バージョン3です。

    今後は、取得したデータを扱ったり、管理していったりすることに重点を置いていきたいので、可視化の部分などやっていければなと思います。

    過去のバージョンも選んで利用いただくことは可能ですが、データ管理の方まで対応させていきたいなら、バージョン3を使うことをお勧めします。

    よくある質問

    マクロが動作しません

    次の状態を確認してください

    • マクロの実行を許可していない
      許可しないと動きません

    • OneDriveが有効なフォルダの中に置いている
      マクロにはOneDriveが影響します。
      止めるか、影響外のフォルダにおいてください。

    • ActiveXの設定が無効になっている
      ボタンやフォームが無効化されて動きません
      トラストセンターで実行するように変更してください

    DBアップロードで躓きます

    • Pythonのバージョンを確認
      3.8~3.11で動かしてください。少なくとも3.14で動かないのは確認済み

    • ライブラリの確認
      環境構築が正常に行われなかった場合は動作しません
      一度venvフォルダを削除し、インターネット接続を確認して再度環境を構築してください。

    リンク集

    本記事と関連しそうな私の記事をいくつかあげておきます。

    Pythonのインストール方法

    Excelを別プロセスで起動する方法


     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ