- はじめに
- ビットコインの長期チャートデータについて
- 長期の移動平均から、BTCの経験的な底値が分かるかも??
- 長期の加重移動平均線(WMA)から、BTCの経験的な底値が分かるかも
- WMAの長期トレンドを網掛け(ポリゴン)表示について
- SMAの長期トレンドを網掛け(ポリゴン)表示について: 2022年11月14日更新
- 多重の単純移動平均線(SMA)によるBTCのトレンド解析
- 多重の加重移動平均線(WMA)によるBTCのトレンド解析
- 長期移動平均線(SMA)と価格の倍数から高値水準を測る
- まとめ
- 補足
- 参考資料
はじめに
2022年11月に入り、仮想通貨の代表格であるビットコイン(BTC)がかなり低迷しています。
おいおい、カエル君、、先日来、大手仮想通貨取引所のFTXショックで仮想通全体が暴落しておるぞ!!
そ、そうなんですか?師匠。。家にテレビがなくて、知りませんでした。
いやいや、カエル君、、テレビではやっておらんぞ。時代は、YouTubeじゃ。
前置きはさて置き、こんな時こそ、BTCの長期トレンドを解析して、 歴史的に、どれ位の値段位置にいるのかを確認したいと思い立ちました。
今回は、R言語で、ビットコイン(BTC)の各種のトレンド解析・可視化関数を実装してみました。
仕事も忙しかったのもあるけど、、2-3週間ほど、ずっと、ここ記事の関数群を作成していたら、暴落が開始しました、ホントに思い出深いプログラム実装になりましたね。。。
パッケージ準備
まずは、関連パッケージをインストールしていきます。 この記事の為に作成した、関数群はGistサイトから適時読み込みます。
#パッケージ・インストール pack <- c("binancer", "lubridate", "TTR", "pdftools", "classInt") install.packages(pack[!(pack %in% unique(rownames(installed.packages())))]) #ライブラリ準備 library(binancer) library(lubridate) library(TTR) library(pdftools) library(classInt)
また、pdf_png_save関数を使って、PDFファイルを画像(PNG)に変換したい場合には、 追加で、brewコマンドでpdftoolsを設定する必要があります。 詳しくは、過去の記事をご参照してくだだい。
ビットコインの長期チャートデータについて
getBTC関数を使って、 2010年7月18日から今日(現在、2022年11月13日)までのBTCの日足データを取得します。
とりあえず、getBTC.R
を読み込みます。
それで、getBTC関数を実行して、取得したデータを表示してみます。
#getBTC.Rの読み込み source("https://gist.githubusercontent.com/kumeS/c466e97d42f6facbb8ba5a22ed361bf4/raw/07728e5e4810e53aa8bdcc411ac51603943761df/getBTC.R") #BTCのデータ取得 Dat <- getBTC() #表示 head(Dat) # Date Close Month #1 2010-07-18 0.1 07 #2 2010-07-19 0.1 07 #3 2010-07-20 0.1 07 #4 2010-07-21 0.1 07 #5 2010-07-22 0.1 07 #6 2010-07-23 0.1 07 tail(Dat) # Date Close Month #4496 2022-11-07 20591.13 11 #4497 2022-11-08 18547.23 11 #4498 2022-11-09 15922.81 11 #4499 2022-11-10 17601.15 11 #4500 2022-11-11 17070.31 11 #4501 2022-11-12 16899.61 11
データの取得元ですが、 https://www.investing.comのヒストリカルデータに加えて、バイナンスの日足データを使用しています。
長期の移動平均から、BTCの経験的な底値が分かるかも??
SMA_LogPlot関数を使って、BTCの値動きと長期移動平均(単純移動平均, SMA)との関係性を解析しました。 Y軸は、log表示です。
上値のラインは、底値に任意のファクターを掛け算して計算しています。
緑のライン・領域は売りゾーン(長期的にみて、値段が高い)、青のライン・領域は買いゾーン(長期的にみて、値段が安い)という判断になります。
それでは、これまでのBTC史のチャート推移を示してみます。
#SMA_LogPlot関数の準備 source("https://gist.githubusercontent.com/kumeS/cf479609eb312db4c7f3b3a002dda3df/raw/855d39904d48b1ba27ee7cf3c420b28440c5870c/SMA_LogPlot.R") #pdf_png_save関数の準備 source("https://gist.githubusercontent.com/kumeS/bad9ace466970bd13b5afd15eed6f9b6/raw/8cd41b26c00696c59be98b4ce27a4f726ad27cae/pdf_png_save.R") #(1) 2017年1月-2020年1月のチャート SMA_LogPlot(Dat, term=c("2017-01-01", "2020-01-01"), xax = 0.008, yax = 0.9995, ycex=0.8) #保存 pdf_png_save(FileName="SMA_LogPlot_01.pdf") #(2) 2018年1月-2020年1月のチャート SMA_LogPlot(Dat, term=c("2018-10-01", "2020-01-01"), xax = 0.025, yax = 0.9995, ycex=0.8) pdf_png_save(FileName="SMA_LogPlot_02.pdf") #(3) 2020年1月以降のチャート SMA_LogPlot(Dat, term=c("2020-01-01", as.character(lubridate::today()))) pdf_png_save(FileName="SMA_LogPlot_03.pdf") #(4) 2022年1月以降のチャート SMA_LogPlot(Dat, term=c("2022-01-01", as.character(lubridate::today())), xax = 0.03, yax = 0.9997, ycex=0.8) pdf_png_save(FileName="SMA_LogPlot_04.pdf")
以下に可視化結果を示します。また、pdf_png_save関数で結果を保存しています。
現在の2万ドル近辺でも、2019年1月あたりより、売られ過ぎになっってますね。 今回のコロナバブルの終わりですね。
長期の加重移動平均線(WMA)から、BTCの経験的な底値が分かるかも
次に、WMA_Plot関数を使って、BTCの値動きと長期移動平均(加重移動平均線, WMA)との関係性を解析します。
#WMA_Plot.Rの準備 source("https://gist.githubusercontent.com/kumeS/1f3f3556ddff20e0bc105ae1e8e5f443/raw/0eba9c4c2e3140ab1e2a748e030ecc8b918d6a52/WMA_Plot.R") #pdf_png_save関数の準備 source("https://gist.githubusercontent.com/kumeS/bad9ace466970bd13b5afd15eed6f9b6/raw/8cd41b26c00696c59be98b4ce27a4f726ad27cae/pdf_png_save.R") #(1) 2017年1月-2020年1月のチャート WMA_Plot(Dat, term=c("2017-01-01", "2020-01-01")) pdf_png_save(FileName="WMA_Plot_01.pdf") #(2) 2020年1月以降のチャート WMA_Plot(Dat, term=c("2020-01-01", as.character(lubridate::today()))) pdf_png_save(FileName="WMA_Plot_02.pdf") #(3) 2022年6月以降のチャート WMA_Plot(Dat, term=c("2022-06-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.9999) pdf_png_save(FileName="WMA_Plot_03.pdf")
以下に可視化結果を示します。
WMAの長期トレンドから見ても、2万円以下は安いのかもですね。。
WMAの長期トレンドを網掛け(ポリゴン)表示について
WMAの長期トレンドの網掛け表示をする場合は、 WMA_polygon_Plot関数で実行します。
Y軸のLog表示を切り替えられるようにしています。
#WMA_polygon_Plot.Rの読み込み source("https://gist.githubusercontent.com/kumeS/00dfb4d5983904cbc2204d22ae156f01/raw/620c9dbe7bf694fa551c580efee31f9dbafd4644/WMA_polygon_Plot.R") #Log表示 WMA_polygon_Plot(Dat, term=c("2020-01-01", as.character(lubridate::today())), lag=5, xax = 0.015, yax = 0.999, xcex=0.9, ycex=0.8, rou=0, M1=0.15, m1=0.9, line_col=T, LogY=T) pdf_png_save(FileName="WMA_polygon_Plot_01.pdf") #非Log表示 WMA_polygon_Plot(Dat, term=c("2020-01-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.999, xcex=0.9, ycex=0.8, rou=0, M1=0.15, m1=0.8, line_col=T, LogY=F) pdf_png_save(FileName="WMA_polygon_Plot_02.pdf")
以下に可視化結果を示します。
網掛け表示の方が、やや見易いような気がしますね。
SMAの長期トレンドを網掛け(ポリゴン)表示について: 2022年11月14日更新
SMAの長期トレンドの網掛け表示をする場合は、 SMA_polygon_Plot関数で実行します。
#getBTC.Rの読み込み source("https://gist.githubusercontent.com/kumeS/c466e97d42f6facbb8ba5a22ed361bf4/raw/07728e5e4810e53aa8bdcc411ac51603943761df/getBTC.R") #BTCのデータ取得 Dat <- getBTC() #SMA_polygon_Plot.Rの読み込み source("https://gist.githubusercontent.com/kumeS/ffde4bc3811f0b0549121173790c6ff5/raw/5d2f5b45beabe65cb35201b01c481ddafe324b36/SMA_polygon_Plot.R") source("https://gist.githubusercontent.com/kumeS/bad9ace466970bd13b5afd15eed6f9b6/raw/8cd41b26c00696c59be98b4ce27a4f726ad27cae/pdf_png_save.R") #(1) 2019-01-01以降のチャート SMA_polygon_Plot(Dat, term=c("2019-01-01", as.character(lubridate::today())), lag=5, xax = 0.06, yax = 0.999, xcex=0.9, ycex=0.8, rou=0, M1=0.15, m1=0.9, line_col=T, LogY=F) pdf_png_save(FileName="SMA_polygon_Plot_01.pdf") #(2) 2022-01-01以降のチャート SMA_polygon_Plot(Dat, term=c("2022-01-01", as.character(lubridate::today())), lag=5, xax = 0.06, yax = 0.9998, xcex=0.9, ycex=0.8, rou=0, M1=0.15, m1=0.6, line_col=T, LogY=F) pdf_png_save(FileName="SMA_polygon_Plot_02.pdf")
多重の単純移動平均線(SMA)によるBTCのトレンド解析
単純移動平均線(SMA)が下値のサポートとして機能するか、上値のレジスタンスとなるか長期のトレンド解析をしてみました。
trends_SMA_plot関数にて実行します。
#trends_SMA_plot.Rの読み込み source("https://gist.githubusercontent.com/kumeS/f4813db3049e95db9dd53d528afddf72/raw/a0a2b2bd4e06147ef1a57fbfa285738c9c469d75/trends_SMA_plot.R") #(1) 2017年1月-2020年1月のチャート trends_SMA_plot(Dat, term=c("2017-01-01", "2020-01-01"), lag=5, xax = 0.1, yax = 0.9999) pdf_png_save(FileName="trends_SMA_plot_01.pdf") #(2) 2018年1月-2020年1月のチャート trends_SMA_plot(Dat, term=c("2018-10-01", "2020-01-01"), M1=0.25, lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_SMA_plot_02.pdf") #(3) 2020年1月以降のチャート trends_SMA_plot(Dat, term=c("2020-01-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_SMA_plot_03.pdf") #(4) 2022年1月以降のチャート trends_SMA_plot(Dat, term=c("2022-01-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_SMA_plot_04.pdf")
以下に可視化結果を示します。
歴史的には、SMAの移動平均を5本目抜けないと強さが出ないですね。 今後も、SMA150日の移動平均を超える必要がありそうですね。
多重の加重移動平均線(WMA)によるBTCのトレンド解析
次に、WMA移動平均線が下値のサポートとして機能するか、上値のレジスタンスとなるか長期のトレンド解析をしてみました。
trends_WMA_plot関数にて実行します。
#trends_WMA_plot.Rの読み込み source("https://gist.githubusercontent.com/kumeS/71cc142fe533d232fa51c985c2a345a7/raw/5461c64076a3cd3dfe889fcc05f6fdd8d0ccdd2e/trends_WMA_plot.R") #(1) 2017年1月-2020年1月のチャート trends_WMA_plot(Dat, term=c("2017-01-01", "2020-01-01"), lag=5, xax = 0.1, yax = 0.999) pdf_png_save(FileName="trends_WMA_plot_01.pdf") #(2) 2018年1月-2020年1月のチャート trends_WMA_plot(Dat, term=c("2018-10-01", "2020-01-01"), M1=0.2, lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_WMA_plot_02.pdf") #(3) 2020年1月以降のチャート trends_WMA_plot(Dat, term=c("2020-01-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_WMA_plot_03.pdf") #(4) 2022年1月以降のチャート trends_WMA_plot(Dat, term=c("2022-01-01", as.character(lubridate::today())), lag=5, xax = 0.1, yax = 0.99995) pdf_png_save(FileName="trends_WMA_plot_04.pdf")
以下に可視化結果を示します。
WMAの方が値動きによりフィットしていて、図としても収まりが良いですね。 WMAだと、WMA200日線を超えるかどうかがポイントそうですね。
長期移動平均線(SMA)と価格の倍数から高値水準を測る
移動平均と比べて、何倍の値段で買われているかで判断する方法を紹介します。 SMA_Heatmap_Plot関数で実行します。
実際、これは、結構良い指標となりそうです。
#getBTC.Rの読み込み source("https://gist.githubusercontent.com/kumeS/c466e97d42f6facbb8ba5a22ed361bf4/raw/07728e5e4810e53aa8bdcc411ac51603943761df/getBTC.R") #BTCのデータ取得 Dat <- getBTC() #SMA_Heatmap_Plot関数の読み込み source("https://gist.githubusercontent.com/kumeS/a9aecb4914abba4b2d4d2d035b732154/raw/5024f37ff86c3fa1de06b2562519d3cd9a66e1bd/SMA_Heatmap_Plot.R") #(1) 2017年1月-2020年1月のチャート SMA_Heatmap_Plot(Dat, term=c("2017-01-01", "2020-01-01"), SMA_periods=2000, m1=0.25) pdf_png_save(FileName="SMA_Heatmap_Plot_01.pdf") #(2) 2018年1月-2020年1月のチャート SMA_Heatmap_Plot(Dat, term=c("2018-01-01", "2020-01-01"), SMA_periods=2000, m1=0.25) pdf_png_save(FileName="SMA_Heatmap_Plot_02.pdf") #(3) 2020年1月以降のチャート SMA_Heatmap_Plot(Dat, term=c("2020-01-01", as.character(lubridate::today()))) pdf_png_save(FileName="SMA_Heatmap_Plot_03.pdf") #(4) 2022年1月以降のチャート SMA_Heatmap_Plot(Dat, term=c("2022-01-01", as.character(lubridate::today())), SMA_periods=2000) pdf_png_save(FileName="SMA_Heatmap_Plot_04.pdf")
以下に可視化結果を示します。
歴史的には、少なくとも、倍率が1倍台にならないと、底値にはならないようですね。
今回、1を切るということは。。。どういう意味なんでしょうね。
まとめ
今回のビットコインの長期トレンド解析については、 実際、Look into bitcoin のチャートを眺めながら、アイディアを貰いました。感謝です。
また、Rプログラムを作ってるときに、大手仮想通貨取引所のFTX騒動が勃発して、FTXが破産申請、引き続き、仮想通貨暴落中。。。
仮想通貨は、いつも我々の想像を超えてきますね。。やってはいけないことを繰り返しやる、それが現代の金融システムですね。
補足
BTCの長期チャートのdygraphs表示
折角なので、dygraph関数で、BTCの長期チャートをインタラクティブに可視化してみました。
#パッケージ・インストール pack <- c("dygraphs", "xts") install.packages(pack[!(pack %in% unique(rownames(installed.packages())))]) #ライブラリ準備 library(dygraphs) library(xts) #データ読み込み Dat <- getBTC() rownames(Dat) <- Dat$Date Dat.xts <- xts::as.xts(Dat) #可視化 Dat.xts[,2] %>% dygraphs::dygraph(main = "BTC") %>% dygraphs::dySeries("Close", label = "BTC") %>% dygraphs::dyRangeSelector(height = 40) %>% htmltools::save_html(file="BTC_x.html")
イーサリアム(ETH)の長期チャートデータについて
ビットコインだけでなく、イーサリアム(ETH)の長期チャート用のデータを取得する関数も作成しました。
以下のように、getETH関数を使って、ETHの日足長期データを取得します。
#getETH.Rの読み込み source("https://gist.githubusercontent.com/kumeS/3260853bb9278061a4a245a4e11092b2/raw/ea2fe720e04894456abff6c6c4e7e1ade687a85d/getETH.R") #ETHのデータ取得 Dat <- getETH() #表示 head(Dat) # Date Close Month #1 2015-08-07 3.00 08 #2 2015-08-08 1.20 08 #3 2015-08-09 1.20 08 #4 2015-08-10 1.20 08 #5 2015-08-11 0.99 08 #6 2015-08-12 1.29 08 tail(Dat) # Date Close Month #2649 2022-11-07 1567.748 11 #2650 2022-11-08 1334.770 11 #2651 2022-11-09 1102.730 11 #2652 2022-11-10 1299.280 11 #2653 2022-11-11 1289.280 11 #2654 2022-11-12 1268.150 11
データの取得元は、ethereumprice.orgとバイナンスのデータです。