pythonで日本株の株価を取得しようとすると以前はスクレイピングを行う必要があるようでした。しかし、最近はstooqというサイトを活用すれば楽に実行できるようなのでその紹介です。
また、plotlyを使用して、ローソク足の描画までを行います。
方法の概要
株価の取得には2パターンをここでは紹介します。
株価の取得方法
- pandasだけで実施する方法
- pandas datareaderを使用して実施する方法
ローソク足の描画
plotlyを使用して描画します。
株価の取得-pandas-
以下のように、stooqのcsvファイルの設置しているURLから、データを取得します。
codeの部分に「銘柄コード.jp」を変えることで銘柄ごとのデータを取得できます。
また、indexを時系列データとして取り扱うための変換を行っています。
取得期間を指定しない場合
import pandas as pd
def get_price(code):
df = pd.read_csv(f'https://stooq.com/q/d/l/?s={code}&i=d',index_col=0)
df.index = pd.to_datetime(df.index).tz_localize('Asia/Tokyo')
return df
df = get_price('6701.jp')
取得期間を指定する場合
特定の期間のデータが欲しい場合には以下のURLを使用します。
def get_price_time_designation(start, end, code):
df = pd.read_csv(f'https://stooq.com/q/d/l/?s={code}&d1={start}&d2={end}&i=d',index_col=0)
df.index = pd.to_datetime(df.index).tz_localize('Asia/Tokyo')
return df
df_t = get_price_time_designation('20190620','20200625','6701.jp')
実行結果例

株価の取得-pandas datareader-
pandas datareaderというパッケージを使用して、stooqからデータを取得する方法もあります。
stooq.StooqDailyReaderで銘柄コードや、取得期間を指定します。
symbolsでは銘柄のコードを指定します。
銘柄コードをリスト形式で与えると一括でデータを取得できます。
.readによりデータフレーム形式で値を取得します。
pandas-datareaderのインストール方法
pip install pandas-datareader
pandas-datareaderによる株価の取得
import pandas_datareader as pdr
pdr =pdr.stooq.StooqDailyReader(symbols='6701.jp', start='JAN-01-2010', end="JUN-26-2020").read().sort_values(by='Date',ascending=True)
取得データ

ローソク足の描画
ローソク足の描画は以下のようなコードで可能です。
設定の詳細は参考サイトが詳しいです。
また、plotlyをjupyter labで使用できるようにするには若干手順が多いので、下記リンクを参照ください。
import numpy as np
import plotly.graph_objects as go
def plot_chart(df):
x = np.arange(df.shape[0])
interval = 20
vals = np.arange(df.shape[0],step=interval)
labels = list(df[::interval].index)
fig = go.Figure(
data=[go.Candlestick(
x=x,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close']),
],
layout = go.Layout(
xaxis = dict(
tickvals = vals,
ticktext = labels,
tickangle=-45
),
)
)
fig.show()
plot_chart(df_t)
実行例

参考サイト
plotlyのインストール
テクニカル分析の実施
今回作成したチャートをベースにテクニカル分析やローソク足パターンを追加したプログラムを以下の記事に載せています。
よろしければご覧ください。
コメント