【Python】株価データを取得し、テクニカル指標をグラフ化するプログラム(その1)、(その2)で株価データを取得し、MACD、ボリンジャーバンドなどのテクニカル分析指標を計算して、売買のタイミングを決定するためのツールを紹介しました。
この中で使用した株価データを取得する方法は、Pythonのライブラリであるpandas-datareaderを使用して、StooqというWebサイトから情報を入手するものでした。
具体的には、以下のコードの’銘柄’の部分に入手したい銘柄を入力することでデータを取得するものです。
# データ取得する'銘柄’、’取得先のWeb’を指定
df = data.DataReader('^NKX', 'stooq', start, end)
日本株 | コード4桁+.JP |
日経平均 | ^NKX |
TOPIX | ^TPX |
ダウ平均 | ^DJI |
NASDAQ | ^NDQ |
S&P500 | ^SPX |
米国株 | コード4字+.US |
表のように、各市場の平均株価や銘柄の株価データを取得することができますが、株価以外のデータは取得することができません。
Stooqは、株価情報以外にも、為替、ビットコインなどの暗号資産(仮想通貨)、金・銀・原油などのコモディティなどの情報も取り扱っており、そのデータを取得する方法を以下に説明します。
株価、為替、暗号資産、コモディティなどのデータを取得するプログラム
プログラムは以下の通りです。
※Ta-libのインストールが必要になります。
# ライブラリ
import numpy as np
import talib as ta
import datetime
from datetime import timedelta
import requests
from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt
# データ取得期間の開始日と終了日を指定
end = datetime.datetime.now()
start = end - timedelta(days=365)
# 銘柄を入力
symbol = input("銘柄を入力してください: ")
# Stooqの銘柄データのURLに期間と銘柄を追加
url = f"https://stooq.com/q/d/l/?s={symbol}&i=d&sd={start.strftime('%Y-%m-%d')}&ed={end.strftime('%Y-%m-%d')}"
# HTTP GETリクエストを送信してデータを取得
response = requests.get(url)
# レスポンスのテキストをDataFrameに読み込み
data = pd.read_csv(StringIO(response.text))
# 日付列をdatetime型に変換
data['Date'] = pd.to_datetime(data['Date'])
# データ取得期間のデータだけを抽出
data = data[(data['Date'] >= start) & (data['Date'] <= end)]
# 必要な列だけを抽出
df = data[['Date', 'Open', 'High', 'Low', 'Close']]
# 日付をインデックスにセット
df.set_index(keys ='Date', inplace=True)
# グラフの描画
plt.plot(df.index, df['Close'])
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title(f'{symbol} Price')
plt.xticks(rotation=45)
plt.show()
最初に、必要なライブラリをインポートします。このプログラムでは、numpy、talib、datetime、timedelta、requests、StringIO、pandas、matplotlib.pyplotの各ライブラリを使用します。
データ取得期間の指定 データを取得する期間を指定するため、現在の日付とその1年前の日付を計算します。これにはdatetimeモジュールとtimedeltaクラスを使用します。
銘柄の入力 プログラム実行時に、表示したい株式の銘柄を入力するように求めます。入力はinput関数を使用して受け取ります。
株式データの取得 指定された銘柄の株式データを取得するために、StooqというウェブサイトからHTTP GETリクエストを送信します。取得するデータのURLは、指定された銘柄と期間を組み合わせて作成されます。
データの読み込みと加工 取得したデータはCSV形式で提供されるため、pandasのread_csv関数を使用してデータをDataFrameに読み込みます。また、日付列をdatetime型に変換します。
取得期間のデータのみを抽出し、必要な列のみを選択します。
この場合、’Date’、’Open’、’High’、’Low’、’Close’の列が必要です。これにより、DataFrameのサイズを縮小し、扱いやすくします。
データの可視化 取得した株価データを使用して、matplotlibライブラリを使用してグラフを描画します。プログラムでは、x軸に日付、y軸に終値を設定し、タイトルや軸ラベルを追加しています。さらに、x軸のラベルを45度回転させ、日付が重ならないようにしています。
結果の表示 最後に、plt.show()関数を呼び出して描画したグラフを表示します。
実行してみる
為替
実際に実行してみましょう。銘柄の入力を求めてきますので、「USDJPY」と入力します。
そうすると、「ドル円」のトレンドが表示されます。
暗号資産
同じように「BTCJPY」と入力すると、ビットコインのトレンドが表示されます。
金、銀、原油、などのコモディティ
「GC.C」は金、「SI.C」は銀、「CL.C」はWTI原油のように、各種商品市場価格も取得できます。
取得できるデータ
このように、様々なデータが取得できることが確認できました。
StooqはポーランドのWebサイトですが、各国の株価、平均株価、債券、為替、暗号資産、コモディティ・・・など非常に多くのデータを取り扱っています。このサイトの検索窓で検索されるコードを入力すると基本的にはデータ取得ができそうですので、実際に試していただけると良いと思います。
ポーランド語ですが、ブラウザの翻訳機能で日本語にしてくれるので問題ないと思います。
確認出来たところでは、以下のようなデータが取得できました。
日本株 | コード4桁+.JP |
日経平均 | ^NKX |
TOPIX | ^TPX |
ダウ平均 | ^DJI |
NASDAQ | ^NDQ |
S&P500 | ^SPX |
米国株 | コード4字+.US |
ユーロ円 | EURJPY |
ドル円 | USDJPY |
ビットコイン | BTCJPY |
BTCUSD | |
イーサリアム | ETH.V |
金 | GC.C |
銀 | SI.C |
銅 | S1.C |
原油(WTI) | CL.C |
原油(BRENT) | CB.C |
天然ガス | NG.C |
プラチナ | PL.C |
パラジウム | PA.C |
大豆(キャッシュ) | ZS.C |
取得したデータの活用
【Python】株価データを取得し、テクニカル指標をグラフ化するプログラム(その1)、(その2)で作成したプログラムで取得したデータ(df)を置き換えることで、上述の各種データのテクニカル分析を行なうことができます。また判定条件を設定しておけばメールで売買のタイミングで通知することができます。
まとめ
この記事では、Stooqというウェブサイトからデータを取得するプログラムを作成し、株価以外にも、為替、ビットコインなどの暗号資産(仮想通貨)、金・銀・原油などのコモディティなどの価格情報も取り扱えることを確認しました。
このデータからMACD、RSI、ボリンジャーバンドなどのテクニカル指標を計算、グラフ化して分析を行なったり、売買のタイミングを判断しメールで自動通知させることで、株式市場の投資家やトレーダーのような効果的な売買を行なうことが可能になります。
Pythonを使用することで、自分の取引戦略や分析手法に合わせたカスタマイズを行なって活用いただければと思います。
コメント