こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 仮想通貨(暗号資産)や株価の自動売買に興味がある!
- Pythonでリアルタイムに変化するアニメーショングラフを描きたい!
- 移動平均線の描く方法を知りたい!
- ゴールデンクロス・デッドクロスを自動で識別できるようにしたい!
はじめに|仮想通貨のテクニカル分析
本記事では上動画のように、ビットコイン価格の移動平均線をリアルタイムに観察し、ゴールデンクロス・デッドクロスを可視化するという趣旨でプログラムの記述方法を解説します。
開発言語はPythonであり、プログラムを記述する上でのポイントは下記になります。
- リアルタイムにビットコイン価格を取得し、グラフとして可視化
- 5日移動平均線と25日移動平均線を描く
- 上記移動平均線をもとにゴールデン/デッドクロスを可視化
なお、今回は例に仮想通貨を用いましたが、他にも株価やFX等にも応用できる内容としておりますため、それら自動売買に興味がある方も是非ご覧ください。
【参考】テクニカル分析採用の自動取引におすすめの暗号資産(仮想通貨)取引所
取引所名 | 最低取引量 | 現物取引手数料*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ライブラリ呼出
- 価格データを取得する関数作成
- リアルタイムに推移する価格変動グラフ・移動平均線・ゴールデン/デッドクロスを描画
- 実行関数を記述
今回使用するビットコイン価格のデータは、GMOコインから取得しています。
「仮想通貨の自動売買ツールを作成したい!」「他にも自動売買のノウハウを知りたい!」等の興味があれば、下記の記事で実際に自動売買ツールの作成体験ができます。是非合わせてご覧ください。
【Python】GMOコインAPIで仮想通貨取引の自動売買|ビットコイン等の板情報・残高・現物信用注文の自動化方法解説
本記事は「仮想通貨の自動売買に興味がある」「自動売買ツールを自作したい」という方を対象としたプログラム解説記事です。
必要なPythonライブラリを呼出
まずプログラムを構築する上で必要なPythonライブラリをインポートします。下記のように記述しましょう。
import json
import requests
from time import sleep
from itertools import count
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.animation import FuncAnimation
plt.style.use('fivethirtyeight')
mpl.use('TkAgg')
価格データを取得する関数作成
続いてグラフを描くために必要なビットコイン価格情報を取得するコードを記載します。
今回はGMOコインのビットコイン価格を例としていますが、この関数の出力値を別の暗号資産取引所に変更したり、株価やFX等に書き換えると、後述のコードが別の自動売買ツールとしても応用できるようになります。
# GMOコイン 板情報
def gmo_table():
ita_prep = requests.get('https://api.coin.z.com/public/v1/ticker?symbol=BTC')
ita = ita_prep.json()['data'][0]
return ita
GMOコインのパブリックAPIを用いてビットコインの価格データを取得し、値を出力できるような関数を記述しています。
移動平均線・ゴールデン/デッドクロスを描画
今回の趣旨である「移動平均線」「ゴールデンクロス・デッドクロスの識別」がリアルタイムで表現できるグラフ関数を作成します。
短期移動平均線には5(日・時間・秒)平均、長期移動平均線には25(日・時間・秒)平均のいづれかを用いてゴールデンクロス・デッドクロスを可視化できるようにします。
x = [] # x軸
index = count() # x軸(カウント)
y_gmo = [] # gmo(ask)
y_5day = [] # 5日移動平均
y_25day = [] # 25日移動平均
# グラフ可視化関数
def animate(i):
# GMOコイン(買値)
gmo_ask = float(gmo_table()["ask"])
# リスト格納
x.append(next(index))
y_gmo.append(gmo_ask)
# 5(日・時間・秒)
if len(y_gmo) >= 5:
x1 = 0
MA_5 = sum([x1 + y_gmo[-i-1] for i in range(5)])/5
else:
MA_5 = None
y_5day.append(MA_5)
# 25(日・時間・秒)
if len(y_gmo) >= 25:
x2 = 0
MA_25 = sum([x2 + y_gmo[-i-1] for i in range(25)])/25
else:
MA_25 = None
y_25day.append(MA_25)
# ゴールデンクロス/デッドクロス
if len(y_25day) > 25:
if (y_5day[-1] > y_25day[-1] ) & (y_5day[-2] < y_25day[-2]):
text = "Golden Cross!"
elif (y_5day[-1] < y_25day[-1] ) & (y_5day[-2] > y_25day[-2]):
text = "Dead Cross!"
else:
text = "No Trend"
else:
text = "No Trend"
#グラフ設定
plt.cla()
if text == "No Trend":
plt.title(text,color="black", size=20)
else:
plt.title(text,color="red", size=50)
plt.xlabel("Time")
plt.ylabel("Bitcoin[BTC]")
plt.plot(x,y_gmo ,label="GMO Coin")
plt.plot(x,y_5day ,label="MA_5days")
plt.plot(x,y_25day ,label="MA_25days")
plt.legend(loc="upper left")
plt.tight_layout()
実行関数を記述
最後にPythonスクリプトを実行するためのコードを以下のように記載します。
# アニメーショングラフ適用(インターバル:1秒)
ani = FuncAnimation(plt.gcf(),animate,interval=1000) # デイトレ向け
# ani = FuncAnimation(plt.gcf(),animate,interval=86400*1000) # スイングトレード向け
# グラフ表示
plt.tight_layout()
plt.show()
グラフを表示する頻度はFuncAnimation()メソッドを用いて設定できます。
デイトレ・スイングトレード等の自動売買の目的に合わせてグラフの表示頻度を設定するのがおすすめです。
グラフの表示頻度 | FunctionAnimation()修正内容 | 意味 |
---|---|---|
デイトレード向け | interval=1000 | 1秒毎にグラフを更新 |
スイングトレード向け | interval=86400*1000 | 1日毎にグラフを更新 |
5日,25日移動平均線を表現したい場合は、スイングトレード向けの設定方法を参照ください。デイトレ向けの設定にしたい場合はコードのこのまま利用できます。
これでスクリプトが完成です!ターミナルまたはコマンドプロンプトを開き、作成したPythonスクリプトを実行しましょう。
本記事紹介したビットコインチャート分析コードの全量
今回ご紹介したコードを全て下記に掲載しました。
まずはコピペで動作確認してみたいという方はこちらを活用下さい。
import json
import requests
from time import sleep
from itertools import count
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.animation import FuncAnimation
plt.style.use('fivethirtyeight')
mpl.use('TkAgg')
# GMOコイン 板情報
def gmo_table():
ita_prep = requests.get('https://api.coin.z.com/public/v1/ticker?symbol=BTC')
ita = ita_prep.json()['data'][0]
return ita
x = [] # x軸
index = count() # x軸(カウント)
y_gmo = [] # gmo(ask)
y_5day = [] # 5日移動平均
y_25day = [] # 25日移動平均
# グラフ可視化関数
def animate(i):
# GMOコイン(買値)
gmo_ask = float(gmo_table()["ask"])
# リスト格納
x.append(next(index))
y_gmo.append(gmo_ask)
# 5日移動平均
if len(y_gmo) >= 5:
x1 = 0
MA_5 = sum([x1 + y_gmo[-i-1] for i in range(5)])/5
else:
MA_5 = None
y_5day.append(MA_5)
# 25日移動平均
if len(y_gmo) >= 25:
x2 = 0
MA_25 = sum([x2 + y_gmo[-i-1] for i in range(25)])/25
else:
MA_25 = None
y_25day.append(MA_25)
# ゴールデンクロス/デッドクロス
if len(y_25day) > 25:
if (y_5day[-1] > y_25day[-1] ) & (y_5day[-2] < y_25day[-2]):
text = "Golden Cross!"
elif (y_5day[-1] < y_25day[-1] ) & (y_5day[-2] > y_25day[-2]):
text = "Dead Cross!"
else:
text = "No Trend"
else:
text = "No Trend"
#グラフ設定
plt.cla()
if text == "No Trend":
plt.title(text,color="black", size=20)
else:
plt.title(text,color="red", size=50)
plt.xlabel("Time")
plt.ylabel("Bitcoin[BTC]")
plt.plot(x,y_gmo ,label="GMO Coin")
plt.plot(x,y_5day ,label="MA_5days")
plt.plot(x,y_25day ,label="MA_25days")
plt.legend(loc="upper left")
plt.tight_layout()
# アニメーショングラフ適用(インターバル:1秒)
ani = FuncAnimation(plt.gcf(),animate,interval=1000) # デイトレ向け
# ani = FuncAnimation(plt.gcf(),animate,interval=86400*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を活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら