LoginSignup
0
2

楽天マーケットスピードII RSSを使って株価チャートを作成

Last updated at Posted at 2023-10-07

はじめに

pytonで株価チャートを描ければいいなと思い、作ることにしました。株価を取得する方法やチャートを描く方法は色々あると思いますが、ここでは、楽天マーケットスピードIIのRSS関数を使い、エクセルに株価を表示させて、pandasのデータフレームに変換し、mplfinanceでチャートを描くようにしました。

チャート.jpg

RSS関数について

エクセルに入力する関数は、

=RssChart( ヘッダー行 , 銘柄コード , 足種 , 初期表示本数 )

それぞれの引数は、

ヘッダー行

省略の場合下記の項目が出ます
「銘柄名称, 市場名称, 足種, 日付, 時刻, 始値, 高値, 安値, 終値, 出来高」

銘柄コード

国内株式 数値4桁 例えば「トヨタ自動車」は7203

足種

T:ティック, 1M:1分足, 2M:2分足, 3M:3分足, 4M:4分足, 5M:5分足, 10M:10分足, 15M:15分足
30M:30分足, 60M:60分足, 2H:2時間足, 4H:4時間足, 8H:8時間足, D:日足, W:週足, M:月足

初期表示本数 1~3000

1分足:9日分、2分足:9日分、3分足:9日分、4分足:9日分、5分足:31日分、10分足:61日分
15分足:91日分、30分足:121日分、60分足:2年分、日足:10年分、週足:20年分、
月足:30年分(1995年5月以降のデータ)

RSS関数の詳細については、下記をご覧ください。

pythonのプログラムで、RSS関数は、次のようにしました。

code=7203       # 銘柄コード
bar="M"         # 足種
number=50       # 表示本数
command_line="=RssChart("+","+str(code)+","+"\""+bar+"\""+","+str(number)+")" 
ws.Cells(1, 1).Formula =command_line

コード

pythonのプログラムです。
実行前に、マーケットスピードIIのログインと、
エクセルを起動し、空白のブックを開き、RSSの接続が必要です。

import win32com.client      #エクセル用
import mplfinance as mpf    #グラフ用
import pandas as pd         #データフレーム用
import time                 #時間調整用

#変数設定
code=7203       # 銘柄コード
bar="M"         # 足種
number=50      # 表示本数
row, column=1,1 # Rssの関数を入れる場所

#Rss関数で取り込んだエクセルデータをpandasのデータフレームへ変換する関数
def get_data(code, bar, number, row, column):
    #エクセルに入れる関数 RssChart(ヘッダー行,銘柄コード,足種,初期表示本数)
    command_line="=RssChart("+","+str(code)+","+"\""+bar+"\""+","+str(number)+")" 
    #Rss関数をエクセルに記入
    ws.Cells(row, column).Formula =command_line
    #エクセルに取り込んだデータを変数「data」に取り込む 
    data=ws.Range(ws.Cells(row+2,column+3), ws.Cells(row+number+1,column+9)).Value
    #データフレームに変換 columnsで各列に対応するタイトルを入れる。
    data=pd.DataFrame(data, columns=["date", "time", 'Open', 'High', 'Low', 'Close', 'Volume'])
    #日付と時間を合わせて、日時とする
    date_time =data["date"]+"/"+data["time"]
    #グラフの横軸に設定できるよう日時の文字をdatetime型へ変更する
    data["date"] = pd.to_datetime(date_time)
    #日時をインデックスとして、グラフの横軸にする
    data.set_index("date", inplace=True)
    return data

#今、開いているエクセルのシート「sheet1」をwsとする
try:
    wb = win32com.client.GetObject(Class="Excel.Application")   
except:
    print("エクセルが開いていません。")
    exit()
wb.Visible=True    
ws = wb.Worksheets('Sheet1')

#株価チャートの表示
while True:
    try:
        data=get_data(code, bar, number, row, column)
        mpf.plot(data, type="candle",volume=True)
        break
    except:
        print("再試行中...")
        time.sleep(1)  # 待機する時間(秒)を指定する

エクセルに株価を取り込むときに、時間がかかる場合があります。
取り込み前にチャートを表示するとエラーになるため、
try、exceptを入れています。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2