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

【配布】分足株価をCSVダウンロード! ~MarketSpeed2 RSSで分足データベースを自動作成~

    こんにちはRcatです。
    今回は分足の株価をCSVデータとして保存していきます。
    過去の株価データで出来れば分足が欲しかったのですが、ほぼ出回っていないようで、大抵日足以上のデータばかりがヒットしました。
    あきらめかけたところで、楽天証券が提供しているマーケットスピード2にはエクセル関数を使い、連携する機能が提供されていることが分かりました。

    今回はこれを使用して分足データをCSVでダウンロードする方法と、マクロを使い全自動で落とすためのツールを紹介します。

    このやり方の場合、1分足,2分足,3分足,4分足,5分足,10分足,15分足,30分足,60分足、2時間足,4時間足,8時間足, (日,週,月) のデータを入手可能です。

    Ver3はこちら

    DB対応&高機能に進化しました!

    Ver2はこちら

    次回はこちら。
    データベース化と株式分割の自動検出&再計算です。


    はじめに

    利用規約

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

    コメントについて

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


    概要

    MarketSpeed2とは

    marketspeed2とは楽天証券がPC向けに提供しているトレーディングソフトです。私は取引時間中に自宅にいないのであまり使えていませんが、複数のチャートを自由なレイアウトで表示したりフル板を見られたりと高機能です。
    スマホ版のISPEEDではテクニカル関係は2個しか選べませんが、こちらではもっと選べます。

    Excelにチャート表示や注文ができる!?

    説明は置いておき、今回重要なのはこのツールがExcelのアドインを使って関数で情報の取得や注文まで出来てしまうという点です。
    詳しくは公式のオンラインヘルプをご確認ください。

    つまりはこの機能を使うとチャート情報をExcelに落とせるわけですね。
    後はそれをどう料理するかはユーザーの手腕次第。
    というわけで、この機能を使いチャート情報をローカルに落とすまでのやり方と作成したツールの紹介をします。


    前提と準備

    楽天証券口座の用意

    この機能を利用するにはmarketspeed2にログインする必要があり、ログインするには口座が必要です。
    まだの方はこの記事を見て開設する価値があるか判断しましょう。

    Excelの用意

    アドインやVBA(マクロ)を使うので純正のExcelが必要です。


    marketspeed2 RSSからチャートを取得する

    ここでは前提知識として、marketspeed2 RSSを使用してチャート情報を取得するやり方を紹介します。
    なお、ここから先はmarketspeed2のダウンロードおよびログインは終わって起動している前提です。
    まだの方は楽天証券からDLしてください。

    Excelアドインを登録

    まず、最初に情報にアクセスするための公式アドインをインストールしましょう。

    デスクトップに起動用のアイコンを作っている方は、これを右クリックして、ファイルの場所を開くをクリックしましょう。

    画像

    こんな感じでインストールフォルダが開くので、RSSのフォルダを開きましょう。

    画像

    こんな感じのが中身で入っていればOK

    画像

    次にエクセルを起動します。
    画像で示した手順でアドインのインストールを行ってください。

    画像

    導入後、左上のボタンを押して接続ができれば成功。
    ※マーケットスピードが起動している必要があります。

    画像

    チャート取得関数の使い方

    まず、最初にこのツールの根幹の部分であるチャートの取得方法をご紹介します。

    先ほどを追加したリボンを開き、チャートをクリックしましょう。

    画像

    このような画面が出てくるので、任意の銘柄コードを入力して、残りは以下と同じ設定にしてみましょう。

    画像

    これを実行すると以下のようになります。
    この結果は日経平均に連動するETFの1分足の情報です。

    画像

    チャートの本数は最大3000本ですが、種類によってそれよりも少ない数しか取得できないことがあるみたいです。そのため、この画像では上の方の数値が入っていませんね。

    1分足:9日分、2分足:9日分、3分足:9日分、4分足:9日分、5分足:31日分、10分足:61日分、15分足:91日分、30分足:121日分、60分足:2年分、日足:10年分、週足:20年分、月足:30年分

    公式オンラインヘルプ https://marketspeed.jp/ms2_rss/onlinehelp/ohm_002/ohm_002_04.html

    350行目よりも下あたりから数値が入っていました。
    最初に1、2分どうしたって感じですね。

    画像

    9日分とは言え、分足が取得できるのはかなりありがたいです。あとは9日おきに取得して自分でデータを蓄積しましょう。
    というわけで、基本的にはこの関数を使ってシートにローソク足の情報を出力させた後、外部に出力するという流れになります。

    手でやるという方は、適当にコピペして保存して終わりです。

    しかし、日経225を取得と考えた場合、休憩なしで1銘柄1分で終わったとしても4時間近くかかる計算ですね。
    というわけで私の全自動化ツールの紹介に移ります。



    ツールを使って全自動で分足を保存する

    ここから先は私が作成したエクセルブックを使って全自動で保存する方法を紹介します。
    ちなみに1分足は9日間取得できるということなので、毎週土日のどっちかに1回実行すればいいです。5分足でよければ月一ですね。
    ちなみに取引時間中はデータが途切れてしまうので時間外に行ってください。

    ※ここより下はVer2の方を見ることをお勧めします。

    ツールの取得と展開

    末尾の配布情報よりダウンロードしてください。
    中身は下記のようになっていますので、エクセルを開きましょう。

    画像

    Pythonのインストール

    私の全自動ツールを使う場合はPythonのインストールが必要です。
    VBAは融通が利かないので、最低限VBAで処理して残りはPythonで作っています。
    インストール方法については以下の記事で解説していますので、参考にしてください。

    ツールの設定

    ツールを開くとこのような画面になります。

    画像

    必要な設定項目は次の通りです。
    サンプルの画像では日経225が証券コード順ですこし入っています。

    • 実行設定
      ツールの実行ごとに変更する可能性のある設定です。

      • 処理番号
        登録してある銘柄のうち、何番から処理を開始するかを設定します。
        基本的には1からでいいですが、途中で何らかのエラーが発生した場合、その番号を入力することで再開が可能です。
        中断した場合は自動で次に取得すべき番号が入力されます。

      • 足種
        何分足のデータを取得するか設定します。リストから1M-8Hまで選べます。
        アップデートにより、"D,W,M"が追加されてますが、DB限定の動作となります。

      • クリーンアップ
        Python整理後に中間データを削除するかどうか。

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

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

      • Python
        Pythonの実行ファイルのパスを入力します。Pythonをインストールした時のインストール先のフォルダを開き"python.exe"を探してそれのパスを入力すればOK。

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

      • 証券コード
        取得したい銘柄の証券コードを2個以上入力します。2個未満ではエラーになります。
        "理論上"エクセルの最大行数まで使えます。

      • 銘柄名
        こちらは設定ではなく、サポートなのでツール実行時に自動的に入力されます。

    ツールを実行する

    設定の入力が終わったら実行します。
    最初にマーケットスピードと接続します。
    接続中になったことを確認したら、実行ボタンを押します。
    初めは3銘柄位でまずは試してください

    画像

    ボタンを押すと1、2秒してから動作を開始します。
    動作中はこんな感じで関数を使ってチャート情報をシートに出力しながらファイルに保存していきます。
    実行中はエクセルを非表示にして誤操作を防ぎますが、他のエクセルを開いて立ち上げると誤動作の原因になるのでおやめください。

    画像

    動作中は進捗が表示されます
    中断ボタンを押すことで10銘柄単位で中断が可能です

    画像
    画像

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

    画像

    また、設定の銘柄名の部分に自動的に名前が入ります。

    画像

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

    本ツールを実行すると、Stocksというフォルダが作成されます。

    画像

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

    画像

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

    画像

    中身はこんな感じです。
    RSSの時は日付と時刻が分かれていましたが、扱いづらかったので日付時刻という風にくっつけています。

    画像

    メモ帳で開くとこんな感じ。日付はISOフォーマットです。エクセルで開いた時は自動的に日付として認識して/区切りになってますね。

    画像

    仕様と実績について

    • 動作実績について

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

        • Windows11

        • Excel2016

        • Python 3.11.6

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

        • Market SPEED2 Ver4.12.1

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

    • 同じ日付のデータが扱いはどうなるのか?
      すでに同じ日付のデータが保存されている場合、そのデータはスキップされます。
      →たとえデータが途切れていてもスキップなので、取引時間中に実行しないでください。

    • 他のスパンの足でも使えるか
      ファイル名先頭に足種がつくのでデータが混在することはありません。

    • なぜPythonが混じっているのか
      フォルダ分けの処理などはVBAでなくともできる部分なので、書きやすいPythonで書いています。完全に私都合です。

    • Excelと同じフォルダに整理されていないCSVができるんだけど
      クリーンアップをしない場合は中間CSVデータが残ります。
      クリーンアップを有効にしているにもかかわらず残り、かつ整理データが無い場合はPythonの整理ツールが実行できていません。Pythonをきちんとインストールし、正しく実行できるか確認してください。
      最悪ダブルクリックでPythonファイルを実行出来れば整理はできます。
      ※ただし足種を表す文字がファイル名につかなくなります。
      ※この辺の詳しい内容は解説編を予定。

    • DB限定って何?
      次回の記事の方で紹介しているデータベース化の事です。この新ツールを導入している場合に限り、DB限定機能が実行可能になります。
      導入方法は簡単で、新ツールのファイルを本ツールと同じところに置けばOKです

    アップデート

    アップデート情報

    記事にはしれっとアップデート情報が入っているので、何がアップデート要素なのかはここで書いておきます。
    アップデートはベーシック版には適用されていませんのでご注意ください。

    • 2025/4/5
      進捗状況表示フォームを改善。進捗バーと中断機能を実装。
      終了時コマンド実行機能を実装。

    • 2025/5/5
      DB化ツール追加
      DB化ツールで株式分割自動検出&補正に対応
      日、週、月足の取得に対応(DBのみ)

    次回

    データベース化と株式分割の自動最適化を行います。


    番外編

    Pythonで直に取得できなかったのか

    実は最初、RSSと聞いて何らかの通信ポートがあって、そこからやり取りしているのではないかと思い調べました。結果がこちらです。

    画像

    一番簡単なのは待ち構えてるポートがあるかどうかを確認することですね。
    全てのポートがハンドシェイク済みで、しかもSSL通信のポートが使われています。
    これローカル向けに空いてるとこないですね…。というわけでソケットライブラリとかを使って取得できるかな?という希望は崩れ去ってしまいました。
    多分VBAの中でdllをロードしてAPIを叩いているのかなと推測されます。



    解説

    解説については別の記事で行います。
    ※解説版では配布情報に加え、マクロのロックパスワード及び通常版を入手可能です。


    配布情報

    配布URL

    以下のURLより配布しています。
    利用規約に同意の上ご利用ください。
    ※こちらはベーシック版となります。

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

    配布情報

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


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

    あなたへのおすすめ