どの暗号資産が効率よく稼げるか

# はじめに
**暗号資産（仮想通貨）**のビットコインが最高値更新を続けています．

2020年12月16日，ビットコインが2万8千ドル突破しました．今や3万ドルが目前となっています．

ビットコインなどの暗号資産の価格高騰の理由の一つとして，米国の連邦準備制度理事会（FRB）が政策金利をゼロ付近に引き下げ，米ドルを大きく弱体化させている状況があります．

ビットコインなどの暗号資産の発行数には上限があるため，投資家は供給数が上限に達すれば，価値は上昇すると考えています．

本記事では，各暗号資産の投資収益率（ROI）の期待値と分散を計算し，どの暗号資産に投資すれば効率よく稼げるかを検証していきます．







# 暗号資産（仮想通貨）とは
「資金決済に関する法律」で，次の性質をもつものと定義されています．

（1）不特定の者に対して、代金の支払い等に使用でき、かつ、法定通貨（日本円や米国ドル等）と相互に交換できる
（2）電子的に記録され、移転できる
（3）法定通貨または法定通貨建ての資産（プリペイドカード等）ではない

世界で流通している暗号資産の種類は，2,000 以上と言われています．代表的な暗号資産にはビットコイン，イーサリアム，ビットコインキャッシュなどがあります．

暗号資産が注目される理由として，「暗号資産は世界で共通の価値をもっており，そのままどこでも使える」，「円をドルに交換するといった両替コストが必要ない」などがあります．

暗号資産の需要や利用が拡大すれば、暗号資産の価値は上昇します．暗号資産への投資は，上昇を見込んで値上がり益をねらったり，価格の変動が大きい場合は短期トレードで差益をねらったりすることができます．

[参考資料]
[暗号資産（仮想通貨）とは何ですか？｜日本銀行ホームページ](https://www.boj.or.jp/announcements/education/oshiete/money/c27.htm/#:~:text=%E3%80%8C%E6%9A%97%E5%8F%B7%E8%B3%87%E7%94%A3%EF%BC%88%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8%EF%BC%89,%E3%81%A8%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82&text=%E4%BB%A3%E8%A1%A8%E7%9A%84%E3%81%AA%E6%9A%97%E5%8F%B7%E8%B3%87%E7%94%A3,%E3%82%84%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%AA%E3%82%A6%E3%83%A0%E3%81%AA%E3%81%A9%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)
[暗号資産について｜SBI VCトレードホームページ](https://www.sbivc.co.jp/support/cryptocurrency/#:~:text=%E6%9A%97%E5%8F%B7%E8%B3%87%E7%94%A3%E3%81%A8%E3%81%AF%E3%80%81%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88,%E8%B3%87%E7%94%A3%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)

# 投資収益率の期待値と分散
- 投資収益率

どれだけ効率的に儲けたか？を見るための指標として，投資収益率（ROI：Return On Investment）があります．この投資収益率は，

```math
\frac{利益金額}{投資金額}
```

で求めることができます．数値が高いほど，投資金額に対して効率よく稼げていることを意味します．

例えば，「10万円使って5万円儲かる」と「50万円使って5万円儲かる」の例を考えます．まず，前者の方が後者よりも少ない金額で同じ利益を得ているので，前者の方が効率よく稼げていることがすぐにわかると思います．この効率性を表すのが投資収益率で，実際に計算してみると，前者が0.5，後者が0.1となります．このように，投資収益率を比較することでどれだけ効率的に儲けたかがわかります．

- 期待値と分散

$N$個の投資収益率データ$X=(X_1,X_2,...,X_N)$に対して，平均値（期待値）$E[X]$は，

```math
E[X]=\frac{1}{N}(X_1+X_2+\cdots+X_N)
```

で計算することができます．これはただの平均の公式です．

分散$V[X]$は，

```math
V[X]=\frac{1}{N}\sum_{i=1}^N(X_i-E[X])^2
```
で計算することができます．これはただの分散の公式です．

# 分析結果
ある1か月間で，1日ごとに各暗号資産の投資収益率をもとめ，その期待値$E$と分散$V$をもとめます．

今回，検証する暗号資産は以下の22種類です．

```
"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","ETC-USD","XEM-USD","ZEC-USD",
"QTUM-USD","BTG-USD","BAT-USD","DOGE-USD"
```

例えば，"BTC-USD"はビットコイン/米ドル（BTC/USD），"ETH-USD"はイーサリアム/米ドル（ETH/USD）を意味します．

各暗号資産の投資収益率の期待値$E$と分散$V$の計算結果を比較することで，どの暗号資産が効率的に稼げるかを考察していきます．


以下の図は2020年10月の結果です．

2020年10月では，ビットコイン/米ドル（BTC/USD）の投資収益率は，他のどの暗号資産よりも高く，リスク（分散）も他の利益を得ている暗号資産の中では最も小さくなっています．したがって，翌月（11月）のビットコインへの投資は，小さいリスクで，1番高い収益が得られることが期待できることになります．

また，ビットコイン/米ドル（BTC/USD）を除けば，ビットコインキャッシュ/米ドル（BCH/USD）やイーサリアム/米ドル（ETH/USD）も，他の暗号資産に比べ，リスク（分散）に対して，高い投資収益を得られているので，良い投資対象と言えます．

※ ここで，リスクは投資収益率の分散を意味します．一般に投資の世界では，利益を得られる可能性や損をする可能性どちらもリスクといいます．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906836/acf5a310-4317-a829-0252-8b37940ddcb4.png" width=450>




























以下は2020年11月の結果です．

2020年11月では，リップル/米ドル（XRP/USD）の投資収益率の期待値が最も高くなっています．これはリップルの価格が急上昇したからです．1日あたり5%以上の高収益を上げています．

一方，2020年10月では，ビットコイン/米ドル（BTC/USD）が1番の高収益が期待できそうでしたが，リップル/米ドル（XRP/USD）が一番という結果でした．ただ，ビットコイン/米ドル（BTC/USD）のリスクは前月と比べて，大きくなったものの，前月とほぼ同じ収益をあげています．

ビットコイン/米ドル（BTC/USD）はリスクが小さく，収益をあげられますが，11月の結果を見ると，自分がとれるリスクに応じて，より高収益が期待できる暗号資産に目を向けることができます．

その候補として，イーサリアム/米ドル（ETH/USD），クオンタム/米ドル（QTUM/USD），エイダ/米ドル（ADA/USD），リップル/米ドル（XRP/USD）の4つがあります．これら4つのどれに投資すればよいかは，投資家自身の性格によって決まります．

リスクにかなり寛容で，高収益を狙いたい場合は，リップル/米ドル（XRP/USD）が1番良い選択肢といえます．それ以外は，許容できるリスクに応じて，イーサリアム/米ドル（ETH/USD），クオンタム/米ドル（QTUM/USD），エイダ/米ドル（ADA/USD）を順に選ぶことになります．

今回の結果のみで投資対象を考えるとき，上記の4つ以外の暗号資産は選ばれることはありません．それはこの4つの選択肢とそれ以外の選択肢を比べると，今回の4つの選択肢の方が，リスクに対する収益が高いからです．右下にある点より，左上にある点の方がリスクに対する収益が高いです．

したがって，ビットコイン以外の暗号資産に投資することを考えたとき，この4つの選択肢のどれかに投資すべきだと言えます．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906836/7d018878-2774-3659-527f-780fae574945.png" width=450>













以下は2020年12月の結果です．

ビットコイン/米ドル（BTC/USD）の投資収益率の期待値は先月よりも上昇しました．また，リスクは約20と前月とほぼ同じになりました．今回の暗号資産の中で1番リスクが低く，ある程度の収益も得られているので，良い投資先と言えます．また，よりリスクをとって高収益を目指す場合は，ライトコイン/米ドル（LTC/USD）も選択肢の1つとなり得ます．

11月はリップル/米ドル（XRP/USD）の投資収益率の期待値が最も高くなっていましたが，12月では，最も収益率が低い投資対象となってしまいました．これは米証券取引委員会（SEC）が米リップル・ラボを提訴したことにあります．XRPは29日に37％下げ，その1週間後までに60%も下落しました．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906836/d100dbab-3d1d-8746-02ae-9cd8a9c12998.png" width=450>

































# おわりに
ビットコイン/米ドル（BTC/USD）は，10月，11月，12月のどの結果においても，（暗号資産の中で）最もリスクが小さく，投資収益の期待値も高いことがわかりました．

したがって，**とりあえずビットコインに投資しておけば，安定的に暗号資産への投資で稼げる**ということが言えます．

また，イーサリアム/米ドル（ETH/USD），ライトコイン/米ドル（LTC/USD）もどの3つの期間においても，ある程度リスクも小さく，ある程度高い収益を得られているので，投資の1つの選択肢になるかもしれません．

以前，今回と同様の検証を日経225銘柄でやってみました．興味ある方は，「[(Qiita) 日経225全銘柄の投資効率を検証](https://qiita.com/MandT500/items/f4aaafa0de824dab92c2)」もご覧ください．










# 付録（分析プログラム）
- 時系列データを収集する

以下のプログラムを実行すると，2015年1月1日から2020年12月31日の暗号資産の価格の時系列データが取得できます．

データの取得には，Pythonのpandas_datareaderライブラリを使っています．これを使うと，Yahoo! Financeから，データを取得することができます．CSVファイルの読み書きは，PythonのPandasライブラリを使っています．

データ取得後，```ccurrency_close_all.csv```というCSVファイル形式でデータが保存されます．

```python:getStockPrice.py
import pandas as pd 
import pandas_datareader.data as web

# 暗号通貨
def get_cc():
    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",
               "ETC-USD","XEM-USD","ZEC-USD","QTUM-USD",
               "BTG-USD","BAT-USD","DOGE-USD"]
    return CCURRENCY

# 株価取得（日足） csv保存　Closeのみ
def get_close_csv(stock_name: list,start=None,end=None,filename='noname'):
    for i in range(len(stock_name)):
        if(i==0):
            data = web.DataReader(stock_name[i],"yahoo",start,end).Close.rename(stock_name[i])
        else:
            data2 = web.DataReader(stock_name[i],"yahoo",start,end).Close.rename(stock_name[i])
            #data = pd.concat([data,data2], axis=1)
            data = pd.merge(data, data2, how='outer', on='Date')
        print(str(i+1)+"/"+str(len(stock_name)))
    data.to_csv(f"{filename}")

get_close_csv(get_cc(),start='2015-1-1', end='2020-12-31',filename='ccurrency_close_all.csv')

```


- 投資収益率の期待値と分散を計算し，散布図を作成する

投資収益率の期待値，分散の計算には，先ほどCSVファイルの読み書きにつかったPandasライブラリを使います．

まず，上のプログラムで取得した時系列データ```ccurrency_close_all.csv```を読み込みます．次に各暗号資産の投資収益率とその期待値，分散を計算します．最後に，その結果を散布図に表示します．

※ プログラムが拙いですがご了承ください．

```python:analysis.py
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import itertools
import datetime

# 暗号通貨
def get_cc():
    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",
               "ETC-USD","XEM-USD","ZEC-USD","QTUM-USD",
               "BTG-USD","BAT-USD","DOGE-USD"]
    return CCURRENCY

# 全銘柄の株価データを読み込み
df = pd.read_csv('ccurrency_close_all.csv', index_col=0)

# year
# s_time_list = [f'{y}-1-1' for y in range(2015,2021)]; e_time_list = [f'{y}-12-31' for y in range(2015,2021)]

# month
s_time_list = ['{0:02d}-{1:02d}-1'.format(y,m) for y, m in itertools.product(range(2015,2021), range(1,13))]
e_time_list = [(datetime.date(y,m,1)-datetime.timedelta(days=1)).strftime("%Y-%m-%d") for y, m in itertools.product(range(2015,2021), range(1,13))][1:]+['2020-12-31']

# 株価収益率
df_returns_all = (df-df.shift(1))/df.shift(1)*100

for ii in range(len(s_time_list)):
    s_time = s_time_list[ii]
    e_time = e_time_list[ii]
    df_returns = df_returns_all[s_time:e_time]
    # 標準偏差，　分散
    df_std = pd.DataFrame(df_returns.var(), columns=['Variance'])
    df_mean = pd.DataFrame(df_returns.mean(), columns=['Anerage'])
    
    # 結果を結合
    df_result = pd.concat([df_std, df_mean], axis=1)
    
    # 株の名前リスト作成（点のラベル用）
    data_name = get_cc()
    
    # 点のデータ
    average = np.array(list(df_result['Variance']))
    variance = np.array(list(df_result['Anerage']))
    
    # E-V図を作成
    plt.figure(figsize=(9,9))
    plt.xlabel('Variance', fontsize=18)
    plt.ylabel('Average', fontsize=18)
    plot_list=get_cc()
    for (i,j,k) in zip(average, variance, data_name):
        if k in plot_list:
            plt.plot(i,j,'o')
            plt.annotate(k, xy=(i, j),fontname="MS Gothic", fontsize=18)
            
    plt.title('{} ~ {}'.format(s_time, e_time), fontsize=25)
    plt.tick_params(labelsize=18)
    plt.savefig(f'./month/cc{ii}m.png')
    # plt.close()
```