Python
Finance
DataScience
pandas-datareader
SystematicTrading

Yahoo Finance USからナスダック100の銘柄をダウンロードしてリスクとリターンの関係を見た

Yahoo Finance USからナスダック100に指定されている銘柄をダウンロードしてリスクとリターンの関係を見てみました。

ナスダックは米国の代表的な株式市場で3000銘柄以上が上場されています。時価総額は約900兆円で日本の600兆円をナスダックだけでしのぎます。ナスダック総合指数はこれらの株式から算出される株価指数ですが、それと同じような動きをするナスダック100はその中から流動性の高いものが構成銘柄として選ばれています。銘柄には金融機関の株が含まれないのが特徴です。ナスダック100といっても100以上の銘柄があります。そのうち2500日以上の調整終値(Adj Close)が手に入る銘柄について年率換算した収益率とボラティリティを計算して、プロットして見ました。

ナスダック100は結構銘柄が毎年入れ替わります。年に10から20銘柄程度が変更されます。ナスダック市場がいかに活発化が分かります。

import matplotlib.pylab as plt

import seaborn as sns
import pandas_datareader.data as web
import numpy as np
import pandas as pd

NDX=['AAL','AAPL','AMD','ALGN','ADBE','ADI','ADP','ADSK','ALXN','AMAT',
'AMGN','AMZN','ASML','ATVI','BIDU','BIIB','BMRN','BKNG','AVGO','CDNS',
'CELG','CERN','CHKP','CMCSA','COST','CSCO','CSX','CTAS','CTRP','CTSH',
'CTXS','DLTR','EA','EBAY','EXPE','FAST','FB','FISV','FOX','FOXA',
'GILD','GOOG','GOOGL','HAS','HSIC','HOLX','IDXX','ILMN','INCY','INTC',
'INTU','ISCA','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','SYMC',
'SNPS','SIRI','SWKS','SYMC','TMUS','TTWO','TSLA','TXN','KHC','ULTA',
'UAL','VRSN','VRSK','VRTX','WBA','WDC','WLTW','WDAY','WYNN','XEL']
m=[]#それぞれの株価の年率換算平均のデータを保存
v=[]#それぞれの株価の年率換算した標準偏差を保存
for i in range(len(NDX)):
tsd=web.DataReader(NDX[i], "yahoo",'2009/1/1')#株価データのダウンロード
if len(tsd)>2500:
lntsd=np.log(tsd.iloc[:,5])#データの自然対数を取る
m.append((lntsd.diff().dropna().mean()+1)**250-1)
v.append(lntsd.diff().dropna().std()*np.sqrt(250))
v_m=pd.DataFrame({'v':v,'m':m})
sns.jointplot(x='v',y='m',data=v_m)

image.png

ボラティリティとリターンの間にはそれなりの関係があり、この場合には相関は0.46 (pearsonr)です。そのp-値はほぼゼロです(p=2.1e-06)。

この値は時期とデータの算出期間により大きく変わります。試してみてください。また、計算した値はあくまでも平均値(期待値)ですから、これよりもリターンもボラティリティ高くなりますし、低くもなります。特に低くなる可能性は大きいので注意しましょう。理論的には平均値からの上昇と下落の乖離は同じ程度と考えますが、多くの場合ファットテイルといって下落の確率のほうが高くなります。

sns.jointplot(x='v',y='m',data=v_m,kind="kde", space=0, color="g")

とすると別のグラフが描けます。こちらのほうが中心がどこになるのかが分かります。

image.png

ボラティリティが高ければリターンが高そうだという結果をグラフは示していますが、下落のリスクも大きいことを忘れないようにしましょう。

追記:2019年1月よりYahoo Financeよりデータをダウンロードしていますが、徐々にうまくダウンロードできない場合が増え始めています。まだ、このサービスは公式発表されていないので、試験段階だと思います。ダウンロードするタイミングによってどの銘柄がダウンロードできないかが変わりますので、アクセス数の影響かもしれません。また特定の銘柄はダウンロードができなくなっています。このような銘柄はWEBからもダウンロードできません。

参考

「Python3ではじめるシステムトレード」(パンローリング)

「タートル流投資の魔術](徳間書店)

Pandas datareader (https://pandas-datareader.readthedocs.io/en/latest/)

「Yahoo Finance USから株価をダウンロードしてみた」(https://qiita.com/innovation1005/items/5be026cf7e1d459e9562)

「Yahoo Finance us からダウ工業株30種平均に採用されている銘柄をダウンロードしてリターンとリスクをみる」(https://qiita.com/innovation1005/items/199df28af6fc0d60a4b0)