前回の続きで、スポット購入する株の検討です。宝くじドリーム枠の検討です。
BTCと相関性の高いTOP10銘柄と、銘柄の抽出方法も紹介しています。
宝くじ枠としては、ビットコインと連動性が高い銘柄の購入を考えています。
なぜビットコイン銘柄を買うのか
ビットコインそのものに投資するより税金面でメリットがあるからです。
株式は分離課税で、利益に対し所得税・住民税あわせて20.315%税金がかかりますが、ビットコインの場合、雑所得に分類され総合課税となります。所得にもよりますが税金が高くなってしまいます。
もしビットコインと同じ動きをする株があるのなら、ビットコインの代わりに購入しておけば、利益が出たときの税金が安く済みます。また、損失が出た時も、他の株や投信の利益で相殺できます。
以前も疑似ビットコインとしてMSTRを保有していたのですが、ビットコイン上昇時に株価が上がらなかったため決済してしまっていました。
連動性の高い株の抽出方法
ビットコイン関連銘柄としては、MSTRの他、MARA, RIOT, TSLA, CLSK, BTBT, SQ, CAN, EBON, COIN, ICE, SI, BLK, DAPP等があげられます。以前MSTRとMARA, RIOTを比べたときは、MARAが良さそうな感じでした。
見た目の感覚での判断だったので、今回は統計的に相関性の高いものを抽出することにしました。やり方としては、米国株のヒストリカルデータをダウンロードし、各銘柄に対しBTCとの相関係数を計算し、一番値の高い銘柄を選択するという方法です。
ヒストリカルデータのダウンロードや相関係数の計算にはPythonのpandas_datareaderを使うと便利です(便利でした)。
ただ、作業を始めてみたら、pandas_datareaderがエラーしてヒストリカルデータが入手できない!?
急遽別の方法、Alpha Vantage APIを使用することにしました。
Alpha Vantage APIの使用方法
Alpha Vantage APIは、https://www.alphavantage.co/support/#api-key で無料のAPIキーを入手して使用します。以下はヒストリカルデータをダウンロードしたときのPythonコードです。
import requests
import time
TIC = [ダウンロードしたいTickerコードのリスト]
TIC.sort()
api_key = "入手したAPI"
try:
HIST
except NameError:
HIST = {}
for i in range(len(TIC)):
key = TIC[i]
if key in HIST:
print("Skip Loading %s ... " % (key))
continue
print("Loading %s ... " % (key))
url = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=%s&apikey=%s" % (key, api_key)
r = requests.get(url)
HIST[key] = r.json()
time.sleep(12)
url = "https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_DAILY&symbol=BTC&market=CNY&apikey=%s" % (api_key)
r = requests.get(url)
btc = r.json()
Alpha Vantage APIには、1分間で5回までのアクセス制限と、1日500回までのダウンロード制限があります。ですので1銘柄ダウンロードするたびに12秒Waitをかけています。ヒストリカルデータは日足で100日分となっています。
次に、ダウンロードしたヒストリカルデータを使って相関係数を計算していきます。
※ かなり冗長なコードですが、計算結果が得られることを優先しています。
import numpy as np
import math
from operator import itemgetter
x=[]
y=[]
res = []
for key in TIC:
if len(HIST[key])==1 :
continue
x=[]
y=[]
d=-1
for i in HIST[key]["Time Series (Daily)"]:
d=d+1
if d % 1 != 0 :
continue
y.append(float(HIST[key]["Time Series (Daily)"][i]['5. adjusted close']))
x.append(float(btc['Time Series (Digital Currency Daily)'][i]['4b. close (USD)']))
x.reverse()
y.reverse()
x2=[]
y2=[]
for i in range(len(x)):
if i==0 :
continue
x2.append(math.log(x[i]/x[i-1]))
y2.append(math.log(y[i]/y[i-1]))
coef = np.corrcoef(np.array(x2), np.array(y2))
res.append([key, coef[0][1]])
for k in (sorted(res, key=itemgetter(1), reverse=True)):
print("%s %f" % (k[0], k[1]))
これで相関係数が高い銘柄順にソートされて出力されます。
BTCと相関性の高い銘柄Top10
ダウンロード回数の制限やWaitの制限があるため、さすがに全銘柄というわけにはいかず、S&P500、ダウ、Nasdaq100、主要ETF、ビットコイン関連銘柄の合計605銘柄に絞って相関係数を計算しました。
※ これでも制限により2日にわけてのダウンロード、データ取得に2時間かかります。
以下が上位10銘柄になります。
銘柄 | 相関係数 | ボラティリティ |
---|---|---|
MSTR | 0.6456 | 0.82 |
DAPP | 0.6212 | 0.58 |
RIOT | 0.5412 | 0.94 |
MARA | 0.5363 | 0.94 |
COIN | 0.5358 | 0.58 |
CAN | 0.4741 | 1.13 |
ASML | 0.3915 | 0.28 |
BTBT | 0.3732 | 1.81 |
CLSK | 0.3729 | 0.83 |
EBON | 0.3622 | 0.96 |
605銘柄網羅的に計算しても、見事にビットコイン関連銘柄ばかりで上位を独占しました。
そしてなんと、、MSTRがトップでした。
相関係数は思ったより低いです。0.8くらいはあるものと思ってたのですが。
2番手のDAPPはビットコイン銘柄を集めたETFで妥当なところだと思います。
残念ながら利用しているSBI証券では買えないです。
Top10で唯一ASMLだけがビットコイン銘柄以外からの選出です。結果の妥当性判断のためにボラティリティも算出するようにしたところ、ASMLのみ低く、他はビットコイン並みに高くなっていました。たまたまASMLは対象期間似た動きをしたのでしょう。
購入予定銘柄
ということで、MSTRを買い戻すことにします。。
前に売ったときが691.95で今のレートが614.29に下がってるのでラッキーでした。
ボリューム的には $5000程度、8株の予定です。
コメント