LoginSignup
152

Yahoo Finance USから株価をダウンロードしてみた

Last updated at Posted at 2019-01-15

株式市場を理解する1つの良い方法は過去の株価を取得してチャートを描いてみたり、統計分析をしてみることです。株価の動きを経済変数と比較してみるなどということも大事です。このような環境は海外のほうが日本よりも充実しています。

 Python3を用いてデータをダウンロードするためには、jupyter notebookがお勧めです。jupyter notebookのインストールについてはPython3ではじめるシステムトレード:Jupyter notebookのインストールを参考にしてください。

必要なふぃあるはhttps://github.com/innovation1005/system_trade/upload/master
からダウンロードしてください。

yahoo_finance.ipynb:本WEBサイトのjupyter notebookファイル
nasdaq.csv: nasdaq100採用銘柄ティッカーコード
djia.csv:djia採用銘柄ティッカーコード
sp500.csv:sp500採用銘柄ティッカーコード

202402091837 53417

注1:

 2017年春ごろからフリーでダウンロードできる株価データが世界的に減少する傾向が続いていました。Yahoo Financeはフリーで株価を提供してくれる重要なサイトでしたが、2017年5月ごろよりサービスに支障をきたすようになりました。

 しかし2017年年末ごろより、APIによるデータの提供を再開。Yahooはサービスの再開に際してデータを修正。以前から言われているようにYahooのデータは必ずしも信用できるとは限らないということです(これはyahooのデータに限りません。どのデータソースも同じです)。しかし、今回改善されたようです(チェックはしてません)。あくまでイメージです。

2022/12/28 yahoo finance はAPIのサービスを中止しています。
yfinance(https://pypi.org/project/yfinance/)
yahoofinancials(https://pypi.org/project/yahoofinancials/)
yahoo_fin(http://theautomatic.net/yahoo_fin-documentation/)
の使用をお勧めします。

2023/05/26に記事を修正:yfinanceとyahoofinancialsの紹介とグラフのアップデート(47967)

yfinanceのインストール

pip install yfinance

場合によっては以下のメッセージが出ますが、一応動きます。
image.png

yahoofinancialsのインストール

pip install yahoofinancials
%matplotlib inline 
import matplotlib.pyplot as plt #描画ライブラリ
import pandas as pd
import numpy as np
import yfinance as yf
from yahoofinancials import YahooFinancials

check
ダウンロードの結果の比較

ticker = yf.Ticker('usmv')
tsd = ticker.history(period="16y")
tsd.head(2)

image.png

yahoo_financials = YahooFinancials('USMV')
data = yahoo_financials.get_historical_price_data(start_date='2010-01-01', 
                                                  end_date='2023-12-31', 
                                                  time_interval='weekly')
tsd_df = pd.DataFrame(data['USMV']['prices'])
tsd_df = tsd_df.drop('date', axis=1).set_index('formatted_date')
tsd_df.head(2)

image.png

yahoo! financeのhistrical dataの取得 画面コピー
image.png

日付もAdjysted closeもcloseも異なります。yfinanceのCloseはyahoo! financeのadj closeのようです。以後簡単なyfinanceを使います。

US yahoo! financeのデータ構成

  • Open:始値
  • High:高値
  • Low:安値
  • Close:終値 - 分割調整後
  • Volume:出来高
  • Adj Close:配当込み分割調整後株価

株価データの可視化

代表的な米国ETF(上場投資信託)

 ETFとは上場投資信託のことで手数料の点で株式と同じ手数料で売買ができるために、通常の投資信託よりも費用の面で有利です。

 では実際にダウンロードしてみましょう。

ticker = yf.Ticker('usmv')
tsd = ticker.history(period="16y")
tsd.Close.plot()

image.png

 ダウンロードした株価は米国の上場投資信託(ETF)のリスクパリティ-最小分散ポートフォリオ戦略を用いたusmvです。

 このETFは安定した収益の獲得を目指し、最小分散ポートフォリオというアルゴリズムを用いて運用されています。

 ポートフォリの詳細はつぎURLよりExcel形式でダウンロード可能です。
https://www.blackrock.com/us/individual/products/239695/ishares-msci-usa-minimum-volatility-etf

ダウジョーンズ

ticker = yf.Ticker('dia')
tsd = ticker.history(period="26y")
tsd.Close.plot()

image.png

ナスダック100

ticker = yf.Ticker('qqq')
tsd = ticker.history(period="26y")
tsd.Close.plot()

image.png

 QQQはInvescoが運用するナスダック100連動のETFですが、そのポートフォリオの詳細はつぎのURLよりExcel形式でダウンロード可能です。

日経平均株価

 日本の代表的な株価指数である日経平均株価(日経225)もダウンロード可能です。

ticker = yf.Ticker('^N225')
tsd = ticker.history(period="100y")
tsd.Close.plot()

image.png

長期のチャートは対数値に変換します。

import numpy as np
ticker = yf.Ticker('^N225')
tsd = ticker.history(period="100y")
np.log(tsd.Close).plot()

image.png

 アベノミクス(2013年)以降の指数をダウンロードしてみましょう。

tsd.loc['2013':,'Close'].plot()

image.png

主な株価指数の構成銘柄

代表的なナスダック100指数を構成する銘柄

 アメリカ経済を牽引する銘柄群です。

NDX=pd.read_csv("nasdaq.csv",header=None)
NDX.head()

image.png

for x in NDX.iloc[:,0]:
    ticker = yf.Ticker(x)
    tsd = ticker.history(period="1y")
len(NDX)

100

nasdaq.csvは自分で作ることができます。https://en.wikipedia.org/wiki/Nasdaq-100
にナスダック100のリストがありますから、それをエクセルにペーストして、株価コードだけをcsvファイルとして落とせば完了です。1年に一度、見直しがあるので、入れ替えは頻繁に起こると思ってください。

代表的なダウ平均株価指数採用銘柄

「ダウ平均」、「ニューヨーク・ダウ」、「ニューヨーク平均株価」などとして親しまれている当指数は、チャールズ・ダウにより考え出され、1884年から算出されています。発表当初は鉄道株が中心でした。19世紀末には変わりゆく経済の姿を受け、1896年から新たなダウ工業株平均の算出が始まりました。その後ダウ工業株30種平均株価を構成する銘柄は時代の流れに合わせて入れ替えが行われています。今現在もっとも古くから採用されている銘柄はエクソンモービルで1928年から採用されています。

現在の構成銘柄は、

DJIA=pd.read_csv("djia.csv",header=None)
DJIA.head()

image.png

djia.csvは自分で作ることができます。https://en.wikipedia.org/wiki/Dow_Jones_Industrial_Average
にDJIAのリストがありますから、それをエクセルにペーストして、株価コードだけをcsvファイルとして落とせば完了です。入れ替えは頻繁に起こると思ってください。

US Yahoo Financeからダウンロードできるその他の主な株価、指数、暗号通貨

代表的な世界の株価指数

index=["^DJI","^DJT","^DJU","^BANK","^IXCO","^NDX","^NBI",
       "^NDXT","^INDS","^INSR","^OFIN","^IXTC","^TRAN","^NYY","^NYI","^NY",
       "^NYL","^XMI","^OEX","^GSPC","^HSI","^FCHI","^BVSP","^N225","^RUA","^XAX"]
^DJI Dow Jones Industrial Average
^DJT Dow Jones Trnsport
^DJU Dow Jones Utility Average
^BANK NASDAQ Bank
^IXCO NASDAQ Computer
^NDX NASDAQ-100
^NBI NASDAQ Biotechnology
^NDXT NASDAQ 100 Technology
^INDS NASDAQ Industrial
^INSR NASDAQ Insurance
^OFIN NASDAQ Other Finance
^IXTC NASDAQ Telecommunications
^TRAN NASDAQ Transportation
^NYY NYSE TMT INDEX
^NYI NYSE INTL 100 INDEX
^NY NYSE US 100 INDEX
^NYL NYSE NY World Leader Index
^XMI NYSE ACRA Major Market Index
^OEX S&P 100 Index
^GSPC S&P 500 Index
^HSI Hang Seng Index
^FCHI CAC 40
^BVSP IBOVESPA
^N225 Nikkei 225
^RUA Russel 3000
^XAX NY AMEX Composit Index
^SOX PHLX Semiconductor Index

SOX指数はフィラデルフィア連銀による半導体株指数。半導体株の動向に大きな影響がある。

代表的なS&P株

現在の構成銘柄は、wikiのページから銘柄リストをエクセルにペーストしてティッカーの部分だけを残してsp500.csvファイルとして保存します。

SP500=pd.read_csv("sp500.csv",header=None)
SP500.head()

image.png

for x in SP500.iloc[:,0]:
    ticker = yf.Ticker(x)
    tsd = ticker.history(period="1mo")
len(SP500)

image.png

代表的な米国ETF

ETF=['DIA','SPY','QQQ','IBB','XLV','IWM','EEM','EFA','XLP','XLY','ITB','XLU','XLF',
     'VGT','VT','FDN','IWO','IWN','IYF','XLK','XOP','USMV','BAB','GLD',
    'VNQ','SCHH','IYR','XLRE','AGG','BND','LQD','VCSH','VCIT','JNK']

代表的なバイオ・ヘルス株

代表的なバイオ・ヘルス株の銘柄を得るために代表的なバイオ株へ投資しているETFを参考に銘柄を絞り込みます。まず、IBBを参考にします。IBBのホームページに行きます。
https://www.ishares.com/us/products/239699/ishares-biotechnology-etf
つぎにholdingをクリックすると、投資銘柄リストをダウンロードできるボタンがあります。
image.png
左下のDetailed Holdings and Analyticsのボタンを押すと関連ファイルがダウンロードホルダーにダウンロードできます。
IBB_holdings.csv
エクセルでファイルを開いてティカーコードだけを残して、IBB.csvとして保存します。

IBB=pd.read_csv("IBB.csv",header=None)
IBB.head()

image.png

for x in IBB.iloc[:,0]:
    ticker = yf.Ticker(x)
    tsd = ticker.history(period="1mo")
len(IBB)

image.png

代表的な暗号通貨

ccurrency=["BTC-USD","XRP-USD","ETH-USD","LTC-USD","BCH-USD","BNB-USD",
       "EOS-USD","USDT-USD","LINK-USD","TRX-USD","ADA-USD",
       "XLM-USD","XMR-USD","DASH-USD","NEO-USD","IOT-USD",
       "VEN-USD","ETC-USD","XEM-USD","ZEC-USD","XRB-USD","QTUM-USD",
       "BTG-USD","BAT-USD","DOGE-USD"]
Bitcoin USD BTC-USD
Ripple USD XRP-USD
Ethereum USD ETH-USD
Litecoin USD LTC-USD
Bitcoin Cash / BCCUSD BCH-USD
Binance Coin USD BNB-USD
EOS USD EOS-USD
Tether USD USDT-USD
ChainLink USD LINK-USD
Tronix USD TRX-USD
Cardano USD ADA-USD
Stellar USD XLM-USD
Monero USD XMR-USD
DigitalCash USD DASH-USD
NEO USD NEO-USD
IOTA USD IOT-USD
Vechain USD VEN-USD
Ethereum Classic USD ETC-USD
NEM USD XEM-USD
ZCash USD ZEC-USD
Nano USD XRB-USD
QTUM USD QTUM-USD
Bitcoin Gold USD BTG-USD
Basic Attention Token USD BAT-USD
Dogecoin USD DOGE-USD

さて、重要なことをまだ説明していません。それはデータを分析することで何が得られるのかという点です。多くの人は何か理論的な確証を得て効果的で効率の良い投資ができるのではと考えていませんか?実はそのような理論も事実もありません。あるのは株価の過去の動きのパターンを知ることができるということだけです。ではなぜパターンが大事なのでしょうか?それはあなた自身のリスク許容能力をつかむためです。株式を売らずに持ち続けることは簡単なことではありません。株価が下落すれば、すぐに売りたくなってしまいます。でもそれでは効率的な投資にはなりません。そこであなたがどの程度の下落に「どきどき」しないで耐えられるのかをまずつかむ必要があります。そしてそのレベルを、パターンを収益率/リスクで測ろうとしているのです。そして、それがつかめたら、同じパターンをもつ株をまず探して、そのリストから分散投資するための銘柄を選べばいいのです。そのために統計分析が必要なのです。決して、理論的な背景を探して、それをよりどころに投資をするからではありません。「知的ゲーム」は危険な「遊び」です。

参考

Python3ではじめるシステムトレード【第2版】環境構築と売買戦略

「画像をクリックしていただくとpanrollingのホームページから書籍を購入していただけます。

「画像をクリックしていただくとpanrollingのホームページから書籍を購入していただけます。」

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
152