エンジニアの頭の中

フリーランスエンジニアが書く技術と投資のブログ

Pythonを使ってCryptowatchから仮想通貨のローソク足を取得する

f:id:mitsu3204:20180526205148p:plain

Index

はじめに

ボットを使用して、仮想通貨の自動売買を行うにあたり、多くのストラテジーでは、現在や過去の価格の情報を参考に売買シグナルを探索しています。 仮想通貨の自動売買を行うための第一歩として、Pythonを使って、ローソク足チャートの価格情報を取得する方法を覚えましょう。

今回は、高機能なチャートを提供しているWebサービスであるCryptowatchから、bitflyerビットコインFXのローソク足の情報を取得するコードを記載します。Cryptowatchは無料で使用可能で、APIキーも取得する必要はありません。

cryptowatch.jp

使用するライブラリ

requests

cryptowatchのRest APIを使用して、ohlcの取得を行うため、HTTP通信を行う必要があります。HTTP通信には、requestsrライブラリを使用します。requestsがインストールされていない場合、pipを使用してインストールしてください。

$ pip install requests

bitflyerビットコインFXのローソク足を取得するコード

CryptowatchのOHLC取得用APIを実行して、以下のローソク足を取得します。

OHLCとは OHLCとはローソク足チャートを形成するために必要な、始値(Open)、高値(High)、安値(Low)、終値(Close)の4種の価格のことを表します。これらの頭文字を取って、OHLCと呼ばれています。 また、OHLCの情報に、出来高(Volume)を加えたものをOHLCVと呼びます。

Python コード

from datetime import timedelta
import requests

# 昨日の日付を取得
yesterday = datetime.now() - timedelta(days=1)

# 1時間足のローソク足を1日前の分から取得するためのパラメータ
params = {
    'periods': [3600],
    'after': int(yesterday.timestamp())
}

# CryptowatchのAPIを実行して、bitflyerのbtcfxjpyのohlcを取得
res = requests.get(url='https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc', params=params)
print(res.text)

periodsには、ローソク足の長さを秒で指定します(複数指定可)。1時間は、3600秒なので、1時間足のローソク足を取得する場合は、3600を指定します。

afterは、指定した日時以降のローソク足を取得したい場合に指定するパラメータであり、ここでは1日分のローソク足を取得するため、前日のタイムスタンプを指定して実行しています。 削除して未指定のまま実行しても問題ありません。

実行結果

上記のコードを実行すると、CryptowatchのAPIから受け取ったOHLCの情報を標準出力へ出力します。 以下は、インデントを付けて見やすくしています。

{
    "result":{
        "3600":[
            [1527242400,846501,848700,842994,845497,7392.5566,6254209000],
            [1527246000,844792,851900,836334,836334,8428.927,7133342000],
            [1527249600,836334,862999,833858,853150,13270.966,11254503000],

            ... 省略 ...

            [1527332400,862285,862500,860000,860550,1327.6826,1143753100]
        ]
    },
    "allowance":{
        "cost":2156157,
         "remaining":7991468784
    }
}

Cryptowatchのohlcの実行結果の構成は、以下のようになっています。

{
    "result":{
        "<ローソク足の長さ>": [
            [日時、始値、高値、安値、終値、出来高、売買金額],
            [日時、始値、高値、安値、終値、出来高、売買金額],
        ],
        "<ローソク足の長さ>": [
            [日時、始値、高値、安値、終値、出来高、売買金額],
            [日時、始値、高値、安値、終値、出来高、売買金額],
        ]
    },
    "allowance":{
        "cost":<消費したAPIの利用可能時間>,
         "remaining":<残りのAPI利用可能時間>
    }
}

result

トップレベルにresultというキーがありますが、この直下には、ローソク足の時間長さ(5分足、1時間足など)の秒数をキーとして、ローソク足のデータが格納されています。

上記のコードでは1時間足の情報を取得しており、1時間は3600秒なので、resultの中に3600というキーに紐づけられた配列があります。この配列にローソク足一本ごとのデータが格納されています。複数の長さのローソク足をまとめて取得した場合は、3600以外のキーもまとめて返されます。

ローソク足の構成要素について、公式ドキュメントでは、出来高までしか記載がないのですが、実際には売買金額らしきものがあります。該当の数字は、価格、出来高からすると、そのローソク足の期間で取引された金額の総額と見て間違いないと考えています。

allowance

resultの次にallowanceというキーがありますが、このキーには、APIを利用した時間と、残りのAPI利用可能な時間が格納されています。(単位はナノ秒

CryptowatchのAPIは無料で利用可能ですが、利用制限があります。CryptowatchのAPIサーバのCPU利用時間で制限されており、1時間の間に、利用可能なAPIサーバのCPU時間は、8,000,000,000ナノ秒(=8秒)までとなっています。制限を超えて、APIから正常応答が得られなくなった場合でも、最悪1時間後にまた利用可能になります。CPU時間の8秒は決して短くないため、よっぽど頻繁にAPIの呼び出しを繰り返さない限り、リミットに到達することはないと思います。

まとめ

APIを使うことで、簡単にローソク足を取得することができました。 Cryptowatchには、今回使用したもの以外にもAPIはあるので、きになるかたは、公式ドキュメント(英語)をご覧ください。

Public Market REST API - Cryptowatch

今回は、価格の取得に限定して記載しましたが、仮想通貨の自動売買を行うためのライブラリであるccxtを使った注文の出し方などについても、以前の記事で説明しています。こちらもご覧ください。

www.hacky.xyz

また、上記の記事では記載していませんが、次回は、ccxtを使ったローソク足の情報の取得方法についても、記事にしたいと思います。