bookloveru2
pythonで仮想通貨④ Bitcoinと統計学(BTC価格分布は右に裾を引く)
更新日:2022年6月14日
ここに、独学で統計に挑み、市場に嘲笑われ散っていった一人の乞食の考察を記します。
Bitcoinのトレードで儲けたい。
乞食を生業とする私は、統計学を利用し、上手く波乗りできる指標がないか考察しました。
ハル・フィニーやロジャー・バー、ウィンクルボス兄弟のような、アーリーアダプターでなくても、私の様な乞食にもチャンスがあるのでは無いかと考えたのです。
『統計学さえ味方に付ければ。』
その後、死ぬまでの話です。
目次
Bitcoinのドローダウンは長期に及ぶ
Bitcoinの最高年間上昇率は驚異の1368.9%
統計学は市場に勝てないのか?
1. Bitcoinのドローダウンは長期に及ぶ
Bitcoinといえば、永遠なる右肩上がり。狂喜乱舞のチャートを描くと思われがちだが、一度大幅下落を食らうと、その暗黒時代は長期に及びます。
百聞は一見に如かず。
1BTC=400ドル前後だった、2014年~現在までの価格分布を見ていきます。
最高累積リターンは14,000%!

ドローダウンです👇
2017年のバブル崩壊~2020年11月の最高値更新まで1,079日(約3年)を要しています。その後、さらに3倍の70,000ドル付近まで上昇したことは記憶に新しいと思います。


上図から把握できるように、Bitcoinのドローダウンは長期に及びます。
但し、ドローダウンを抜けたときの上昇率がパないのです。
次項では、細かい統計データに迫ります。
2. Bitcoinの最高年間上昇率は驚異の1368.9%
ここで、2014.9~2022.6現在までの統計データの出番です。
比較対象として、現在世界第二位の時価総額を誇るApple社を選択。



下図に注目してください。👇
今回のブログの第一佳境点です。
・バブルは2017年が最強。
・月間収益率分布は右に裾を引いている(歪度+)。
・最頻値で見れば、BTC投資は損失を被る。


以上が、Bitcoinの統計データです。
1BTC=400ドル前後だった、2014年~現在までの価格分布を見て、
無尽蔵に上昇を続けるモンスターというイメージが変わったことかと思います。
大事なバブル時期はコロナ禍では無く、2017年のバブルだったのです。
ここまでの考察では、やはりアーリーアダプターにはとても敵わない事が分かりました。。。。(´;ω;`)ウッ…
早漏利確も(私です)即死です。。。
ここまでのpython コード👇
pip install quantstats==0.0.25
pip install matplotlib fbprophet pandas-datareader
pip install scikit-learn keras pandas_datareader
pip install stock-backtest
pip install japanize_matplotlib
pip install mplfinance
pip install yfinance
pip install quandl
stockname = "BTC-USD" #@param {type:"string"}
%matplotlib inline
import quantstats as qs
qs.extend_pandas()
stock = qs.utils.download_returns(stockname)
qs.stats.sharpe(stock)
qs.plots.snapshot(stock, title='Stock Performance')
qs.reports.full(stock, "AAPL")
3. 統計学は市場に勝てないのか?
では、ここからは、統計学を駆使して、アーリーアダプターに勝てないにしても、儲けることはできないのか?という疑念について記述していきます。
まず、上述した同期間の価格ヒストグラムを見ていきます。👇

python code👇
from pandas_datareader import data as pdr
import datetime
import yfinance as yf
yf.pdr_override()
df = pdr.get_data_yahoo("BTC-USD", "2014-10-1", "2022-5-29")
df1 = df["Adj Close"] .dropna()
display(df1.head(5).append(df1.tail(5)))
display(df1.plot.hist())

python code👇
df1.plot(figsize=(8,8),fontsize=14,subplots=True,grid=True)
display(df1.describe())
ここで、統計学の基礎となる正規分布を使用した、ボリンジャーバンドが役立つのか実験してみます。ボリンジャーバンドは正規分布を仮定した上で使用するので、レンジ相場にしか対応できません。
しかし、前述したヒストグラムから分かるように、株式市場や仮想通貨は正規分布とはほど遠い分布を形成しています。テールリスクに面した投機商品であることが明らかです。
しかし、私乞食は、独学でかじった統計学を信じたいのです。
ブラック-ショールズ方程式やモンタナバンドが意味があると、信じたいのです。
応用数学や計量経済学、ミクロ・マクロ経済学が意味があると、信じたいのです。
理由は、私が大卒で職業:乞食なことを、間違いだと信じたいからです。(●´ω`●)
ということで、ボリンジャーバンドで儲けることができるのか、バックテストモジュールを使用して検証していきます。
※バックテストを使用するのは、実弾が無いからです(●´ω`●)フフフ
前提条件
対象銘柄:BTC-USD
法定通貨:ドル
トレード期間:2022/1/1~2022/5/31(5ヶ月間)
初期資金:100,000ドル(1,000万円)※ドル円=100円とする
取引手数料:0.05%
売買手法:ボリンジャーバンドでドテン
ボリンジャーバンド計算期間:7日間
+σ:2σ
▲σ:▲2.5σ
※σが同値でない理由:コロナがパンデミック時より落ち着き、各国中央銀行が利上げを始めた為。一般的思考として、インフレが進行した今、中央銀行は普通利上げに動くため、下落リスクが高いと判断しました。
つまり、中長期的に下落気味のレンジ相場を予想したσ設定となっております。
対象期間の統計データ👇


検証と検証方法を2パターンに分けてみていきます。
ボリンジャーバンドで+σで売り、▲σで買った場合(逆張り・レンジ相場想定)
ボリンジャーバンドで+σで買い、▲σで売った場合(順張り・トレンドに乗る)
結果
1.ボリンジャーバンドで+σで売り、▲σで買った場合(逆張り・レンジ相場想定)
結果👇


python code👇
from backtesting import Backtest, Strategy # バックテスト、ストラテジー
from backtesting.lib import crossover
import talib as ta
def BB(close, n, nu, nd):
upper, middle, lower = ta.BBANDS(close, timeperiod=n, nbdevup=nu, nbdevdn=nd, matype=0)
return upper, lower
class BBsigma(Strategy):
n = 7 #移動平均日数
nu = 2 #何σか
nd = 2.5 #何σか
def init(self):
self.upper, self.lower = self.I(BB, self.data.Close, self.n, self.nu, self.nd)
def next(self): # チャートデータの行ごとに呼び出される
# nuより大きいなら売り
if self.data.Close > self.upper:
self.sell()
# ndより小さいなら買い
elif self.data.Close < self.lower:
self.buy() # 買い
# バックテストを設定
bt = Backtest(
df, # チャートデータ
BBsigma, # 売買戦略
cash=100000, # 最初の所持金
commission=0.05, # 取引手数料
margin=1.0, # レバレッジ倍率の逆数(0.5で2倍レバレッジ)
trade_on_close=True, # True:現在の終値で取引,False:次の時間の始値で取引
exclusive_orders=True #自動でポジションをクローズ(オープン)
)
output = bt.run() # バックテスト実行
print(output) # 実行結果(データ)
bt.plot() # 実行結果(グラフ)
実はこのグラフ。インタラクティブに動かせるんです👇
お試しください。

2. ボリンジャーバンドで+σで買い、▲σで売った場合(順張り・トレンドに乗る)


以上より、相場の大局観が掴めていれば、統計学を利用したボリンジャーバンドでも多少収益は上げられることが分かりました。
今回のポイントは以下🦑。
インフレ加速
世界各国の中央銀行が利上げ姿勢
コロナワクチンの浸透
これらを加味すると、一般的思考では、長期的には下落トレンドが予測されます。
これに当てはめた「1.ボリンジャーバンドで+σで売り、▲σで買った場合(逆張り・レンジ相場想定)」の手法で利益を上げることが出来ました。
よっしゃ!
統計学の勝利!!
と、言いたいところですが、今回のバックテストはあくまでたまたま良い結果が出たということでしょう。
市場は常にランダムウォークしており、今回の収益率0.6%程度で満足できる人はいないでしょう。
残念です。
しかし世の中にはシステムトレードで莫大な収益を上げる方も大勢います。
数学や統計学、経済学や心理学を熟知した手練れです。
例えばこの方。
今後も地道に、乞食しながら勉強しようと思います。
最後に、今回のボリンジャーバンドの説明変数を最適化した結果を貼って、終わりたいと思います。


python code👇
#最適化
output2=bt.optimize(n=range(5, 50, 1),nu=range(1, 6, 1),nd=range(1, 6, 1), maximize='Equity Final [$]', method='grid')
print(output2)
# この結果を得た時のパラメータの組み合わせ
print(output2["_strategy"])
bt.plot()
では。