python で株価指数の取得

python で株価指数の取得
【Python】investpyを使ったInvesting.comからのデータ取得方法


指数データの取得方法が乗っていたので参考に

import investpy
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta
import altair as alt
import pandas as pd

でライブラリをインポート

today = datetime.today().strftime('%d/%m/%Y')

で今日の日付を取得し
フォーマットを investpy で使う日付に変更

df = investpy.get_index_historical_data(index='S&P 500',country='united states',
                                        from_date='01/01/2010',to_date=today)


2010年1月1日から今日までの
S&P500
のデータを取得

df.index = df.index.strftime('%Y/%m/%d')

で日付フォーマットを altair で使う形式に変更

df = df.T
df= df.T.reset_index()

でDate をカラムに追加

chart =(
    alt.Chart(df)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャートを表示

S&P500 ができたのでダウ平均を取得

使用したメソッドの
get_index_historical_data
については
investpy.indices

を参考に

パラメータに指定する株価指数については
https://jp.investing.com/indices/world-indices
で日本語版がでるがコードを指定するので

https://www.investing.com/indices/usa-indices
を参考に

dow =  investpy.get_index_historical_data(index='Dow Jones',country='united states',
                                        from_date='01/01/2010',to_date=today)

としたが

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-23-37a90ad00d34> in <module>
----> 1 dow =  investpy.get_index_historical_data(index='DJI',country='united states',
      2                                         from_date='01/01/2010',to_date=today)

~/anaconda3/lib/python3.8/site-packages/investpy/indices.py in get_index_historical_data(index, country, from_date, to_date, as_json, order, interval)
    511 
    512     if index not in list(indices['name'].apply(unidecode).str.lower()):
--> 513         raise RuntimeError("ERR#0045: index " + index + " not found, check if it is correct.")
    514 
    515     full_name = indices.loc[(indices['name'].apply(unidecode).str.lower() == index).idxmax(), 'full_name']

RuntimeError: ERR#0045: index dji not found, check if it is correct.

となり
指定するコードが違うらしい

VIX 指数(恐怖指数)については

vix = investpy.get_index_historical_data(index='S&P 500 VIX',country='united states',
                                        from_date='01/01/2010',to_date=today)
vix

とすれば表示される

どうやら名称が違うようなので
プライマリーセクターに絞り検索

stock_index =investpy.indices.get_indices(country="united states")
stock_index[stock_index['class']=='primary_sectors']

64に絞りこみできるので

stock_index =investpy.indices.get_indices(country="united states")
stock_index[stock_index['class']=='primary_sectors'].head(35)


stock_index =investpy.indices.get_indices(country="united states")
stock_index[stock_index['class']=='primary_sectors'].tail(35)

で探すが該当するものがでない

pandasで特定の文字列を含む行を抽出(完全一致、部分一致)

で部分一致で検索をする

str.startswith()

で文字列で始まるもの
もしくは

str.contains()

で文字列を含むもの
を対象にする

dow =stock_index[(stock_index['market']=='global_indices') & (stock_index['class']=='other_indices')]
dow[dow['name'].str.contains('DJ')]

で探したがそれらしいものはでてこない

stock_index =investpy.indices.get_indices(country="united states")
stock_index[stock_index['full_name'].str.contains('Dow Jones Industrial')]

で検索すると
Dow 30 が表示される

dow =  investpy.get_index_historical_data(index='Dow 30',country='united states',
                                        from_date='01/01/2010',to_date=today)
dow

で表示されるので
S&P500のときと同じようにチャートを表示する

dow=dow.T
dow = dow.T.reset_index()

で Date をカラムに追加

chart =(
    alt.Chart(dow)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャート表示

vix 恐怖指数をチャートにするなら

vix = investpy.get_index_historical_data(index='S&P 500 VIX',country='united states',
                                        from_date='01/01/2010',to_date=today)

でデータを取得

vix = vix.T
vix = vix.T.reset_index()


Date をカラムに追加

chart =(
    alt.Chart(vix)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャートで表示

他の国の株価指数も取得できる
その場合、国の指定をする必要があり

investpy.indices.get_index_countries()

で取得可能な国が表示できる

index_list = investpy.indices.get_index_countries()
index_list

で取得可能な国を表示可能

ユーロ圏の株価指数を調べるのなら
https://www.investing.com/indices/european-indices

株価指数の名前を調べる
ダウ平均が Dow 30 というように
名称が investpy のときわからないときがあるので

DAX
Euro Stoxx 50
がある国を調べる

Germany なので

euro_index =investpy.indices.get_indices(country="germany")

で取得し
https://www.investing.com/indices/germany-30
から
名称が DAX(GDAXI)
であるのを確認したら

euro_index[euro_index['full_name'].str.contains('DAX')]

で探すと出てこないので

euro_index[euro_index['name'].str.contains('DAX')]

で検索すると出てきた

あとは

dax = investpy.get_index_historical_data(index='DAX',country='germany',
                                        from_date='01/01/2010',to_date=today)

でDAXの値を取得

dax.index = dax.index.strftime('%Y/%m/%d')
dax = dax.T
dax = dax.T.reset_index()

で日付フォーマット変更と
Date をカラムに追加

chart =(
    alt.Chart(dax)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャート表示

応用でユーロストック50なら
https://www.investing.com/indices/eu-stoxx50

Euro Stoxx 50 (STOXX50E)
となっているのを確認できるので

euro_index =investpy.indices.get_indices(country="germany")
euro_index[euro_index['name'].str.contains('Euro Stoxx 50')]

で検索すると簡単にヒットする

あとは

euro_stock50 = investpy.get_index_historical_data(index='Euro Stoxx 50',country='germany',
                                        from_date='01/01/2010',to_date=today)

euro_stock50.index = euro_stock50.index.strftime('%Y/%m/%d')
euro_stock50 = euro_stock50.T
euro_stock50 = euro_stock50.T.reset_index()

chart =(
    alt.Chart(euro_stock50)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

で表示できる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です