Linux活用レシピ > 仮想通貨に活用 > RaspberryPiで仮想通貨の自動取引システムを作る | |
このページでは、「Raspberry Pi」と、それで動作するOS「Raspbian」を利用して、低電力の仮想通貨の自動取引システム(自動取引bot)を作る方法を紹介します。 |
|
└ 説明 準備 ├ ハードウェア ├ 開発環境準備 └ 取引所準備 取引 ├ バックテスト ├ APIの確認 └ 自動取引 製品 このレシピで作成した「日本語版 Rapbian (LibreOffice付) インストール済SDカード」\1800 は以下の販売チャネルで。 |
はじめに
◆RaspberryPiで自動取引システム(自動取引bot)を作る◆ |
pi@raspberrypi:~ $ vi gecko_get_backtest.py[ENTER] |
# ライブラリの読み込み
import numpy as np
import pandas as pd
import time
import requests
import json
import matplotlib as mpl
from pylab import rcParams
from datetime import datetime
from matplotlib import pyplot as plt
#ビットコインの価格データを取得する
def get_btcprice(ticker,max):
url = ('https://api.coingecko.com/api/v3/coins/')+ticker+('/market_chart?vs_currency=jpy&days=')+max
r = requests.get(url)
r2 = json.loads(r.text)
return r2
# 取得した価格データを整形する
# jsonから価格データだけをPandasに変換して抽出する
def get_price(r2):
s = pd.DataFrame(r2['prices'])
s.columns = ['date','price']
date = []
for i in s['date']:
tsdate = int(i/1000)
loc = datetime.utcfromtimestamp(tsdate)
date.append(loc)
s.index = date
del s['date']
return s
# 処理開始
# ビットコインの全期間の価格データを取得する
r2 = get_btcprice('bitcoin', 'max')
btc = get_price(r2)
btc
# データを可視化する
# # 変化率を計算する
change = btc['price'].pct_change()
# 変化率からトータルリターン(累積変化率)を計算する
trade_return = (change + 1).cumprod()
print("trade_return = (change + 1).cumprod()")
trade_return[0] = 1
print("trade_return[0] = 1")
print(trade_return)
trade_return = trade_return*10000
print(trade_return.head(), trade_return[-5:])
#移動平均を計算する
EMA5 = btc['price'].rolling(5).mean()
EMA25 = btc['price'].rolling(25).mean()
#変化率
trade_change = (change + 1)
print("trade_change = (change + 1)")
print(trade_change)
#print(len(btc['price']))
#トレード戦略から売買シグナルを計算する
signal = []
for i in range(len(btc['price'])):
#5日平均が25日平均より上なら買い=1とする
if EMA5[i] > EMA25[i]:
signal.append(1)
# 5日平均が25日平均より下なら売り=-1とする
elif EMA5[i] < EMA25[i]:
signal.append(-1)
else: signal.append(0)
font = {"family":"Kochi Gothic"}
mpl.rc('font', **font)
#キャンバスのサイズを大きくする
rcParams['figure.figsize'] = 15,5
# 日次変化率×トレードシグナルの累積変化率で
# トレード戦略に従ってトレードした累積リターンを算出する
backtest_return = ((change[1:-1] * signal[0:-2]) + 1).cumprod()
print("change[1:-1]")
print(change[1:-1].head(10),change[1:-1].tail(10))
print("signal[0:-2]")
print(signal[0:-2],signal[0:-2])
backtest_return = backtest_return*10000
print("change[1:-1]")
x = btc.index[0:-2]
# matplotlibでリターンの推移を可視化
plt.title('トレードリターンの比較')
plt.plot(btc, label='Bitcoin価格')
plt.plot(x, trade_return[0:-2], 'purple', label='ホールドした場合のリターン', alpha=0.3, linewidth=1.0)
plt.plot(x, backtest_return, 'orange', label='移動平均で取引した場合のリターン', alpha=1, linewidth=1.5)
plt.plot(EMA5, 'red', label='移動平均5日', alpha=1, linewidth=1)
plt.plot(EMA25, 'green', label='移動平均25日', alpha=1, linewidth=1)
plt.grid(which='both')
plt.legend()
plt.show()
pi@raspberrypi:~ $ python3 gecko_get_backtest.py[ENTER] |
以下の通り描画されます。
※画像をクリックすると拡大表示されます。
特に、以下の通りグラフの左下にある「Zoom to retangle」をクリックして・・・。
その部分が拡大表示され、自動的に再描画されるので、ごちゃごちゃした部分がより鮮明に確認でき、戦略を検討できて便利です。
以上のようにシグナルを検証し、自動取引システム(自動取引bot)で売買処理する指標を検証することができます。
なお、グラフの凡例などに日本語を用いていますが、Raspbianを日本語化していないと文字化けします。
Raspbianを日本語化するレシピは以下に紹介していますので、参考にしてください。
Raspberry Piを使ったライブストリーミング環境の製作
また、日本語化した「Rasbian」のインストール済SDカードも以下のチャンネルで販売していますので、お時間のない場合はお求めください。