【Python×仮想通貨】ボリンジャーバンドを活用した自動売買|ビットコインのテクニカル分析・取引入門

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • テクニカル分析を採用した仮想通貨の自動売買に興味がある
  • Pythonでボリンジャーバンドを用いた仮想通貨のテクニカル分析を実践したい
目次

ボリンジャーバンドとは

ボリンジャーバンドとは、移動平均線と上下に3本ずつの標準偏差(±1σ、±2σ、±3σ)からなる計7本の線で表わされるメジャーなインジケーターです。

ボリンジャーバンドは標準偏差と正規分布を利用した確率分布をもとに、将来的な価格推移を予測する手法です。標準偏差とはデータのばらつき(分散度)に基づく指標であり、仮想通貨取引に例えると、ビットコイン価格の分布を示す指標と言えます。

正規分布とは、この世で最も一般的な分布とされるものであり、自然現象や人間の行動科学などによく適合する確率分布です。

ボリンジャーバンドは、正規分布に従った統計学理論が適用されています。例えば、高い確率で±2σの内側で価格は変動するという仮定をもとに将来価格を予測する前提で成り立っています。なお、確率統計学上±1σの間に収まる確率は68.3%、±2σになると95.5%、±3σになると99.7%の確率で線の内側に価格が収まるとされています。

ボリンジャーバンドは、例えば、高値側の標準偏差ライン(+σ)に価格が近付くと売りサインと捉え、安値側の標準偏差ライン(ーσ)に価格が近付くと買いサインと捉えられるのが一般的です。

【参考】テクニカル分析採用の自動取引におすすめの暗号資産(仮想通貨)取引所

スクロールできます
取引所名最低取引量現物取引手数料*1入金手数料[円]入金手数料[BTC]出金手数料[円]送金手数料[BTC]信用取引API提供ccxt自動売買おすすめ
0.0001BTCMaker:-0.01%
Taker:0.05%
無料無料0円/
400円(大口出金)
無料×★★★★★
0.0001BTCMaker:-0.02%
Taker:0.12%
無料無料550円/
770円(3万円以上)
0.0006 BTC×★★★★☆
*20.001 BTC0.01〜0.15%0〜330 円無料220〜770 円0.0004 BTC★★★★☆
0.0001 BTC無料無料無料330 円無料××★★★★☆
0.0001 BTC無料無料無料330 円0.0005 BTC★★★★★
0.005 BTC無料無料無料407円0.0005 BTC×★★★★★
表:暗号資産取引所の比較表(最低取引量の単位はBTCで記載)
補足
  1. 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。
  2. bitFlyerの取引手数料はLightningBTC現物の手数料を表示

テクニカル分析を活用した自動取引を実践した場合、短期間での暗号資産の取引回数が増加する傾向にあります。さらに、自動取引の期間にデイトレードを採用した場合、なおさら増加すると言えます。

したがって、テクニカルトレードで取引利益を最大化したい場合は「取引手数料が安い取引所を選択する」ことを推奨します。

上記に示した暗号資産(仮想通貨)取引所は全てテクニカルトレードと相性が良いおすすめ取引所です。また、以下には仮想通貨の自動取引を実践する上で必須となるAPI利用方法についても言及しています。

APIの利用方法をマスターすると自動取引で実現できる幅も広がります。是非合わせてご参考下さい。

スクロールできます
API利用手順確認API利用手順確認API利用手順確認API利用手順確認API利用手順確認API利用手順確認

【コード全て公開】ボリンジャーバンドテクニカル分析ツール

本記事では、上図の動画に示すような、ボリンジャーバンド採用の仮想通貨リアルタイムテクニカル分析を実践するためのPythonプログラミング手法について解説します。

今回は動作イメージを掴むべく、データの期間はデイトレード向けに秒単位を例として紹介しますが、ボリンジャーバンド自体はオシレーター系のテクニカル指標です。そのため、デイトレ特化で使われることはあまり点に注意が必要です。

もちろん、スイング・長期トレードにも対応したプログラムが柔軟に組めるよう合わせて詳しく解説します。

【事前準備】Python環境の構築

ボリンジャーバンドを用いた仮想通貨テクニカル分析を実行するために、Python環境を構築します。以下に示すパッケージを事前にインストールしておきましょう。

TA-Lib

Ta-Libはテクニカル分析結果を算出するためのパッケージです。以下、ご自身のOSに合ったインストール方法をご覧ください。

ccxt

仮想通貨の価格データの取得には、ccxtというパッケージを用います。次のようにインストールしましょう。

pip install ccxt

matplotlib

テクニカルチャートの可視化にはmatplotlibを用います。次のようにインストールしましょう。

pip install matplotlib

【Python実践】ボリンジャーバンドを用いた仮想通貨のテクニカル分析

実際にボリンジャーバンド採用のリアルタイムテクニカルチャートをPythonプログラムで構築していきます。

今回ボリンジャーバンドを得るために用いる仮想通貨データには、コインチェック取引所のビットコイン価格を採用しています。また、このデータの取得手段としてコインチェックが提供するAPIを利用しています。

コインチェック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【Huobi Japan】 APIで仮想通貨取引の自動化
Python【bitbank】 APIで仮想通貨取引の自動化
Python【Coincheck】APIで仮想通貨取引の自動化
Python【bitFlyer】APIで仮想通貨取引を自動化
Python【BITPOINT】APIで仮想通貨取引の自動化

機械学習やテクニカル分析を採用した仮想通貨取引の解説記事

スクロールできます
対応言語記事名指標
共通自動売買の種類・自作時のポイント全て
Pythonリアルタイムチャート分析基礎トレンド
Python移動平均線トレンド
Pythonゴールデンクロス・デッドクロストレンド
Pythonアービトラージ(裁定取引)時間・値幅
Pythonボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次