【Python】investpyを使ったInvesting.comからのデータ取得方法

investpyは、多くの一般投資家から、一部の金融機関関係者などが経済情報を取得するために使っているであろう大手金融情報サイトのInvesting.comから経済データを取得できるライブラリです。

いつもはpandas-datareaderやDBnomics APIを使うことが多いですが、便利そうなので、investpyも使ってみます。


時系列データの取得

時系列データの取得に共通していえることは、まとめて複数の対象のデータを取得することはできない。
(複数tickerから成るリストを渡してもエラーになる)


株価データの取得

import investpy

# AAPLの株価データの取得
df = investpy.get_stock_historical_data(stock='AAPL', country='united states',
                                        from_date='01/01/2010',to_date='10/06/2021')

pandas-datareaderとの違い、investpyでの注意点としては、to_dateを省略することはできない。
endを省略するだけで最終取引日データまで取得できるpandas-datareaderになれている場合には注意。

また、日付の形式についても上記のようにdd/mm/yyyyで指定する必要がある点も注意。
(1月を01ではなく1とするなど0の省略は許容されるようです)

country=’hoge’の指定は必須となっている。ISOコードではなく、国名で指定するようです。


ETFデータの取得

株価データ取得時はto_dateを文字列で書き込んだが、指定が面倒なので、本日日付を指定できるように変更を加えたうえで、ETFデータを取得する。

from datetime import date

# 本日日付を準備
today = date.today().strftime('%d/%m/%Y')

# ETF SPYのデータ取得
df = investpy.get_etf_historical_data(etf='SPDR S&P 500',country='united states',
                                      from_date='01/01/2010',to_date=today)

上記コードをみてわかる通り、ETFデータを取得する場合に使うのはticker symbolではなく、ETFの名前であるため、注意してください。(tickerで覚えており、正確な名前がわからない場合にはinvesting.comで検索をかけるなどして確認する必要がありそうです)


指数データの取得

株式指数の取得は上記の.get_stock_historical_dataではなく、get_index_historical_dataを使って取得します。

# S&P 500のデータ取得
df = investpy.get_index_historical_data(index='S&P 500',country='united states',
                                        from_date='01/01/2010',to_date=today)

ETFの時と同じように、indexは名前で指定する点に注意。


為替データの取得

# USDJPYデータの取得
df = investpy.get_currency_cross_historical_data('USD/JPY',from_date='01/01/2010',to_date=today)


企業情報の取得

カンパニー・プロファイルの取得

Investing.com内の対象企業ページのURLと、企業のプロファイルを辞書形式で返す。

# AAPLのプロファイルを取得
data = investpy.get_stock_company_profile('AAPL',country='united states')
print(data['desc']) # 企業の概説の表示


財務諸表データの取得

# AAPLの財務諸表データの取得
# income statement
PL = investpy.stocks.get_stock_financial_summary('AAPL', 'united states',
                                                 summary_type='income_statement', period='annual')
# balance sheet
PL = investpy.stocks.get_stock_financial_summary('AAPL', 'united states',
                                                 summary_type='balance_sheet', period='annual')

# cash flow statement
CF = investpy.stocks.get_stock_financial_summary('AAPL', 'united states',
                                                 summary_type='cash_flow_statement', period='annual')

上記のperiodをquarterlyに変えれば四半期データの取得も可能。
ただし、直近4四半期分のデータのみであり、過去5年分の四半期データが手に入るというわけではない。

また、B/Sは総資産、総負債、純資産のトータルの数字しか返さないなど情報量は非常に少なく、十分に使えるものではない。

pandas-datareaderを使ってalpha vantageから財務諸表データを取得するほうがはるかに情報量は充実している。


配当・株式データ

# AAPLの配当データ取得
dividend = investpy.get_stock_dividends('AAPL','united states')

# AAPLの株式情報(EPS,PE, Market Capなど)の取得
info = investpy.get_stock_information('AAPL','united states')


経済指標・指標カレンダーの取得

calendar = investpy.news.economic_calendar(from_date=today,to_date='01/07/2021',
                                           countries=['united states','germany','japan'])
# countriesでの国指定は省略可能。

# 重要度の高・中度の予定
important = investpy.news.economic_calendar(from_date=today,to_date='01/07/2021',
                                            countries='united states',importances=['high','medium']))

上記のように国の指定やimportancesの指定(high, medium, lowから指定)によって対象となる経済指標のスケジュールを返す。

他にもカテゴリーの指定などもできるとのこと。


総括とpandas-datareaderとの比較

時系列データは上記で示した以外にも、コモディティや債券などのデータを取得することもでき、yahoo financeやstooqで取得できないデータを取得するためには便利に使えそうである。

また、経済指標カレンダーも一通りのデータがきれいに落とせる。

しかし、財務諸表データに関しては、データ量が少なすぎるため、正直なところ使い物にならないと思う。

上でも触れたが、財務諸表データはpandas-datareaderを通じてalpha vantageから取得したほうがいいだろう。

investpyについては、時系列データの取得に関してpandas-datareaderを補完する形で使えばいいように思う。