株式市場を理解する1つの良い方法は過去の株価を取得してチャートを描いてみたり、統計分析をしてみることです。株価の動きを経済変数と比較してみるなどということも大事です。このような環境は海外のほうが日本よりも充実しています。
Python3を用いてデータをダウンロードするためには、jupyter notebookとpandas-datareaderがお勧めです。jupyter notebookのインストールについてはPython3ではじめるシステムトレード:Jupyter notebookのインストールを参考にしてください。ここにpandas-datareaderのインストールの説明もあります。
注1:
2017年春ごろからフリーでダウンロードできる株価データが世界的に減少する傾向が続いていました。Yahoo Financeはフリーで株価を提供してくれる重要なサイトでしたが、2017年5月ごろよりサービスに支障をきたすようになりました。しかし2017年年末ごろより、まだ、公式には発表されていませんが、データの提供を再開しているようです。Yahooはサービスの再開に際してデータを修正したようです。大体リターンが下がる傾向にありますが、上がったものもあります。以前から言われているようにYahooのデータは必ずしも信用できるとは限らないということです(これはyahooのデータに限りません。どのデータソースも同じです)。しかし、今回改善されたようです(チェックはしてません)。あくまでイメージです。
2021/11/9に一部のグラフをアップデート
主なグラフを2022/1/28日にアップデート
2022/12/28 yahoo finance はAPIのサービスを中止しています。
yfinance(https://pypi.org/project/yfinance/)
yahoo_fin(http://theautomatic.net/yahoo_fin-documentation/)
Rapid_API(https://rapidapi.com/apidojo/api/yh-finance)
の使用をお勧めします。
そのうちに本記事もアップデートします。
pandas-datareaderの使い方はつぎのとおりです。
DataReader('株価コード','データの出所','ダウンロード開始日','ダウンロード終了日')
株価コードについて大文字小文字の影響を受けませんが、データの出所に関してはケースセンシティブですのでお気を付けください。'yahoo'を’YAHOO'と入力したり、'fred'を'FRED'と入力するとデータはダウンロードできません。また、ダウンロードの開始日と終了日はディフォルトでは省略可能です。しかし、長い期間のデータをダウンロードするためには開始日を指定することをお勧めします。開始日は銘柄により異なりますので、試行錯誤で試してみる必要があります。終了日はディフォルトでダウンロード日となります。また、開始日の目安として'yahoo'では'1980/1/1'とすることをおすすめします。'fred'では1949/5/4'から試してみるのも一つの手です。
また、日付を1つしか入れないと、その日付はダウンロード開始日と認識されます。よって、ダウンロード終了日はディフォルト扱いになり、直近までデータはダウンロードされます。
US Yahoo Financeのデータ構成
- Open:始値
- High:高値
- Low:安値
- Close:終値 - 分割調整後
- Volume:出来高
- Adj Close:配当込み分割調整後株価
株価データの可視化
代表的な米国ETF(上場投資信託)
ETFとは上場投資信託のことで手数料の点で株式と同じ手数料で売買ができるために、通常の投資信託よりも費用の面で有利です。
では実際にダウンロードしてみましょう。
%matplotlib inline
import matplotlib.pyplot as plt #描画ライブラリ
import pandas_datareader.data as web #データのダウンロードライブラリ
tsd = web.DataReader("usmv","yahoo","1980/1/1").dropna()#jpy
tsd.loc[:,'Adj Close'].plot()
ダウンロードした株価は米国の上場投資信託(ETF)のリスクパリティ-最小分散ポートフォリオ戦略を用いたusmvです。
このETFは安定した収益の獲得を目指し、最小分散ポートフォリオというアルゴリズムを用いて運用されています。
ポートフォリの詳細はつぎURLよりExcel形式でダウンロード可能です。
https://www.blackrock.com/us/individual/products/239695/ishares-msci-usa-minimum-volatility-etf
ダウジョーンズ
tsd = web.DataReader("dia","yahoo","1980/1/1").dropna()#jpy
tsd.loc[:,'Adj Close'].plot()
ナスダック100
tsd = web.DataReader("qqq","yahoo","1980/1/1").dropna()#jpy
tsd.loc[:,'Adj Close'].plot()
QQQはInvescoが運用するナスダック100連動のETFですが、そのポートフォリオの詳細はつぎのURLよりExcel形式でダウンロード可能です。
https://www.invesco.com/us/financial-products/etfs/holdings?ticker=QQQ
長期投資を考える場合には株価の対数を取ってグラフにする必要があります。そうしないと株価の桁が増えたときに、上がり具合、下がり具合が強調されてしまいます。
import numpy as np
tsd = web.DataReader("qqq","yahoo","1980/1/1").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']).plot()
イメージがまったく異なるものになります。
日経平均株価
日本の代表的な株価指数である日経平均株価(日経225)もダウンロード可能です。
tsd = web.DataReader("^N225","yahoo","1970/1/4").dropna()#jpy
tsd.loc[:,'Adj Close'].plot()
アベノミクス(2013年)以降の指数をダウンロードしてみましょう。
tsd.loc['2013':,'Adj Close'].plot()
主な株価指数の構成銘柄
代表的なナスダック100指数を構成する銘柄
アメリカ経済を牽引する銘柄群です。
NDX=['AAL','AAPL','AMD','ALGN','ADBE','ADI','ADP','ADSK','ALXN','AMAT',
'AMGN','AMZN','ASML','ATVI','BIDU','BIIB','BMRN','BKNG','AVGO','CDNS',
'CERN','CHKP','CMCSA','COST','CSCO','CSX','CTAS','CTSH',
'CTXS','DLTR','EA','EBAY','EXPE','FAST','FB','FISV','FOX','FOXA',
'GILD','GOOG','GOOGL','HAS','HSIC','HOLX','IDXX','ILMN','INCY',
'INTC','INTU','ISRG','JBHT','JD','KHC','KLAC','LBTYB','LBTYA',
'LBTYK','LULU','LILA','LILAK','LRCX','MAR','MCHP','MELI','MNST',
'MSFT','MU','MXIM','MELI','MYL','NTAP','NFLX','NTES','NVDA','NXPI',
'ORLY','PAYX','PCAR','PYPL','PEP','QCOM','REGN','ROST','SBUX',
'SNPS','SIRI','SWKS','TMUS','TTWO','TSLA','TXN','KHC',
'ULTA','UAL','VRSN','VRSK','VRTX','WBA','WDC','WLTW','WDAY','XEL']
代表的なダウ平均株価指数採用銘柄
「ダウ平均」、「ニューヨーク・ダウ」、「ニューヨーク平均株価」などとして親しまれている当指数は、チャールズ・ダウにより考え出され、1884年から算出されています。発表当初は鉄道株が中心でした。19世紀末には変わりゆく経済の姿を受け、1896年から新たなダウ工業株平均の算出が始まりました。その後ダウ工業株30種平均株価を構成する銘柄は時代の流れに合わせて入れ替えが行われています。今現在もっとも古くから採用されている銘柄はエクソンモービルで1928年から採用されています。
現在の構成銘柄は、
DJ=['AAPL','AMGN','AXP','BA','CAT','CRM','CSCO','CVX','DIS','DOW','GS','HD',
'IBM','INTC','JNJ','JPM','KO','MCD','MMM','MRK','MSFT','NKE',
'PG','TRV','UNH','V','VZ','WBA','WMT']
2020年8月31日現在
コード | 銘柄 |
---|---|
AAPL | アップル コンピュータ |
MMGN | アムジェン |
AXP | アメリカン・エキスプレス |
BA | ボーイング |
CAT | キャタピラー |
CRM | セールスフォース・ドットコム |
CSCO | シスコシステムズ |
CVX | シェブロン |
DIS | ウォルト・ディズニー・カンパニー |
DOW | ダウ |
GS | ゴールドマン・サックス |
HD | ホームデポ |
IBM | アイ・ビー・エム コンピューター |
INTC | インテル |
JNJ | ジョンソン・エンド・ジョンソン |
JPM | JPモルガン・チェース |
KO | ザ コカ・コーラ カンパニー |
MCD | マクドナルド |
MMM | スリーエム |
MRK | メルク |
MSFT | マイクロソフト |
NKE | ナイキ |
PG | プロクター・アンド・ギャンブル (P&G) |
TRV | トラベラーズ |
UNH | ユナイテッド・ヘルス |
V | Visa |
VZ | ベライゾン・コミュニケーションズ |
WBA | ウォルグリーン・ブーツ・アライアンス |
WMT | ウォルマート・ストアーズ |
です。 |
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指数はフィラデルフィア連銀による半導体株指数。半導体株の動向に大きな影響がある。
代表的な米国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']
代表的なS&P株
SP100=["AAPL","ABBV","ABT","ACN","AGN","AIG","ALL","AMGN","AMZN","AXP","BA","BAC","BIIB",
"BK","BLK","BMY","BRKB","C","CAT","CHTR","CL","CMCSA","COF","COP","COST","CSCO",
"CVS","CVX","DHR","DIS","DUK","EMR","EXC","F","FB","FDX","FOX","FOXA","GD","GE",
"GILD","GM","GOOG","GOOGL","GS","HAL","HD","HON","IBM","INTC","JNJ","JPM","KHC","KMI",
"KO","LLY","LMT","LOW","MA","MCD","MDLZ","MDT","MET","MMM","MO","MRK","MS","MSFT",
"NEE","NKE","ORCL","OXY","PEP","PFE","PG","PM","PYPL","QCOM","RTN","SBUX",
"SLB","SO","SPG","T","TGT","TXN","UNH","UNP","UPS","USB","UTX","V","VZ","WBA",
"WFC","WMT","XOM"]
代表的なバイオ・ヘルス株
BIO=['GILD','VRTX','AMGN','BIIB','REGN','ILMN','SGEN','ALXN','INCY','BMRN','MRNA',
'ALNY','SYN','NBIX','SRPT','EXEL','IONS','TECH','MYL','ACAD','NKTR','ALKS',
'BLUE','JAZZ','QGEN','NBIX','SAGE','UTHR','ABBV','INO','VXRT']
HLT=['JNJ','UNH','MRK','PFE','ABT','BMY','AMGN','LLY','TMO','MDT','DHR','CVS','BDX',
'VRTX','CI','ANTM','AGN','ISRG','ZTS','CERN','HSIC','HOLX','IDXX','MYL','WBA',
'XRAY','ABBV']
最近の動向については
Python3ではじめるシステムトレード:新型コロナで見ておくべきバイオ・ヘルス株(長期投資と短期投資)
を参照してください。
代表的な暗号通貨
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
さて、重要なことをまだ説明していません。それはデータを分析することで何が得られるのかという点です。多くの人は何か理論的な背景を得られるのではと考えていませんか?実はそのような理由ではありません。あるのは株価の動きのパターンを見極めたいという思いです。ではなぜパターンが大事なのでしょうか?それはあなた自身のリスク許容能力をつかむためです。株式を売らずに持ち続けることは簡単なことではありません。株価が下落すれば、すぐに売りたくなってしまいます。でもそれでは効率的な投資にはなりません。そこであなたがどの程度の下落に「どきどき」しないで耐えられるのかをまずつかむ必要があります。そしてそのレベルを、パターンを収益率/リスクで測ろうとしているのです。そして、それがつかめたら、同じパターンをもつ株をまず探して、そのリストから分散投資するための銘柄を選べばいいのです。そのために統計分析が必要なのです。決して、理論的な理由を探して、それをよりどころに投資をするからではありません。「知的ゲーム」は危険な「遊び」です。
本記事に用いたPythonプログラムコードは https://github.com/innovation1005/qitta_innovation1005 からダウンロード可能です。いつでもデータのアップデートが可能になります。
特にシステムトレードに興味のある方
システムトレードってなに?
Python3ではじめるシステムトレード:新型コロナで見ておくべきバイオ・ヘルス株
statsmodelsによる統計的仮説検定 入門
予測に興味のある方
予測について https://qiita.com/innovation1005/items/76d8a93c261e7d357ab8
経済データのダウンロード
外国為替に興味のある方
外国為替レートについて https://qiita.com/innovation1005/items/f5cef6f6e3d1c97d17d1
高頻度取引について
グロスマン・ミラーモデル(翻訳) https://qiita.com/innovation1005/items/8f3da94f6af3e05fa461
人工知能関連
誰でもわかるニューラルネットワーク:アプリのように動かす人工知能ーテンソルフロープレイグラウン
誰でもわかるニューラルネットワーク:正則化をテンソルフロープレイグラウンドで試してみた
参考

