Python環境(Django)からBitMEXで自動取引を行う環境を構築します。
BitMEXはこれまで取り扱ったことのない仮想通貨取引所で、自動取引を行うにあたってはAPIからの接続を実装しなくてはいけません。
これまでは取引所ごとにAPIで接続するためのプログラムをコーディングしていたのですが、今回はCCXTを使用します。
Contents
CCXTとは
CCXTとは、「CryptoCurrency eXchange Trading Library」の略で、仮想通貨取引所でトレードを行うためのライブラリです。
仮想通貨取引所ごとにAPIの接続仕様が異なりますので、ライブラリを用いない場合はそれぞれの取引所ごとに接続用プログラムを作成しなくてはならないのですが、面倒な接続処理はCCXTの方でやってくれます。
また、注文や価格情報を取得する等の仕様は取引所ごとに異なりますが、CCXTを用いることで共通化することが可能ですから、取引所ごとの違いを考えなくて良くなります。
仮想通貨で自動売買を行うのであれば是非とも入れておきたいライブラリです。
CCXTはPython, PHP, JavaScriptで使用することができます。
CCXTをインストールする
DjangoでCCXTを使用する環境を構築します。
と言っても特殊なことは何もなくて、単にPythonにCCXTをインストールするだけです。
以下のコマンドでインストールします。
pip install ccxt
Django上で動くバッチを作る
Django上で動くバッチを開発します。
management/commandsディレクトリを作成します。
mkdir -p trades/management/commands touch trades/management/__init__.py touch trades/management/commands/__init__.py
CCXTが対応している仮想通貨取引所のリストを取得する
trades/management/commands以下にトレード用プログラムを作成します。
Djangoのコマンドファイル上でCCXTを実行するプログラムです。
vi trades/management/commands/loop_trade.py
# -*- coding:utf-8 -*- from django.core.management.base import BaseCommand from ...models import Param, Porder, Corder import ccxt # BaseCommandを継承して作成 class Command(BaseCommand): # python manage.py help count_entryで表示されるメッセージ help = 'Display the number of blog articles' # コマンドが実行された際に呼ばれるメソッド def handle(self, *args, **options): print(ccxt.exchanges)
実行結果は以下のようになりました。
python manage.py loop_trade
bitmexもきちんとありますね。
Django + CCXT でBitMEXのアカウント情報を取得する
次に、BitMEXでAPIキーを発行してアカウント情報を取得してみます。
BitMEXへの口座登録とAPIキーの発行が必要です。
まだの方は以下から登録できます。
まずはbitmex_api.pyというファイルを作り、ここにAPIキー等の情報を記載します。
# -*- coding: utf-8 -*- """ Created on Thu Mar 9 12:00:27 2017 @author: zaihack """ import ccxt class bitmexApi: def bitmex(): bitmex = ccxt.bitmex({ # APIキーをご自分のものに差し替えてください 'apiKey': '発行したAPIキー', 'secret': '発行したAPIシークレット', }) return bitmex
上記のファイルをimportして、口座情報を取得します。
口座情報の取得には、CCXTのfetch_balance()を使用します。
# -*- coding:utf-8 -*- from django.core.management.base import BaseCommand from ...models import Param, Porder, Corder import ccxt from .bitmex_api import bitmexApi # BaseCommandを継承して作成 class Command(BaseCommand): # python manage.py help count_entryで表示されるメッセージ help = 'Display the number of blog articles' # コマンドが実行された際に呼ばれるメソッド def handle(self, *args, **options): balance = bitmexApi.bitmex().fetch_balance() print(balance)
結果は以下の内容が返ってきました。
(口座開設のみで、入金を行っていない状態です)
ここまでで、bitMEXへの接続確認はできましたので、次の記事では実際のトレードロジックを組んでいくところを紹介します。