見出し画像

Bitcoinの定期購入って本当に稼げるの?

皆さん、こんにちは!
最近Bitcoinがすごいですね!数ヶ月前は100,000万円くらいだったのに、今や3,000,000を軽く超えています。
多分この記事を読んでいる人ならそんなのは知っているかと思います。

最近、Bitcoin系のYoutubeでよく耳にするのが、「定期購入&長期保有ド安定」理論です。
かくいう私も、システムトレードで利益を出していますが、最近の爆上がりを受けて、定期購入の方がいいのかなーと悩んでいます。

さて、今日はBitcoinの定期購入が本当に儲かるのかを、過去のデータと照らし合わせながらみていこうかと思います。もし本当にそんなに儲かるんなら、株とか言ってないで、Bitcoinをあつく持った方がいいという話になりかねませんからね。

ちなみに、今回の話はあくまで私の意見であり、また、どちらがいいというものではありません。あくまでデータに基づく過去の事実を伝えますので、あとはご自身で判断してください。

では、はじまりはじまり。

概要

今回やるのは、過去のBitcoinの価格データを取得し、それを基にシミュレーションを行っていきます。
どうやってシミュレーションをするかも解説しますので、是非自分でやってみてください。

今回のシミュレーションには、pythonBitbankが提供しているapiを利用します。
pythonがわからない方は、こちらの記事を参照してください。
→ 暇なので勉強しよう!Pythonインストール編(Mac)
Bitbankが提供しているapiに関しては、こちらの記事を参照してください。
→ Bitcoinの自動売買ツールをPythonを使って作る

基本的にここから先はjupyter notebookを使って説明していきます。是非ご自身でも実行してみて、結果を確かめながら読んでみてください!

Bitcoin apiを使ってデータを収集しよう

まずは、データ収集です。上記の過去記事を読んでくださった方は重複してしまいますので、ここはさらっといきます。

import python_bitbankcc
from datetime import datetime
from datetime import timedelta

class BitBankPubAPI:
   def __init__(self):
       self.pub = python_bitbankcc.public()

   def get_candlestick(self, pair,time,date):
       try:
           value = self.pub.get_candlestick(pair,time,date)
           return value
       except Exception as e:
           print(e)
           return None
      
   # _startから_endまでの日付を返す
def daterange(_start, _end):
   for n in range((_end - _start).days):
       yield _start + timedelta(n)

# 1時間足の蝋燭足チャートを出力する
def main():
   pub_set = BitBankPubAPI()
   start = datetime.strptime('2017-08-01', '%Y-%m-%d')
   end   = datetime.datetime.now()

   output = "date,start,end\n"
   # 1日ずつループ
   for date in daterange(start, end):
       print(date)
       date_now = "{0:%Y%m%d}".format(date)
       # 蝋燭足を取得
       candlestick = pub_set.get_candlestick('btc_jpy','1hour',date_now)
       for row in candlestick['candlestick'][0]['ohlcv']:
           output += "%s,%s,%s\n" % (str(datetime.fromtimestamp(row[5]/1000)),row[0],row[1])
  # 出力
  with open("./candlestick_1hour.csv","w") as f:
       f.write(output)

if __name__ == '__main__':
   main()

このコードの解説は過去記事で書いているので、そちらを読んでください。
実行すると"candlestick_1hour.csv"というファイルが作られます。
このファイルの中身はこんな感じになっています。

スクリーンショット 2021-01-25 23.42.56

1時間毎に価格をとってきている感じですね。データは3年ちょっと分ありますが、まぁこれくらいで十分でしょう。

定期買い付けをシミュレーションする

次に、n日に一回買い付けを行うという設定にしましょう。ここでは、nをmargin_daysという変数でおきます。
手数料に関しては、Bitbankの買い付け手数料の最大(テイカーの場合)をとりましょう。
今回の関数では、持っているBitcoinの円換算と、取得合計金額の推移を返しています。

def subscription_v1(tmp_candle,margin_day):
   amount_list = []
   jpy_list = []
   time = margin_day * 24
   jpy = 0
   btc = 0
   for index,row in enumerate(tmp_candle.iterrows()):
       if index % time == 0:
           btc += 10000 / row[1].start
           jpy += 10000 *1.0012
       amount_list.append((btc * row[1].start))
       jpy_list.append(jpy)
   return amount_list,jpy_list

まぁ、そんなに解説する部分はないかもしれません。上で得たcandleのデータを回していって、n日(n*24時間)に一回10,000円分のbtcを購入します。購入したら、btcは(10,000円 / ビットコインの価格)分増え、取得金額は、(10000*(1+手数料))分増えます。

今回はn=7とします。つまり、1週間に1度10,000円分のビットコインを購入しましょうというシミュレーションになります。実行方法は以下のような感じです。candlestick_1hour.csvは上で作ったファイルになります。

import pandas as pd

candle = pd.read_csv("candlestick_1hour.csv")
amount_list,jpy_list = subscription_v1(candle,7)
df = pd.DataFrame({"amount":amount_list,"jpy":jpy_list})
df

さて、この実行結果はこんな感じになると思います。

スクリーンショット 2021-01-26 0.04.29

さて、とりあえずわかるのは、この期間中1週間に10,000円ずつ積立を続けると、積立額の合計は1,822,184円になるという事ですね!ちなみに端数の2,184円は買い付け手数料になります。

さて、これではこれ以上のことは分からないので、グラフにしましょう。グラフを表示するのは、以下を実行するだけです。

df.plot()

実行結果はこんな感じで出てきます。実行時期によっては多少数字が異なりますが、気にしないでください。

スクリーンショット 2021-01-26 0.09.16

さて、このグラフから見えてくることは、やはり、積立額よりも、資産が大幅に増えています!なんと4.22倍になりました!!これはすごい!!

いやいやいや、待てよと。本当ですか?よく見ると、2020年の3月くらいまでは、ほぼ1倍です。急激に上昇したのは、この2ヶ月くらいのようです。信じて積立を続けていた皆さん、おめでとうございます。ただ、少なくとも2017年から3年間に渡り、リターンはほぼなかったように見えますねぇ。

年間利回りを計算する

次に、任意のタイミングで積立を始めた時の1年間の利回りをみてみましょう。
今回は7日毎に任意のタイミングで積立を開始したと仮定したシミュレーションをしてみます。
1年間投資した際の利回り(利益 / 投資額)を計算してみましょう。

result_list = []
max_jpy_list = []
for day in range(200):
   start_day = day * 24 * 7
   end_day = start_day + 24*365
   if end_day > len(candle):
       break
   amount_list,jpy_list = subscription_v1(candle[start_day:end_day],True,7)
   max_jpy_list.append(jpy_list[-1])
   result_list.append(amount_list[-1])
df1 = pd.DataFrame({"amount":result_list,"max_jpy":max_jpy_list})
df1["rate"] = (df1.amount - df1.max_jpy) / df1.max_jpy
df1

こんな感じです。結果は以下のようになりました。どうでしょうか?まぁかなりばらつきはありますが、2018年のバブル崩壊の直前に始めていなければ、大体プラスになるという感じです。

スクリーンショット 2021-01-26 0.29.09

ちなみに平均利回りは、25.8%です。年間の投資額は530,636円です。136,904円ですね。悪く無い数字ですね!

ちなみに2年間運用するとこんなグラフになります。2年間運用すれば、いつどのタイミングで始めたとしてもほとんどマイナスにはならないということが分かりますね。

画像5

まとめ

さて、ここまで見て来まして私の見解ですが、

・400%とかになっているのはここ2ヶ月くらいだけなので、それを期待してはいけない
・1年間の利回りは安定しないし、マイナスになることもあるけど、平均25.8%程度の利回りが見込めそう
・2年間以上の運用すれば、ほとんどマイナスにはならなそう
・ただし、買う時期によっては、数年間運用した結果利回り0ということもありうる

やはり、ハイリスクハイリターンな投資対象なので、1年間の利回りは安定しないというのは当然なような気がします。長く続けていれば、マイナスにはなりにくいような気がします。
この意味では、「定期購入&長期保有ド安定」理論はある程度正しいと言えるかもしれませんね。

しかし、最初の実験を見てみると、長く持っていても暴落して結局プラマイゼロになる可能性もありそうですね。そう考えると、高値になったところで売ってしまうという方が良いような気もしています。
悩ましいところですね!

以上、参考になったら嬉しいです!

サポートしていただいたお金は、新しいボードゲームやカードゲームをプレイするためのたしにします! プレイした感想は順次紹介していきます!