Python 楽天証券のマーケットスピードⅡとエクセルRSSから、チャート時系列データをcsvで保存する「win32com」

 本記事の雛形コードを実行するには前提条件があり、それは次の通りです。楽天証券で口座を開設していること。また、Windows環境である必要があります。それは、楽天証券のツールであるマーケットスピードII (MarketSpeed2)を使用するためです。
 そして、マーケットスピードII のインストールと、楽天証券RSSをエクセルで利用するためにExcelにそのアドインファイルを登録するまでを完了しておく必要があります。RSSの環境設定は次のリンク先を参照下さい。

RSSとは? | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール

上記の前提条件が完了の元、作業手順は以下の通りです。
■作業1. MarketSpeed2 を起動する
これは、ExcelRSSを取得するのに、起動しておく必要があるためである。
■作業2. excelを起動し、取得したいチャートの雛形のエクセルファイルを作成します。
 ①エクセルを起動後に、まずはメニューバーのマーケットスピードⅡを選択します
 ②次に「未接続」を選択して、「接続中」の状態にします
 ③そして、「チャート」を押して、例えば下図のように、銘柄コードはA1、表示開始セルはC1に設定します
 ④最後に、登録を押下します

f:id:HK29:20220220222417j:plain

 この状態で、例えば、ビックカメラの銘柄コード「3048」をA1セルに入力します。すると、下図のようにチャート情報を取得できます。ちなみに、C1セルの関数内にある100の数値を例えば、350などに増やすとその分の遡ったデータを取得できます。

f:id:HK29:20220220222653j:plain

 そして、このエクセルファイルを例えば、「チャート雛形.xlsx」として保存します。
■作業3. この「チャート雛形.xlsx」を適当な作業フォルダへ移動します
■作業4. その作業フォルダで「チャート雛形.xlsx」を起動し、マーケットスピードⅡを選択しておきます。(ちなみに、作業2, 3は初回のみの作業です。)
■作業5. 本雛形のpythonスクリプトを実行すると、複数の銘柄のチャートをcsvファイルで取得することができます。下図は、その例でイオンの株チャートをcsvで出力した例です。

f:id:HK29:20220220223257p:plain

■本プログラム

import win32com.client
import pandas as pd
import time

def main():
    # すでに開いてるエクセルファイルを取得する
    ws = win32com.client.GetObject(Class="Excel.Application")

    # Excelを表示をさせる
    ws.Visible = True

    for code in stock_code_list:
        # 株コードをA1に入力
        ws.Range("A1").value = code
        # 更新のため、2秒待つ
        time.sleep(2)

        # 最終行の取得
        xlUp = -4162
        end_row = ws.Cells(ws.Rows.Count, 6).End(xlUp).Row

        # 最終列の取得
        xlToLeft = -4159
        end_col = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
        
        # 抽出するデータのセル範囲
        start_row = 2
        start_col = 6
        my_range = ws.Range(ws.Cells(start_row, start_col), ws.Cells(end_row, end_col))
        
        # チャート時系列データを抽出する
        data_list = []
        for row_index in range(start_row, start_row + my_range.Rows.Count - 1):
            row = []
            for col_index in range(start_col, start_col + my_range.Columns.Count):
                row.append(ws.Cells(row_index, col_index))
            data_list.append(row) # 行毎にデータをリストへ格納する
            
        # pandasデータフレーム形式へ変換
        df = pd.DataFrame(data_list)
        
        # csvファイルへ保存
        df.to_csv(str(code) + '_' + ws.Range("C3").value + '.csv',
                  index = False, # pandasのインデックスを書かない
                  header = False, # pandasのヘッダーを書かない
                  encoding = 'utf_8_sig', # エクセルで文字化けしないcsvを出力
        )
    
if __name__ == '__main__':
    # 株の銘柄のコードをリストで指定
    stock_code_list = [3048, 8267, 9041]
    
    main()
    print('finished')

以上

<広告>