こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- テクニカル分析を採用した仮想通貨の自動売買に興味がある
- Pythonでボリンジャーバンドを用いた仮想通貨のテクニカル分析を実践したい
ボリンジャーバンドとは
ボリンジャーバンドとは、移動平均線と上下に3本ずつの標準偏差(±1σ、±2σ、±3σ)からなる計7本の線で表わされるメジャーなインジケーターです。
ボリンジャーバンドは標準偏差と正規分布を利用した確率分布をもとに、将来的な価格推移を予測する手法です。標準偏差とはデータのばらつき(分散度)に基づく指標であり、仮想通貨取引に例えると、ビットコイン価格の分布を示す指標と言えます。
正規分布とは、この世で最も一般的な分布とされるものであり、自然現象や人間の行動科学などによく適合する確率分布です。
ボリンジャーバンドは、正規分布に従った統計学理論が適用されています。例えば、高い確率で±2σの内側で価格は変動するという仮定をもとに将来価格を予測する前提で成り立っています。なお、確率統計学上±1σの間に収まる確率は68.3%、±2σになると95.5%、±3σになると99.7%の確率で線の内側に価格が収まるとされています。
ボリンジャーバンドは、例えば、高値側の標準偏差ライン(+σ)に価格が近付くと売りサインと捉え、安値側の標準偏差ライン(ーσ)に価格が近付くと買いサインと捉えられるのが一般的です。
【参考】テクニカル分析採用の自動取引におすすめの暗号資産(仮想通貨)取引所
取引所名 | 最低取引量 | 現物取引手数料*1 | 入金手数料[円] | 入金手数料[BTC] | 出金手数料[円] | 送金手数料[BTC] | 信用取引 | API提供 | ccxt | 自動売買おすすめ |
---|---|---|---|---|---|---|---|---|---|---|
Coincheck | 0.005 BTC | 無料 | 無料 | 無料 | 407円 | 0.0005 BTC | × | ○ | ○ | ★★★★★ |
GMOコイン | 0.0001BTC | Maker:-0.01% Taker:0.05% | 無料 | 無料 | 0円/ 400円(大口出金) | 無料 | ○ | ○ | × | ★★★★☆ |
bitbank | 0.0001BTC | Maker:-0.02% Taker:0.12% | 無料 | 無料 | 550円/ 770円(3万円以上) | 0.0006 BTC | × | ○ | ○ | ★★★★☆ |
BITPOINT | 0.0001 BTC | 無料 | 無料 | 無料 | 330 円 | 無料 | × | ○ | × | ★★★☆☆ |
- 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。
テクニカル分析を活用した自動取引を実践した場合、短期間での暗号資産の取引回数が増加する傾向にあります。さらに、自動取引の期間にデイトレードを採用した場合、なおさら増加すると言えます。
したがって、テクニカルトレードで取引利益を最大化したい場合は「取引手数料が安い取引所を選択する」ことを推奨します。
上記に示した暗号資産(仮想通貨)取引所は全てテクニカルトレードと相性が良いおすすめ取引所です。また、以下には仮想通貨の自動取引を実践する上で必須となるAPI利用方法についても言及しています。
APIの利用方法をマスターすると自動取引で実現できる幅も広がります。是非合わせてご参考下さい。
【コード全て公開】ボリンジャーバンドテクニカル分析ツール
本記事では、上図の動画に示すような、ボリンジャーバンド採用の仮想通貨リアルタイムテクニカル分析を実践するためのPythonプログラミング手法について解説します。
今回は動作イメージを掴むべく、データの期間はデイトレード向けに秒単位を例として紹介しますが、ボリンジャーバンド自体はオシレーター系のテクニカル指標です。そのため、デイトレ特化で使われることはあまり点に注意が必要です。
もちろん、スイング・長期トレードにも対応したプログラムが柔軟に組めるよう合わせて詳しく解説します。
【事前準備】Python環境の構築
ボリンジャーバンドを用いた仮想通貨テクニカル分析を実行するために、Python環境を構築します。以下に示すパッケージを事前にインストールしておきましょう。
Ta-Lib
Ta-Libはテクニカル分析に役立つライブラリです。以下の手順に従いインストールしましょう。
共通
最も簡単な方法はAnaconda
をインストールしてTa-Libを使用する方法です。
① Anacondaをインストール
② Anacondaプロンプトを開き、以下を実行
conda install -c conda-forge ta-lib
Mac OSの方はこちら
①Ta-Lib本体をインストール
brew install ta-lib
②Ta-Lib Pythonパッケージをインストール
pip install TA-Lib
ccxt
仮想通貨の価格データの取得には、ccxtというパッケージを用います。次のようにインストールしましょう。
pip install ccxt
matplotlib
テクニカルチャートの可視化にはmatplotlibを用います。次のようにインストールしましょう。
pip install matplotlib
【Python実践】ボリンジャーバンドを用いた仮想通貨のテクニカル分析
実際にボリンジャーバンド採用のリアルタイムテクニカルチャートをPythonプログラムで構築していきます。
今回ボリンジャーバンドを得るために用いる仮想通貨データには、コインチェック取引所のビットコイン価格を採用しています。また、このデータの取得手段としてコインチェックが提供するAPIを利用しています。
「コインチェックAPIの詳しい利用方法を知りたい」または本件紹介のボリンジャーバンドと注文機能を組み合わせて「仮想通貨の自動売買ツールを完成させたい」という方向けに、下記の記事を配信しています。合わせてご覧ください。
【Python】コインチェックAPIの取得と自動売買の実践手順|Coincheck仮想通貨・ビットコイン取引機能入門
「Coincheck APIの取得方法」および「Python環境でAPI機能を利用する方法」を解説します。仮想通貨(ビットコイン等)の自動売買ツールを自作したい方必見です。
Pythonライブラリ呼出
テクニカル分析、データ取得・加工およびグラフ可視化を用途としたPythonライブラリをインポートします。
# テクニカル分析
import talib
# データ取得・加工
import ccxt
import json
import pandas as pd
# グラフの可視化で利用
from time import sleep
from itertools import count
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.animation import FuncAnimation
from matplotlib import rcParams
rcParams["font.family"] = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use('fivethirtyeight')
mpl.use('TkAgg')
ビットコインの価格情報取得
リアルタイムにビットコイン価格を取得する関数を次のように定義します。関数の出力イメージも合わせて示します。
# コインチェックオブジェクト
base = ccxt.coincheck()
# 板情報取得関数
def ticker_info():
symbol = "BTC/JPY"
result = base.fetch_ticker(symbol)
return result
# 関数実行
print(ticker_info())
# 出力イメージ
# 'symbol': 'BTC/JPY',
# 'bid': '5262277.0',
# 'ask': '5264471.0', ★この値を今回利用
# 'high': '5471000.0',
# 'low': '5240000.0',
# 'volume': '1574.78371738',
# 'timestamp': '1649462093'
ボリンジャーバンドの指標算出・グラフ可視化
前述の関数を用いてボリンジャーバンドのテクニカル分析を実行し、結果をグラフとしてリアルタイムに可視化するコードを下記に示します。
# グラフ軸
index = count() # x軸(カウント)
x = [] # x軸
btc_price = [] # ビットコイン価格
# グラフ可視化関数
def animate(i):
# X軸データ追加
x.append(next(index))
# コインチェック価格取得
btc_price.append(ticker_info()["ask"])
# ボリンジャーバンド引数情報
period = 20 # データ取得期間
bbup = 2 # upper-band:標準偏差
bbdwn = 2 # down-band:標準偏差
ma_type = 0 # 移動平均の種類(0:単純移動平均)
# ボリンジャーバンド指標獲得
bb_up, bb_middle, bb_down = talib.BBANDS(pd.Series(btc_price), # 価格データ
timeperiod=period, # 標準偏差の計算に利用するデータ範囲
nbdevup=bbup, # upper-band:標準偏差
nbdevdn=bbdwn, # down-band:標準偏差
matype=ma_type) # 移動平均の種類(0:単純移動平均)
# グラフ設定
plt.cla()
plt.title("ボリンジャーバンドテクニカル分析")
plt.xlabel("時間")
plt.ylabel("Bitcoin価格[BTC]")
plt.plot(x, btc_price ,color="red", label="ビットコイン現在価格")
plt.plot(x, bb_up ,color="blue",label="+"+str(bbup)+"σ")
# plt.plot(x,bb_middle ,color="lightblue" ,label="移動平均線"+"("+str(period)+")")
plt.plot(x,bb_down ,color="blue",label="-"+str(bbdwn)+"σ")
plt.legend(loc="upper left")
plt.tight_layout()
# アニメーショングラフ適用
ani = FuncAnimation(plt.gcf(),animate,interval=1000)
# グラフ表示
plt.tight_layout()
plt.show()
ここでボリンジャーバンドはTA-LibライブラリのBBANDS()
メソッドを用いて算出しています。このメソッドに用いる引数情報は下記になります。ポイントは第一引数のデータ取得元であり、ここに期間の異なるデータを指定することで、デイトレだけでなく、スイングトレードおよび長期トレードにも応用できるようになります。
スイングトレードの場合は日次のデータを指定し、長期トレードの場合は週次または月次のデータを指定すると良いでしょう。
bb_up, bb_middle, bb_down = talib.BBANDS(pd.Series(btc_price), # データ取得元を記述
timeperiod=10, # 標準偏差の計算に利用するデータ範囲
nbdevup=2, # upper-band:標準偏差
nbdevdn=2, # down-band:標準偏差
matype=0) # 移動平均の種類(0:単純移動平均)
【まとめ】プログラミングコード全量
前述したプログラミングコードの全量を以下にまとめて示します。
Pythonスクリプトを実行し、ビットコイン価格とボリンジャーバンドの推移を観察してみましょう!
# テクニカル分析
import talib
# データ取得・加工
import ccxt
import json
import pandas as pd
# グラフの可視化で利用
from time import sleep
from itertools import count
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.animation import FuncAnimation
from matplotlib import rcParams
rcParams["font.family"] = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use('fivethirtyeight')
mpl.use('TkAgg')
# コインチェックオブジェクト
base = ccxt.coincheck()
# 板情報
def ticker_info():
symbol = "BTC/JPY"
result = base.fetch_ticker(symbol)
return result
# グラフ軸
index = count() # x軸(カウント)
x = [] # x軸
btc_price = [] # ビットコイン価格
# グラフ可視化関数
def animate(i):
# X軸データ追加
x.append(next(index))
# コインチェック価格取得
btc_price.append(ticker_info()["ask"])
# ボリンジャーバンド引数情報
period = 20 # データ取得期間
bbup = 2 # upper-band:標準偏差
bbdwn = 2 # down-band:標準偏差
ma_type = 0 # 移動平均の種類(0:単純移動平均)
# ボリンジャーバンド指標獲得
bb_up, bb_middle, bb_down = talib.BBANDS(pd.Series(btc_price), # 価格データ
timeperiod=period, # データ取得期間
nbdevup=bbup, # upper-band:標準偏差
nbdevdn=bbdwn, # down-band:標準偏差
matype=ma_type) # 移動平均の種類(0:単純移動平均)
# グラフ設定
plt.cla()
plt.title("ボリンジャーバンドテクニカル分析")
plt.xlabel("時間")
plt.ylabel("Bitcoin価格[BTC]")
plt.plot(x, btc_price ,color="red", label="ビットコイン現在価格")
plt.plot(x, bb_up ,color="blue",label="+"+str(bbup)+"σ")
# plt.plot(x,bb_middle ,color="lightblue" ,label="移動平均線"+"("+str(period)+")")
plt.plot(x,bb_down ,color="blue",label="-"+str(bbdwn)+"σ")
plt.legend(loc="upper left")
plt.tight_layout()
# アニメーショングラフ適用
ani = FuncAnimation(plt.gcf(),animate,interval=1000)
# グラフ表示
plt.tight_layout()
plt.show()
【仮想通貨・ビットコイン】自動取引実践法・その他優良情報
最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。
取引所別:APIの取得手順と使い方の解説記事
対応言語 | 記事名 |
---|---|
Python | 【GMOコイン】 APIで仮想通貨取引の自動化 |
Python | 【BitTrade】 APIで仮想通貨取引の自動化 |
Python | 【bitbank】 APIで仮想通貨取引の自動化 |
Python | 【Coincheck】APIで仮想通貨取引の自動化 |
Python | 【bitFlyer】APIで仮想通貨取引を自動化 |
Python | 【BITPOINT】APIで仮想通貨取引の自動化 |
機械学習やテクニカル分析を採用した仮想通貨取引の解説記事
対応言語 | 記事名 | 指標 |
---|---|---|
共通 | 自動売買の種類・自作時のポイント | 全て |
Python | リアルタイムチャート分析基礎 | トレンド |
Python | 移動平均線 | トレンド |
Python | ゴールデンクロス・デッドクロス | トレンド |
Python | アービトラージ(裁定取引) | 時間・値幅 |
Python | ボリンジャーバンド | オシレータ |
Python | MACD | オシレータ |
Python | RSI | オシレータ |
Python | 時系列予測モデルの構築 | 機械学習・AI |
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効
その他仮想通貨自動トレード解説記事
対応言語 | 記事名 |
---|---|
Python | 【データ収集】仮想通貨の過去データを大量取得する方法 |
Python | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
Node.js | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら