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

【配布】分足株価/為替データベース作成 Ver2~MarketSpeed2 RSS x Excelで分足データベースを全自動作成~

    こんにちはRcatです。
    本作の大型アップデートに伴い、Ver2として仕切り直します。
    また、最近頻繁にこれ系の記事を出しているので、いったん整理を兼ねて記事にします。

    まずこの記事をはじめに見た方向けに簡潔に説明すると、分足の株価をCSVファイル、またはMySQLにデータベースとして保存します。
    本作を使うことで、1分足,2分足,3分足,4分足,5分足,10分足,15分足,30分足,60分足、2時間足,4時間足,8時間足, (日,週,月) のチャートを入手することができます。


    はじめに

    利用規約

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

    コメントについて

    利用規約のガイドラインを確認の上コメントしてください


    シリーズ整理

    まずは本シリーズの整理です。
    本記事を読む前に前提もあるので要チェックです。

    Ver3作成しました

    DBスキーマを再構成したVer3を作成しました。
    データの管理や分析、可視化など取得後の機能や拡張性が魅力です。
    ぜひご確認下さい。

    初回 & Ver2未満のアップデート情報

    まずは初回の記事です。
    そもそもどうやって分足を取得するのかといった前提情報はこちらで解説しています。
    前提なので、まずこちらをお読みください。

    データベース化UPDATE & 株式分割対応

    こちらでは、もともとCSVだけだった本ツールをMySQLのデータベースへ仮対応させました。
    また、それを用いて急激な価格変動が株式分割なのか自動で判別して、データを訂正する機能を作りました。
    自分で持っているデータには分割などは反映されないため、急落したようなデータになってしまうためです。
    なお、ここで紹介している内容はすべて本Ver2には織り込み済みなので、Ver2から入る場合は見なくていいです。
    もちろん仕組みの解説もあるので気になる方は見てもOKです。

    DB連携クラス

    これは完全にプログラミング的な内容なので、そういうのが気になる方向け。DB化したので、そのデータを扱うためのツールを作ってますという感じ。
    このうち一部の機能はVer2で標準搭載しています。

    本記事

    本記事は、Ver1.xでDBに仮対応させましたが、後から追加前提なので少々扱いづらいし理解しづらい感じになってしまいました。
    そのため、区切りということでVer2とし、最初からDB&CSVの両対応前提で組みなおしました。
    また、株式分割チェッカーや最終取得日チェッカーなどの新機能を搭載しています。


    前提

    初回記事で紹介している楽天証券の用意とアドインのインストールおよびPythonのインストールは済んでいる前提です。

    データベース機能を利用する場合は、下記を参考にMySQLのインストールおよびデータベースの作成が必要です。


    全自動で分足株価をデータベース化!

    ここからは分足株価取得ツールVer2の紹介&使い方説明を行います。

    できること

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

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

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

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

    • MySQL対応
      データベースを使うことで後のデータ検索やメンテナンス性を向上できます。一部SQL限定で追加の機能もあります。

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

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

    • 株式分割検知&自動補正
      分割が行われると手元のデータと繋げた際に急落/急騰したかのようになってしまいます。急騰急落を探索し、分割なのかどうか自動で検索を行い、手元の株価を補正できます。

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

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

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

    ツールの取得と展開

    末尾の配布情報よりダウンロードしてください。
    中身は下記のようになっています。

    画像

    Python環境構築

    データの後処理にPythonを使用しています。
    実行するには事前にPythonのインストールが必要になります。こちらを参考にインストールしてください。

    また、Ver2からは大量に外部ライブラリを使うため環境構築が必要です。
    なお、環境構築は全自動で行いますので、start_db.batをダブルクリックで実行するだけでOK。
    なお、エクセルからの呼び出し時に環境構築することも理論上可能ですが、時間がかかりすぎるため、事前にやっておくことを推奨します。

    ライブラリが多いので、それなりに時間がかかった後黒い画面が消えれば成功した可能性が高いです。

    画像

    構築成功の確認方法
    コマンドプロンプトで以下を実行して画像のようになれば多分成功(すべてのライブラリを読み込むわけではないので、一部失敗していればその時にエラーになる)。
    わからない場合はこの手順はスキップしていいです。

    start_db.bat -m test
    画像

    画面は消えないので閉じればOK

    株価取得ツールの設定

    ここからはExcelの方を開いて使い方を見ていきます。
    ツールを開くとこのような画面になります。
    上から順に設定を見ていきましょう。

    画像
    • 実行設定
      ツールの実行ごとに変更する可能性のある設定です。
      実行ボタンを押す前に必ず確認してください。

      • 処理番号
        登録してある銘柄のうち、何番から処理を開始するかを設定します。
        基本的には1からでいいです。処理中自動的に現在処理している銘柄の番号に更新されます。仮にエラーで落ちたとしても、途中で再開できるようにするための機能です。

      • 足種
        何分足のデータを取得するか設定します。リストから1M-8Hまで選べます。
        "D,W,M"はDB限定の動作となります。DBについてはこの下の項目を参照。

      • コマンドを実行する
        チェックを入れておくと、正常終了時に任意のコマンドを実行できます。
        例えば、"shutdown /s /t 180"と入れれば終了3分後にシャットダウンできますので、寝る前にやるといったことができます。

      • 取得数
        最大何本のチャートを取得するか設定します。
        RSSの仕様上最大は3000ですが、そんなに必要ない場合は少なくしてパフォーマンス向上ができます。

    • システム設定
      ツールの実行に不可欠な設定です。

      • モード
        株価の保存方法を指定します。

        • データベース
          MySQLを導入している場合、データベースに書き込みを行います。
          日足以上の長期スパンデータはこのモードでのみ対応します。
          また、この後紹介するいくつかのオプションツールについてはデータベース限定なのでこちらのモードが推奨です。

        • CSV
          バージョン1から搭載しているCSVファイルとして保存する場合です。
          直感的なデータの扱いやすさを重視しており、データベースとかよくわからないという方でも安心してご利用いただけます。

      • MySQL設定
        データベースモードの場合はログインするための設定をここで行います。CSVモードの場合は空白でOKです。

        • ユーザー

        • パスワード

        • ホスト

    • 銘柄設定
      本ツールを使ってチャート情報を取得したい銘柄を入力します。

      • 証券コード
        取得したい銘柄の証券コードを2個以上入力します。2個未満ではエラーになります。

    • アドオン設定
      アップデートで追加された機能のうち、高度なものは別途アドオンで実装されています。実行には専用キーが必要です。

    ツールを実行する

    設定の入力が終わったら実行します。最初にマーケットスピードと接続します。
    接続中になったことを確認したら、モードを選択して実行ボタンを押します。

    注意:CSVモードの場合、データの認識単位は1日です。場中に中途半端に取得した場合残りのデータを取得できなくなります。時間外で行ってください。

    初めは3銘柄位でまずは試してください

    画像

    ボタンを押すと1、2秒してから動作を開始します。
    他のエクセルを開いたり操作すると誤動作の原因になるのでおやめください。
    どうしても実行中にエクセルを使いたい場合は別プロセスで立ち上げてください。

    動作中は進捗が表示されます
    中断ボタンを押すことでいつでも中断が可能です

    画像
    画像

    全ての銘柄の情報を取得すると完了のメッセージが表示されます。

    画像

    保存されたデータを確認する

    モードによりデータの保存方法が異なります。

    データベースモードの場合

    ・オプションツールを活用する

    データベースモードの場合はオプションツールが利用可能で、書き込みを確認するには期間チェッカーが便利です。
    これはデータベース内の全てのデータを確認し、一番新しいデータが今日に対して何日古いかをチェックします。例えば1分足の場合は5日古いと警告が出ます。

    例えば、日足のデータだと取引がされていない銘柄に関しては3000日とか言うのも出てきてますね。これは明らかにいらないでしょう。

    画像

    書き込んだ直後に古いと警告が出る場合は明らかに書き込みがおかしいです。または上場廃止か。
    なお、最新データチェックに関してはデータを書き込む時にも行っています。データを書き込んだ後に最新のデータの日付を取得し、アップロードしたデータと整合性を確認する処理が入っているので、うまくいかない場合はそこでエラーが出るはずです。

    画像

    あるいはバックアップを使うという手もあります。詳しくはこの後のオプションツールについてをご覧ください。


    msqlを導入している時に、ワークベンチも一緒に導入した場合は、こちらを活用するとデータベースを視覚的に確認することができます。

    SQL構文は以下の通りです。where より、後ろを削除すると足種を区別せず全部出力します。order以降を消すと古い順に表示になるので最新が出てこないかもしれません。

    SELECT * FROM StocksDB.Stock_<証券コード> where kind="<足種>" order by datetime DESC limit 10;

    実行結果は以下のような感じで右下の方に出てきているデータがデータベース内のデータになります。
    ここで最新のデータがきちんと入っていることがわかれば、ちゃんと書き込めているということがわかります。

    画像

    CSVモードの場合

    こちらのモードでは専用のフォルダが作成され、その中に銘柄ごと1日ごとに分解されて保存されます。

    画像
    画像は使い回しなのでファイル名が違います

    この中に各銘柄ごとの名前でフォルダが作成されています。

    画像

    さらにその中に1日ごとのデータがCSV形式で入っています。
    ファイル名先頭には足種を表す文字が入ります。

    画像

    中身はこんな感じです。

    画像

    保存の仕様上、データの認識単位は1日です。
    何が言いたいかと言うと、開場時間中に中途半端に取得した場合でも、その日の分はすでに取得済みという判定になります。

    オプションツールについて

    データベースモード限定でいくつかの追加ツールを搭載しました。
    これらの機能を使うことで、よりデータ管理を楽にします。

    画像

    バックアップ

    全てのデータをCSV形式のデータとしてZIPファイルで落とします。なお、足種や日付で分けるような機能はないので、これを使ってCSVに落として活用することは想定していません。データベースのあるパソコンが壊れた時のバックアップなどを想定しています。
    最大圧縮をかけるのでデータ容量を80%ほど削減することができます。

    期間チェッカー

    全てのデータベースの全ての足種において、最後のデータの日時と本日の差を自動的に計算します。
    特に4分足未満はデータ取得可能時間が短かったり、5分以上は1月以上空いているので逆に忘れてしまったりするので、取得忘れがないように警告を出すことができます。
    ※アドオンの自動実行機能を使うと警告の出る銘柄と足の組み合わせで自動で取得を行います。

    分割チェッカー

    全てのローソク足を確認し、一定以上の急な変動を探します。その変動に対して、AIを使い株式分割や統合なのかをインターネットで検索し、そうであると判断された場合、分割や統合の比率に応じて過去の株価を補正します。
    証券会社は自動的に過去の株価も全部直しますが、それが全て取得できるわけではないので、自分のデータは自分で直さなければいけないためです。

    画像

    なお、この機能は生成AIを活用するため、GeminiのAPIキーが必要です。これは各個人で取得してもらう必要があります。また、モデルについてはAIの進化により変わってきますので、古く使えなくなった場合は更新してください。

    別の内容も大分に含んでますが、以下の記事でAPIキーの取り方について解説している部分があります。

    仕様と実績について

    • 動作実績について

      • 動作確認済み環境
        ツールの格納フォルダやPythonインストールパスにスペースや記号を使わない状態で実行。

        • Windows11

        • Excel2016

        • Python 3.11.6 / 3.10.0

          • インストール先(例)
            "C:\py\python3116\python.exe"

        • OneDrive未使用
          OneDriveが有効なフォルダ内だと動きません。外に出すか止めてください。
          詳細:https://note.com/rcat999/n/n95cf4a31bd27

        • Market SPEED2 Ver4.12.1 - 4.16 (二要素認証アプデ)

        • 最大取得銘柄数
          実質無限(エクセルの行の方が上場企業より多い)
          4410銘柄の連続取得実績あり

    • データの取得はいつすればいいの?
      基本的には取引時間外をお勧めします。そもそも取引時間中は多くの人が接続しており、サーバー負荷的にも控えるべきでしょうです。
      CSVモードの場合は取引中だとデータが途切れます。

    • 長期スパンの足はCSVでは使えないの?
      元々分足を想定して作ったツールのため、1日ごとにデータを分離する仕様です。1日以上の長期スパンには対応できないため、未対応としています。今後の対応もするつもりはありません。

    • Excelと同じフォルダに整理されていないCSVができるんだけど
      中間データの削除に失敗していることがあります。
      そのデータが問題なく後処理されていれば大丈夫ですが、そうでない場合はエラーが発生しています。処理済みデータに入っているか確認してください。

    アップデート

    アップデート情報

    • Ver 2.1.0
      一番最初の銘柄が認識されていない不具合を修正
      場中(9:00-15:30)に実行した場合、一番最後のデータを無視するように変更
      コマンド実行のタイミングを変更
      エラー終了時に閉じなくても再開できるように改善

    • Ver 2.2.0
      為替に仮対応(データチェックツールは未対応)
      "USD/JPY:BID"や"USD/JPY:ASK"という記述をします。
      対応はMarketSpeed RSSのヘルプをご確認ください。
      日足以上がデータベースにアップロードできない問題を修正。

    • Ver 2.3.0
      処理の安定化(主に為替など更新中のデータ取得時の、RSS関数止まらない問題)対策の変更
      データの取得本数を指定できるようにしてパフォーマンスを向上
      DBモードにて差分取得機能を追加※アドオン


    配布情報

    配布URL

    以下のURLより配布しています。
    利用規約に同意の上ご利用ください。

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

    配布情報

    追加の配布キーワードは下記から取得可能です。

    アドオン機能

    • DB差分自動取得アドオン
      期間チェッカーを使い、そろそろ取得した方がいい(RSSの仕様で、例えば1分足は9日前までしかない)と判定された銘柄と足種を対象に取得を行います。
      複数の足を管理している場合、足ごとの設定を変えてもう一周しないといけませんが、本機能を使えばすべての組み合わせで必要箇所だけを1週で取得できます。
      過去に一度でも取得したことのある組み合わせが対象です。


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

    あなたへのおすすめ