LoginSignup
6
19

Python3ではじめるシステムトレード:新型コロナで見ておくべきバイオ・ヘルス株 2021/2/2 update

Last updated at Posted at 2020-04-24

新型コロナウイルスに影響を受ける世界で、何が社会への貢献になるのだろうと考えたことはありませんか。ワクチン開発とか、治療薬の開発が注目を浴びています。特に、ワクチン開発においては今までと違う方法で開発が行われていて、コロナ禍だけではなく、今後も注目されています。また、ワクチンを世界にくまなく配布することを考えると、ワクチン開発ベンチャーだけではなく、大手製薬会社、医薬品一般を扱う企業の役割が注目されます。

世界の製薬・医薬品会社

製薬・医薬・ワクチン開発に関わる業界とそれに関連する株式市場の全体像をつかみます。

世界の製薬会社トップテン(売上高ベース2019年12月決算)

会社 国籍 株価コード
1 ロッシュ スイス RHHBY
2 ファイザー 米国 PFE
3 ノバルティス スイス NVS
4 メルク 米国 MRK
5 GSK 英国 GSK
6 J&J 米国 JNJ
7 サノフィ― フランス SNY
8 アッヴィ 米国 ABBV
9 武田薬品工業 日本 TAK
10 ブリストル 米国 BMY
参考:https://answers.ten-navi.com/pharmanews/18365/
その他参考:https://www.value.today/world-top-companies/health-care

まずは株価をダウンロードしてグラフにしてみましょう。最初に準備をします。

Python3を用いてデータをダウンロードするためには、jupyter notebookとpandas-datareaderがお勧めです。jupyter notebookのインストールについてはPython3ではじめるシステムトレード:Jupyter notebookのインストールを参考にしてください。ここにpandas-datareaderのインストールの説明もあります。また、Yahoo Finance USから株価をダウンロードしてみたを参考にしてください。

# 初期化
import matplotlib.pyplot as plt #描画ライブラリ
import pandas_datareader.data as web #データのダウンロードライブラリ
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller
TOP10=['RHHBY','PFE','NVS','MRK','GSK','JNJ','SNY','ABBV','TAK','BMY']
i=1
for asset in TOP10:
    tsd = web.DataReader(asset,"yahoo",'1980/1/1').dropna()#jpy
    ts=tsd.loc[:,'Adj Close']/tsd.iloc[0,5]
    np.log(ts).plot(label=str(asset))
    if i==5:
        plt.legend()
        plt.show()
        i=0
    i+=1
if i!=1:
    plt.legend()
    plt.show()      

image.png

株価は対数を取っています。対数を取る理由は株価の桁上がりによる直近の株価の上下動が誇張されてしまうことを避けるためにです。

多くの企業の株価が右肩上がりであることが分かります。

バイオ・ヘルス関連EFT

米バイオ・ヘルスセクターの大まかな傾向をつかむために、それぞれの上場投資信託を見てみましょう。

IBB

米国で有名なバイオ関連銘柄に投資するETF(上場投資信託)です。 

tsd = web.DataReader("ibb","yahoo","1990/1/4").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']/tsd.iloc[0,5]).plot(label='with dividend')
np.log(tsd.loc[:,'Close']/tsd.iloc[0,3]).plot(label='close')
plt.legend()
ibb=tsd

image.png

image.png

image.png

出所:https://www.blackrock.com/jp/individual/ja/products/239699/ishares-nasdaq-biotechnology-etf
表の見方ですが、保有比率は保有株数が一定であっても日々の株価の動きにより変化します。

XLV

米国で有名なヘルスケア関連のETFはXLVです。

tsd = web.DataReader("xlv","yahoo","1990/1/4").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']/tsd.iloc[0,5]).plot(label='with dividend')
np.log(tsd.loc[:,'Close']/tsd.iloc[0,3]).plot(label='close')
plt.legend()
xlv=tsd

image.png

青が配当込みの収益率なので配当の影響を理解できます。IBBとの大きな違いは青と橙の推移です。IBBはXLVより配当が少ないです。
image.png

image.png

image.png

出所:https://www.ssga.com/jp/ja/individual/etfs/funds/us-the-health-care-select-sector-spdr-fund-xlv

長期投資の株価の見方

  • 保有
  • 利益獲得目的の売買はしない。
    • 損切は決してしない
    • 利益が出るまで売却しない

ディフェンシブ銘柄

景気動向に左右されにくい銘柄をディフェンシブ銘柄といいます。医薬品株は典型的なディフェンシブ銘柄です。その他に、生活必需品である食品や社会インフラである電力・ガス、鉄道、通信などの企業がディフェンス銘柄になります。

評価の仕方

長期投資の銘柄分析として配当を考慮することと金利水準を考慮することが大事です。また、価格の推移を可視化するときには価格の対数を取る必要があります。

そこでfredから米国金利をダウンロードして、配当込みの株価をus yahoo financeからダウンロードします。

そして株価の配当込み利回りから金利を引くことで長期投資の目安とします。

fredから1年金利のダウンロード

金利を可視化した後に、あとで使いやすいように250日でわって、1日のリターンに変換しておきます。

ror = web.DataReader("DGS1","fred","1980/1/4")#jpy
ror.plot()
ror = ror/250/100#jpy

image.png

可視化

つぎにIBBを可視化してみましょう。

dtsd=ibb.pct_change()
tmp=pd.concat([dtsd.loc[:,'Adj Close'],ror],axis=1).dropna()
tmp['adj']=(1+tmp.iloc[:,0]/(1+tmp.iloc[:,1]))
tsda=tmp.iloc[:,2].cumprod()
ts=np.log(tsda)
ts.plot()

image.png

つぎにXLVについて可視化してみましょう。

dtsd=xlv.pct_change()
tmp=pd.concat([dtsd.loc[:,'Adj Close'],ror],axis=1).dropna()
tmp['adj']=(1+tmp.iloc[:,0]/(1+tmp.iloc[:,1]))
tsda=tmp.iloc[:,2].cumprod()
ts=np.log(tsda)
ts.plot()

image.png

つぎにそれぞれのETFの構成銘柄の株価の推移を見てみましょう。

IBBのトップ10構成銘柄

つぎにコードは長期投資の分析のために、株価は金利で調整してあります。また、株価は対数を取っています。

BIO10=['GILD','VRTX','AMGN','BIIB','REGN','ILMN','SGEN','ALXN','AZN','MRNA']

def LongtermInvest(PORT,ror,start):
    i=1
    for asset in PORT:
        tsd = web.DataReader(asset,"yahoo",start).dropna()#jpy
        dtsd=tsd.pct_change()
        tmp=pd.concat([dtsd.loc[:,'Adj Close'],ror],axis=1).dropna()
        tmp['adj']=(1+tmp.iloc[:,0]/(1+tmp.iloc[:,1]))
        r=(tmp.adj.mean())**252-1
        tsda=tmp.iloc[:,2].cumprod()
        ts=np.log(tsda.dropna())
        ts.plot(label=str(asset))
        v=np.std(ts.diff())*np.sqrt(252)
        nc=adfuller((ts),regression='nc')[1:3]
        c=adfuller((ts),regression='c')[1:3]
        ct=adfuller((ts),regression='ct')[1:3]
        ctt=adfuller((ts),regression='ctt')[1:3]
        print("{0:5s} nc {1:2.2f} {2:3d}".format(asset,nc[0],nc[1]),
            "c {0:2.2f} {1:3d}".format(c[0],c[1]),
            "ct {0:2.2f} {1:3d}".format(ct[0],ct[1]),
            "ctt {0:2.2f} {1:3d}".format(ctt[0],ctt[1]),
            "vol {0:2.2f} ror {1:2.2f} ror/vol {2:2.2f}".format(v,r,r/v))
        
        if i==5:
            plt.legend()
            plt.show()
            i=0
        i+=1
    if i!=1:
        plt.legend()
        plt.show()        

image.png

image.png

XLVのトップ10銘柄

HLT10=['JNJ','UNH','MRK','PFE','ABBV','ABT','TMO','DHR','MDT','LLY']
LongtermInvest(HLT10,ror,'2010/1/4')

image.png
image.png

チャートから分かるように、IBBを構成する銘柄の株価の上下動は激しく、XLVは比較的安定しています。

数値化(時系列の性質、要約統計量)

株価のデータのように時間の経過にしたがって測定されたデータを時系列データといいます。その性質を統計的に表現する方法はいろいろあるのですが、その1つとして、それぞれの値動きがランダムであるかどうかを判断するための指標があります。価格がランダムに動いているのであれば、将来の株価がどのように推移するのか予測不可能となってしまいます。価格がランダムに動くときそれはランダムウォークにしたがうといいます。価格がランダムに動く限りにおいては、将来の株価の予測は不可能です。ですから株式の長期投資には不可欠な指標です。このよう時系列の評価の仕方としてディッキーフラー検定があります。statmodelsではadfullerという関数で計算ができます。これは4つのタイプがあります。

  • ドリフト無し('nc'):確定的トレンド無しランダムウォーク
  • ドリフト付き('c'):確定的トレンド付きランダムウォーク
  • ドリフト付き+トレンド付き('ct'):バブルのような加速度的確定的トレンド付きランダムウォーク
  • ドリフト付き+加速トレンド付き('ctt'):バブルのような強い加速度的確定的トレンド付きランダムウォーク

少しややこしいのは結果(p-値)が1に近い数値であるとランダムウォークであるかどうかが判断できなくなります。また、0に近づくに従いランダムウォークであることは否定されます。以下の表の最初は株価コード、nc,c,ct,cttは上述の通り。ローマ字の後の最初の数字はp-値,次の数字は計算に用いた遅延株価の数です。

また、volは年率換算の対数株価の差の標準偏差、rorは年率換算の株価収益率です。ror/volはその比率です。ランダムウォークであったからといって投資対象になるわけではありませんが、価格の上下動は大きくなります。

IBBのトップ10構成銘柄

GILD nc 0.77 2 c 0.60 2 ct 0.94 2 ctt 0.40 2 vol 0.29 ror 0.16 ror/vol 0.54
VRTX nc 0.82 8 c 0.74 8 ct 0.04 8 ctt 0.10 8 vol 0.45 ror 0.30 ror/vol 0.68
AMGN nc 0.96 9 c 0.81 9 ct 0.35 9 ctt 0.05 9 vol 0.25 ror 0.20 ror/vol 0.81
BIIB nc 0.82 3 c 0.17 3 ct 0.81 3 ctt 0.12 3 vol 0.38 ror 0.26 ror/vol 0.67
REGN nc 0.94 5 c 0.12 5 ct 0.84 5 ctt 0.87 5 vol 0.41 ror 0.42 ror/vol 1.02
ILMN nc 0.93 0 c 0.63 0 ct 0.34 0 ctt 0.58 0 vol 0.42 ror 0.39 ror/vol 0.94
SGEN nc 0.94 2 c 0.77 2 ct 0.04 2 ctt 0.11 2 vol 0.43 ror 0.42 ror/vol 0.96
ALXN nc 0.89 4 c 0.08 4 ct 0.44 4 ctt 0.72 4 vol 0.37 ror 0.29 ror/vol 0.79
AZN nc 0.91 8 c 0.87 8 ct 0.10 5 ctt 0.20 5 vol 0.24 ror 0.14 ror/vol 0.61
MRNA nc 0.96 0 c 0.99 0 ct 0.74 0 ctt 0.64 0 vol 0.82 ror 2.82 ror/vol 3.45

XLVのトップ10構成銘柄

JNJ nc 0.99 13 c 0.91 13 ct 0.13 13 ctt 0.07 13 vol 0.17 ror 0.14 ror/vol 0.79
UNH nc 1.00 14 c 0.90 14 ct 0.04 14 ctt 0.09 14 vol 0.26 ror 0.30 ror/vol 1.13
MRK nc 0.94 16 c 0.85 16 ct 0.08 16 ctt 0.11 16 vol 0.21 ror 0.13 ror/vol 0.63
PFE nc 0.92 25 c 0.63 25 ct 0.43 25 ctt 0.02 25 vol 0.20 ror 0.13 ror/vol 0.63
ABBV nc 0.90 0 c 0.42 0 ct 0.07 0 ctt 0.19 0 vol 0.29 ror 0.24 ror/vol 0.84
ABT nc 1.00 9 c 0.99 9 ct 0.22 9 ctt 0.23 9 vol 0.21 ror 0.21 ror/vol 0.98
TMO nc 1.00 13 c 0.99 13 ct 0.34 17 ctt 0.44 17 vol 0.24 ror 0.28 ror/vol 1.16
DHR nc 1.00 7 c 0.99 7 ct 0.35 7 ctt 0.02 7 vol 0.25 ror 0.29 ror/vol 1.18
MDT nc 0.94 7 c 0.94 7 ct 0.03 7 ctt 0.03 7 vol 0.23 ror 0.15 ror/vol 0.66
LLY nc 1.00 13 c 0.99 13 ct 0.32 13 ctt 0.50 13 vol 0.23 ror 0.25 ror/vol 1.08

ランダムウォークであるかどうかは期間に大きく影響を受けます。短いほうがランダムウォークが否定される頻度は多くなります。

世界の製薬会社トップ10

TOP10=['RHHBY','PFE','NVS','MRK','GSK','JNJ','SNY','ABBV','TAK','BMY']
LongtermInvest(TOP10,ror,'1980/1/4')

image.png
image.png

RHHBY nc 0.97 15 c 0.65 15 ct 0.34 13 ctt 0.55 13 vol 0.23 ror 0.14 ror/vol 0.59
PFE nc 0.99 4 c 0.36 4 ct 0.84 4 ctt 0.85 4 vol 0.27 ror 0.17 ror/vol 0.62
NVS nc 0.95 18 c 0.83 18 ct 0.19 18 ctt 0.12 18 vol 0.22 ror 0.10 ror/vol 0.45
MRK nc 0.99 21 c 0.33 17 ct 0.81 17 ctt 0.93 17 vol 0.26 ror 0.16 ror/vol 0.60
GSK nc 0.99 10 c 0.00 10 ct 0.41 10 ctt 0.53 10 vol 0.27 ror 0.18 ror/vol 0.65
JNJ nc 1.00 9 c 0.63 9 ct 0.64 9 ctt 0.48 9 vol 0.23 ror 0.16 ror/vol 0.70
SNY nc 0.64 6 c 0.39 6 ct 0.13 6 ctt 0.26 6 vol 0.27 ror 0.09 ror/vol 0.32
ABBV nc 0.90 0 c 0.42 0 ct 0.07 0 ctt 0.19 0 vol 0.29 ror 0.24 ror/vol 0.84
TAK nc 0.01 4 c 0.11 4 ct 0.07 4 ctt 0.02 4 vol 0.23 ror 0.01 ror/vol 0.03
BMY nc 0.99 7 c 0.34 7 ct 0.47 7 ctt 0.84 7 vol 0.27 ror 0.16 ror/vol 0.60

世界のトップ10ワクチン製造者

ワクチンの開発には膨大な費用と時間がかかります。そのリスクに耐えることのできる製薬メイカーはファイザー、メルク、グラクソ・スミスクライン、サノフィの4社だけです。

コード 製薬会社 国籍 正社員数
1. GSK グラクソ・スミスクライン株式会社 英国 99437
2. MRK メルク 米国 71000
3. SNY サノフィ フランス 100409
4. PFE ファイザー 米国 88300
5. NVAX ノババックス 米国 165
6. EBS エマージェントバイオソリューソンズ 米国 1834
7. CSLLY CSL Limited オーストラリア 25031
8. INO イノビオファーマシューティカルズ 米国 190
9. バーバリアンノルディック ノルウェー
10. TAK 田辺三菱製薬 日本 47495
VAC10=['GSK','MRK','SNY','PFE','NVAX','EBS','INO','TAK']
LongtermInvest(VAC10,ror,'1980/1/4')

image.png
image.png

GSK nc 0.99 10 c 0.00 10 ct 0.41 10 ctt 0.53 10 vol 0.27 ror 0.18 ror/vol 0.65
MRK nc 0.99 21 c 0.33 17 ct 0.81 17 ctt 0.93 17 vol 0.26 ror 0.16 ror/vol 0.60
SNY nc 0.64 6 c 0.39 6 ct 0.13 6 ctt 0.26 6 vol 0.27 ror 0.09 ror/vol 0.32
PFE nc 0.99 4 c 0.36 4 ct 0.84 4 ctt 0.85 4 vol 0.27 ror 0.17 ror/vol 0.62
NVAX nc 0.02 3 c 0.09 3 ct 0.25 3 ctt 0.48 3 vol 0.97 ror 0.61 ror/vol 0.63
EBS nc 0.79 4 c 0.78 4 ct 0.03 3 ctt 0.03 3 vol 0.49 ror 0.32 ror/vol 0.65
INO nc 0.47 6 c 0.09 6 ct 0.42 6 ctt 0.20 6 vol 1.02 ror 0.60 ror/vol 0.59
TAK nc 0.01 4 c 0.11 4 ct 0.07 4 ctt 0.02 4 vol 0.23 ror 0.01 ror/vol 0.03

LongtermInvest(VAC10,ror,'2010/1/4')

image.png
image.png

GSK nc 0.60 14 c 0.33 14 ct 0.17 19 ctt 0.23 19 vol 0.19 ror 0.06 ror/vol 0.32
MRK nc 0.94 16 c 0.85 16 ct 0.08 16 ctt 0.11 16 vol 0.21 ror 0.13 ror/vol 0.63
SNY nc 0.48 1 c 0.46 1 ct 0.19 1 ctt 0.25 1 vol 0.24 ror 0.08 ror/vol 0.33
PFE nc 0.92 25 c 0.63 25 ct 0.43 25 ctt 0.02 25 vol 0.20 ror 0.13 ror/vol 0.63
NVAX nc 0.14 3 c 0.60 3 ct 0.91 3 ctt 0.99 3 vol 1.06 ror 0.86 ror/vol 0.81
EBS nc 0.96 20 c 0.94 20 ct 0.53 20 ctt 0.30 20 vol 0.41 ror 0.30 ror/vol 0.74
INO nc 0.15 9 c 0.47 9 ct 0.57 9 ctt 0.80 9 vol 0.83 ror 0.60 ror/vol 0.71
TAK nc 0.01 4 c 0.11 4 ct 0.07 4 ctt 0.02 4 vol 0.23 ror 0.01 ror/vol 0.03

他の主な市場との比較

バイオ株IBB、ヘルス株XLV、ハイテク株(ナスダック総合)QQQ、スタンダードプアーズ500SPYと比べてみました。

COMP=['IBB','XLV','QQQ','SPY']
LongtermInvest(COMP,ror,'2003/1/4')

image.png
IBB nc 0.99 18 c 0.92 18 ct 0.68 18 ctt 0.74 18 vol 0.24 ror 0.16 ror/vol 0.67
XLV nc 1.00 21 c 0.98 21 ct 0.83 21 ctt 0.66 21 vol 0.17 ror 0.11 ror/vol 0.65
QQQ nc 1.00 22 c 0.98 22 ct 0.86 22 ctt 0.03 27 vol 0.21 ror 0.18 ror/vol 0.83
SPY nc 0.98 32 c 0.94 32 ct 0.79 32 ctt 0.28 32 vol 0.19 ror 0.11 ror/vol 0.60

参考文献

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

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

「シュワッガーのテクニカル分析」
6
19
0

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
6
19