Python

【実践】Pythonで仮想通貨データを取得して分析してみよう!

virtualcoin
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、データサイエンスの実践として仮想通貨のデータを使った分析を解説していきます!実データをもとに仮想通貨の売買手法をマスターしていきましょう!

こんにちは!スタビジ編集部です!

この記事ではデータサイエンスの実践として”仮想通貨“を使った分析を解説していきます!

ロボたん
ロボたん
最近データサイエンス界隈でも、仮想通貨を使った分析って流行っているよね!なんだか難しそうだけど、、、
ウマたん
ウマたん
そうだね!仮想通貨を自動で売買するBotを開発して稼ぐ”botter“という人が増えているね!

せっかくだし勉強してみよう!

今回は実際に手を動かしつつ「仮想通貨データの取得」~「仮想通貨のデータの分析」までの一連の流れをマスターしましょう!

仮想通貨データの取得

まずは仮想通貨のデータを取得していきましょう!

データの取得にはAPIを利用します!

APIとはアプリケーションプログラミングインターフェースの略であり、ソフトウェアを通して機能などをつなげることのできる仕組みです!

APIについて詳しく知りたい方は以下の記事をチェックしてみてください!

PythonのAPIを利用
【5分で分かる】Pythonを使って様々なサービスのAPIを利用してみよう!当サイト【スタビジ】の本記事では、Pythonを使ってSlackやGoogleのAPIを利用していきます!APIを利用することで非常に様々なことができるので是非試してみましょう!APIを使えるようになると幅が広がりますよ!...

仮想通貨を扱う仮想通貨取引所の多くでは2種類のAPIを用意しています

  • Public API“:認証が不要、取引所の注文状況や公開されている取引の履歴、板情報を参照出来ます
  • Private API“:APIキーによる認証が必要、取引所での新規注文やそのキャンセル、自分の残高などを確認出来ます

今回は仮想通貨取引所「Coincheck」で用意されているAPIを利用して、ビットコインの最新情報を取得します!

Public APIを利用するので、Coincheckへの会員登録などは不要です

import requests
from pprint import pprint

endpoint = 'https://coincheck.com'
path = '/api/ticker'
url =endpoint + path

pair = {
    'pair': 'btc_jpy' 
}

r = requests.get(url, params = pair)
pprint(r.json())

CoincheckではベースのURL「https://coincheck.com」に各APIのURL「/api/~」を組み合わせたものにアクセスすることで各種APIを利用できます!

最新情報を取得する場合「ティッカー」というAPIを利用するので、リクエスト先は「https://coincheck.com」+「/api/ticker」となります

また、パラメーターで取得したいコインの種類を指定することも出来ます

{'ask': 5458579.0,
 'bid': 5457080.0,
 'high': 5482155.0,
 'last': 5457510.0,
 'low': 5391070.0,
 'timestamp': 1648365754,
 'volume': 936.2452743}

実行結果を見てみると、データが収集出来ているのがわかりますね!

  • ask:現在の売り注文の最安価格
  • bid:現在の買い注文の最高価格
  • high:24時間での最高取引価格
  • last:最後の取引の価格
  • low:24時間での最安取引価格
  • volume:24時間での取引量
  • timestamp:現在の時刻

Private APIを使うと実際に注文したりビットコインを送信したりできるので是非公式ページを見てみてください!

また、取引所のAPIによって取得できる通貨の種類や情報が異なるので、ぜひ試してみてください!

ウマたん
ウマたん
仮想通貨は利用できるAPIが豊富!ぜひいろんな情報を取得してみよう!

仮想通貨データの分析

次は実際に取得した仮想通貨データの値を用いて「買う」or「売る」を判別するアルゴリズムを実装していきたいと思います!

今回は自動仮想通貨Botでよく用いられる”ボリンジャーバンド“という指標を使っていきます!

ボリンジャーバンド“とは、一定期間の価格データの平均(移動平均線)を中心として、値動きの振れ幅を標準偏差として表示するテクニカル指標の一つです

$$ ±nσ=移動平均(ma_i)±標準偏差(s)×n$$

ボリンジャーバンドを可視化するとこんな感じです

plt.figure(figsize=(15,5))
plt.plot(df.index, df["Close"], label="Close", color='black', linestyle='solid', linewidth = 5.0)
plt.plot(df.index, df["sma"], label="sma")
plt.plot(df.index, df["-1σ"], label="-1σ", color='red')
plt.plot(df.index, df["+1σ"], label="+1σ", color='red')
plt.plot(df.index, df["-2σ"], label="-2σ", color='green')
plt.plot(df.index, df["+2σ"], label="+2σ", color='green')
plt.plot(df.index, df["-3σ"], label="-3σ", color='purple')
plt.plot(df.index, df["+3σ"], label="+3σ", color='purple')
plt.legend()

仮想通貨のデータだとデータ量が少ないので、説明のため「株データ」を用いています

virtualcoin

統計学的に相場が正規分布に従う場合、価格は以下の確率でボリンジャーバンド内に収まることになります

  • n=1の時、ボリンジャーバンド内に収まる確率⇒約68.3%
  • n=2の時、ボリンジャーバンド内に収まる確率⇒約95.4%
  • n=3の時、ボリンジャーバンド内に収まる確率⇒約99.7%

上の図では赤線の範囲内が±1σ、緑線の範囲内が±2σ、紫線の範囲内が±3σとなります

こう見ると±2σはだいぶ幅が広く、超えることはなかなかなさそうなのが直感で分かりますね

ボリンジャーバンドの見方は様々ありますが、今回は単純に取得した値が±1σをはみ出したら売買のタイミングとします!

virtualcoin

では「仮想通貨の情報を取得して売買の判定」をする実装を見ていきましょう

import time
import pandas as pd

#1分間に一回情報を取得する
interval = 60
#移動平均期間
duration = 5

df = pd.DataFrame()

while True:
    time.sleep(interval)
    df = df.append(
        {'price': r.json()['last']}, ignore_index=True
    )
    if len(df) < duration:
        continue

    df['SMA'] = df['price'].rolling(window=duration).mean()
    df['std'] = df['price'].rolling(window=duration).std()

    df['-1σ'] = df['SMA'] - df['std']*1
    df['+1σ'] = df['SMA'] + df['std']*1
    print(df)
    # 取引価格が-1σを下回ったら買いを入れる
    if df['price'].iloc[-1] < df['-1σ'].iloc[-1]:
        print('購入する!')

    # 取引価格が+1σを超えたら売りを入れる
    if df['+1σ'].iloc[-1] < df['price'].iloc[-1]:
        print('売却する!')

rは先ほどの取得した最新情報(r = requests.get(url, params = pair))です

  1. 取得した最新の情報から取引情報(last)を取り出してデータフレームに”price”として格納します
  2. データが集まったら、移動平均と標準偏差を算出し、ボリンジャーバンドの計算を行います
  3. 取引価格がボリンジャーバンド内に収まるか否かを判定します!

やっていることは「データを取得」⇒「計算」⇒「判定」とめちゃくちゃ複雑ではないな~と実感できたかと思います!

実際の自動売買Botでは売買の部分にPrivate APIを用いて仮想通貨の売り買いを実現しています!

ウマたん
ウマたん
一通り仮想通貨のデータを取得して手を動かしてみると案外最初に感じてた難しい印象はとれたかな!

売買のロジックを考えるのは大変だけど、ぜひいろんな手法を試してみよう!

Pythonで仮想通貨データの分析まとめ

今回は仮想通貨取引所のAPIを利用して、Pythonで「仮想通貨データの取得」から「仮想通貨データの分析」まで学んでいきました!

今回はBotの作成まではいきませんでしたが、手を動かしながら仮想通貨を売買する仕組みに触れられたので、自動売買Botへの難しそうというハードルは下がったかなと思います!

ぜひ、いろんな統計手法を試しながら、自分だけの売買アルゴリズムを作っていきましょう!

データ分析のやり方について学びたいという方は以下の講座がオススメです!

【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座

Udemy-course
【オススメ度】
【講師】ウマたん
【時間】4時間
【レベル】初級~中級
\ただいま激安セール中/

Pythonで実際にデータを分析してみたいという方は以下の記事で株データ分析をしているのでぜひチェックしてみてください!
stock
【実践】Pythonで株の取引データを分析し予測してみよう!当サイト【スタビジ】の本記事では、データサイエンスの実践として株データを使った分析を解説していきます!実データをもとに学習した手法をマスターしていきましょう!...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!
スタアカトップ

スタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら