【Python×仮想通貨】移動平均線の算出方法|ビットコインのリアルタイムテクニカル分析・自動取引入門

こんにちは、Kosei(@kay_diacc2)です!

こんな方におすすめ!
  • テクニカル分析を採用した仮想通貨の自動売買に興味がある
  • Pythonで移動平均線を用いた仮想通貨のテクニカル分析を実践したい
目次

移動平均線とは

移動平均線(Moving Average)とは、ある一定期間の価格から平均値を算出し、その平均値を繋いだ曲線として表現したものを指します。現在と過去数日(または数週間・数ヶ月)分の価格を定期的に計算することで、平均値が表面上移動しているように見えることから、移動平均と呼ばれています。

移動平均線は、トレンドを察知する代表的なテクニカルインジケーターであり、現在価格が「上昇・下降どちらの傾向にあるのか?」を明確化することに役立ちます。

代表的な移動平均線の種類として以下があります。

  • 単純移動平均(SMA)
  • 指数移動平均(EMA)

単純移動平均(SMA)

単純移動平均線は、単に移動平均線とも呼ばれ、当日から遡ったある一定期間の価格平均値を1日(または分・時間・週間)ずつずらし、グラフ化した曲線です。上記のような式で計算できます。

指数平滑移動平均(EMA)

指数平滑移動平均線は、個々の価格データに対する加重を「指数関数的」に減少させて、平均値を計算した曲線を差し、上記のような数式で算出可能です。

移動平均線に指定するデータ期間

移動平均線は、デイトレやスイングトレード、長期トレードなどの取引目的に応じて検討すべきデータ期間が変わります。

スイングトレードの場合は、日足チャートを用いて5日や25日移動平均線を算出し、トレンドを観察します。

長期トレードの場合は、週足チャートを用いて13週移動平均線や26週移動平均線などが一般的に用いられます。

移動平均線の応用例|ゴールデンクロス・デッドクロス

移動平均線は、MACDやボリンジャーバンドなど、他のテクニカル分析にも応用されています。その中でも移動平均線を用いたトレンド分析の代表手法としてゴールデンクロス・デッドクロスがあります。

短期移動平均線が長期移動平均線を下から上に交差することをゴールデンクロスといい、上昇トレンドのシグナルとして用いられています。反対に、短期移動平均線が長期移動平均線を上から下に交差することをデッドクロスといい、下降トレンドのシグナルとして用いられています。

仮想通貨の価格推移に基づき、Pythonプログラミングを用いてゴールデンクロスおよびデッドクロスを可視化する方法について以下の記事で解説しています。

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

スクロールできます
取引所名最低取引量現物取引手数料*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×★★★★☆
bitFlyer*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現物の手数料を表示
  3. 期間限定で4/22〜6/30に口座開設&72時間以内入金を行うと、対象者全員に2,500円相当のビットコインプレゼントとのこと!

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

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

上記に示した暗号資産(仮想通貨)取引所は全てテクニカルトレードと相性が良いおすすめ取引所です。また、以下には仮想通貨の自動取引を実践する上で必須となる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'

【参考】単純移動平均線

単純移動平均線は、TA-LibのSMA()メソッドを用いることで容易に導出できます。データの取得元と移動平均線の期間を引数として渡し、次のように記述します。

ここで数分・数時間間隔のデータをデータ取得元に指定するとデイトレ向けのトレンド解析ができ、日次データを指定するとスイングトレード向けのトレンド解析に対応できるようになります。

# 引数情報
period = 10

# 単純移動平均線
ma_sma = talib.SMA(data['price data'],   # データ取得元
                   period)               # 移動平均線の期間

# 出力
print(ma_sma)

【参考】指数移動平均線

指数移動平均線の場合は、TA-LibのEMA()メソッドを用いることで導出可能です。引数の指定方法は前述の単純移動平均線と同じになります。

# 引数情報
period = 10

# 単純移動平均線
ma_ema = talib.EMA(data['price data'],   # データ取得元
                   period)               # 移動平均線の期間

# 出力
print(ma_ema)

移動平均線のリアルタイム観察・グラフ可視化

移動平均線のリアルタイム観察を可能にするコードを下記に示します。

今回は例として、スパンの短い5秒短期移動平均線と20秒移動平均線を用いて動的グラフを表現します。

# グラフ軸
index        = count() # x軸(カウント)
x            = []      # x軸
btc_price    = []      # ビットコイン価格

# グラフ可視化関数
def animate(i):

    # X軸データ追加
    x.append(next(index))

    # コインチェック価格取得
    btc_price.append(ticker_info()["ask"])

    # 短期移動平均線(5)
    ema_5s = talib.EMA(pd.Series(btc_price),   # データ
                       5)                      # 移動平均

    # 長期移動平均線(20)
    ema_20s = talib.EMA(pd.Series(btc_price),  # データ
                        20)                    # 移動平均

    # グラフ設定
    plt.cla()
    plt.title("移動平均線:テクニカル分析")
    plt.xlabel("時間")
    plt.ylabel("Bitcoin価格[BTC]")
    plt.plot(x, btc_price ,color="blue",      label="Bitcoin価格")
    plt.plot(x, ema_5s    ,color="lightblue", ls='--', label="短期移動平均(5)")
    plt.plot(x, ema_20s   ,color="darkblue",  ls='--', label="長期移動平均(20)")
    plt.legend(loc="upper left")
    plt.tight_layout()

# アニメーショングラフ適用
ani = FuncAnimation(plt.gcf(),animate,interval=1000)

# グラフ表示
plt.tight_layout()
plt.show()

【まとめ】プログラミングコード全量

前述したプログラミングコードの全量を以下にまとめて示します。

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"])

    # 短期移動平均線(5)
    ema_5s = talib.EMA(pd.Series(btc_price),   # データ
                       5)                      # 移動平均

    # 長期移動平均線(20)
    ema_20s = talib.EMA(pd.Series(btc_price),  # データ
                        20)                    # 移動平均

    # グラフ設定
    plt.cla()
    plt.title("移動平均線:テクニカル分析")
    plt.xlabel("時間")
    plt.ylabel("Bitcoin価格[BTC]")
    plt.plot(x, btc_price ,color="blue",      label="Bitcoin価格")
    plt.plot(x, ema_5s    ,color="lightblue", ls='--', label="短期移動平均(5)")
    plt.plot(x, ema_20s   ,color="darkblue",  ls='--', label="長期移動平均(20)")
    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【BITPOINT】APIで仮想通貨取引の自動化

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

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

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

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

最後に

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

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる