PythonとAWSを使って、仮想通貨自動トレード その1 前半

AWS

普段の業務の中で、PythonとAWSを用いているので、勉強がてらせっかくなら何かできないかなと思っていたところ、bitbankがAPIを公開しているということで、仮想通貨の自動トレードのシステムを作ろうかなと思い立ちました。

将来的にはDeepLearning使って、過去の情報から購入判断を実施して自動に購入したり、緊急用に全ての仮想通貨を売却するためのアプリを開発したりとかしたいですが、まぁまずはできるところから!

まずは、第一弾として、ある一定時間ごとに一定量の仮想通貨を購入するシステムを構築します。

まず、CloudWatchを用いて、Lambdaを実施します。Lambdaは、bitbankのAPIへ向けて購入するためのリクエストを実施します。その際、Lambda内にbitbankでの購入するためのAPIキーと認証キーをAWS KMSで管理する暗号化キーをつかって解読してから、bitbankAPIへリクエストするという構造です。

大きく分けて2つのフェーズがあります。

  • bitbankへPythonを用いて購入のリクエストを実施
  • Lambdaへのデプロイと、CloudWatchとKMSの設定

前者では、APIキーの払い出しと実施するコードの作成を行います。後者はそのままですね。今回は前者についてお話しします。

bitbankへPythonを用いて購入のリクエスト

ローカル環境から動くスクリプトの作成が必要です。(Lambdaは複数言語に対応しているので、なんでもいいですが)今回はPythonを用います。bitbankのAPIドキュメントはこちらです。

GitHub - bitbankinc/bitbank-api-docs: Official Documentation for the bitbank.cc APIs and Streams
Official Documentation for the bitbank.cc APIs and Streams - bitbankinc/bitbank-api-docs

ただ、これを読解するのはめんどくさいです。ということで、Python用のモジュールも公開してくれているので今回はこちらを使いましょう。(めちゃくちゃありがたい!)

GitHub - bitbankinc/python-bitbankcc: Public & Private API をパイソンで扱うライブラリ
Public & Private API をパイソンで扱うライブラリ. Contribute to bitbankinc/python-bitbankcc development by creating an account on GitHub.

pipを用いているのであれば、下記を実施するだけでモジュールをインストールできます。至れり尽くせりですね。

sudo pip install git+https://github.com/bitbankinc/python-bitbankcc.git

ここからは、コードをゴリゴリ書いていきましょう。APIキーと認証キーは後から払い出すので一旦適当にしておきましょう。まずは成行注文の仕方です。ビットコインを0.0001コイン買ってみます。

import python_bitbankcc
import json

API_KEY = 〇〇
API_SECRET = △△

prv = python_bitbankcc.private(API_KEY, API_SECRET) # インスタンスの作成

# 成行注文する
value = prv.order( 
    pair = 'btc_jpy', # ペア
    amount = '0.0001', # 注文枚数
    side = 'buy', # 注文サイド
    type = 'market' # 注文タイプ
)

print(json.dumps(value))

数行ですね。prvというのはクラスオブジェクトで、orderメゾットを使うことで購入をすることができます。ペアは取引のペアを、注文サイドは購入か売却を選択、注文タイプはmarketかlimitを選択することができ、前者は成行注文、後者は指値注文を表します。

同様に指値注文のコードを見てみましょう。

import python_bitbankcc
import json

API_KEY = 〇〇
API_SECRET = △△

prv = python_bitbankcc.private(API_KEY, API_SECRET) # インスタンスの作成

# 指値注文する
value = prv.order( 
    pair = 'btc_jpy', # ペア
    price = '1300000', # 価格
    amount = '0.0001', # 注文枚数
    side = 'buy', # 注文サイド
    type = 'limit' # 注文タイプ
)
print(json.dumps(value))

price(価格)が引数に増えています。成行ではいくらなら買うか?みたいな概念はないですが、指値の場合、購入する価格を決める必要があるので、追加します。ちなみに、typeがmarket担っている場合、priceは無視されます。

あとはAPIキーと認証キーがあれば、実行できますね!

APIキーと認証キーの払い出し

イメージとして、APIキーは各々のユーザを特定するIDで(正確には1ユーザに複数発行できますが。)、それを使っていいか認証をするのが認証キーです。なので、APIキーと認証キーはめちゃくちゃ大事です、扱いには注意しましょう。これがあると自由に売買できてしまいます。

bitbankから払い出してみましょう。アカウント画面にAPIというメニューがあるので表示させてみましょう。画質が荒くてすみません。このページの「APIキーの発行」というところから発行できます。

私の場合はすでに2つ、APIキーとその認証キーが払い出されていますね。pythonは今回のために払い出したキーで、MoneyForwardはマネーフォワード用に払い出されたものです。

発行の手順はそれほど難しくないので省略しますが、途中「参照・取引・出金」という項目を選ぶシーンがあります。ここは、出金以外にチェックを入れておきましょう。一般的に最低限の権限をつけるようにするのが良いです。また、流出した時のリスクを抑えるために、キーは使い回さずに、用途で分けて発行しましょう。

スクリプトの実行

あとは、発行したキーを作成したコードに埋め込んで、実行してみましょう。重複しますが、キーの管理には注意してください。成行注文を実行すると、下のように帰ってくると思います。

これで、購入することができました。print関数を入れているので、結果が表示されます。購入した瞬間の結果が返ってきているので、ULFILLED=まだ完了していないよって返ってきますが、bitbank上の取引履歴を確認すると、0.0001購入できていることが確認できると思います。

まとめ

これで、ローカル環境から仮想通貨の購入ができるようになりました。ポイントとしては、

  • bitbankから自由に使えるモジュールが提供されているのでそれを利用してコードを書く
  • APIキーと認証キーを払い出して、スクリプトに記載、実行

というところでしょうか。それほど難しくないと思います。pythonを実行できる環境を作る方が到底難しいと思います・・・。それはまた今後。

次回は、lambdaにデプロイして、自動で購入できるようにしていきたいと思います。

(追記)後半の記事作成しました。

コメント

タイトルとURLをコピーしました