Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

PoloniexのAPIを使ってトレードしてみる

目次

はじめに

前回はPush APIを使ってPoloniexのサーバーが配信するデータを自動受信してみました。

今回は通常のAPIを使って仮想通貨のトレードをしてみたいと思います。

Push APIとの違いは、何かデータを取得したいときには、毎回サーバーに対してリクエストを送信しなければいけません。

リクエストを送信すると言ってもWebブラウザのアドレスにリクエストとなるスクリプトを貼り付けるだけです。

例えばBTC_ETHの日足データを取得したい場合は、Webブラウザのアドレスに以下を張り付けてやります。

https://poloniex.com/public?command=returnChartData&currencyPair=BTC_ETH&start=1405699200&end=9999999999&period=14400

Pythonでは、urllib2というモジュールを使ってアドレスに対するサーバー側の出力を取得してやります。

import urllib2

requestStr = "https://poloniex.com/public?command=returnChartData&currencyPair=BTC_ETH&start=1405699200&end=9999999999&period=14400"
ret = urllib2.urlopen(urllib2.Request(requestStr))

print(ret.read())

詳細はPoloniexのAPIドキュメント参照してください。最初は英語で長々書いてあって躊躇してしまいましたが、頑張って読んでみるとそんなに大したことありませんでした。

urllib2を使ってデータを取得すると結構面倒なのでGithubで公開されているpython-poloniexをつかった方が楽です。使い方は過去の記事を参照してください。

仮想通貨の価格等、ユーザーとは関係ないデータを取得するAPIをPublic API。またユーザーの取引履歴の取得や仮想通貨の売買をするAPIをTrading APIと呼びます。

Trading APIを使うときには、API使用時用のIDとパスワードに相当するAPI KeyとSecretを事前に取得する必要があります。

API KeyとSecretの取得

API KeyとSecretはAPIを使うときのIDとパスワードに相当するものです。

PoloniexのサイトにWebブラウザ上からログインするときのIDとパスワードとは別に取得する必要があります。

API KeyとSecretの取得は、Poloniexのサイトにログイン後、右上のスパナのアイコンをクリックしてAPI KEYSをクリックしてやります

f:id:darden:20161019213741p:plain

Create New Keyというボタンがどどーんと出てくるので、そのボタンをおして後はページの指示に従って進んでやるとAPI KeyとSecretを取得することができます。3回ほどメール認証が必要です。

APIの使い方

バランスデータの取得

以下、python-poloniexを使ってバランスデータを取得する例です。取得したAPI KeyとSecretをmyAPIKeyとmySecretに記述してください。

import poloniex

myAPIKey="************************"
mySecret="************************************************"

polo = poloniex.Poloniex(Key=myAPIKey, Secret=mySecret, timeout=10, coach=True)
balance = polo.returnCompleteBalances()
balance

poloniex.Poloniexの引数、timeoutはサーバー応答の待ち時間(秒で指定します)になります。上の例では10秒経ってもサーバーから応答がない場合はエラーになります。

coachは、Poloniexサーバーへのアクセス間隔を調整する機能をオンにするかどうかを指定する引数です。

Poloniexのサーバーは1秒間に6回以上アクセスすると、そのIPアドレスからの通信が拒否されてしまいます。

coach = Trueにしておくと、1秒間に6回以上アクセスしない設定になります。デフォルトではFalseになっているので、これは絶対Trueにしておきましょう。

上のスクリプトを実行すると、以下のように辞書の中に辞書が入った形式(一般的にjson形式というらしいです)で全バランスデータが取得できます。

{u'1CR': {u'available': u'0.00000000',
  u'btcValue': u'0.00000000',
  u'onOrders': u'0.00000000'},
 u'ABY': {u'available': u'0.00000000',
  u'btcValue': u'0.00000000',
  u'onOrders': u'0.00000000'},
 u'AC': {u'available': u'0.00000000',
  u'btcValue': u'0.00000000',
  u'onOrders': u'0.00000000'},
 u'ACH': {u'available': u'0.00000000',
...

availableは持っている通貨の量、btcValueは持っている通貨のBTC換算値、onOrdersは取引が成立していないオーダー中の通貨の量を表しています。

Poloniexで扱っている全通貨のデータが出てくるので、少々扱い難いです。

トレードしてみる

以下売買のコマンドになります。

例えば、0.02BTC(Bitcoin)で10ETH(Ethereum)を買いたい場合は、以下のようにしてやります。

polo.buy("BTC_ETH",0.02,10)

反対に、0.02BTC(Bitcoin)で10ETH(Ethereum)を売りたい場合は、以下のようにしてやります。

polo.sell("BTC_ETH",0.02,10)

取引が成立しない場合は、取引が成立するまでonOrders状態になり下記のオーダーブックに登録されます。

f:id:darden:20161019224227p:plain

成行トレードが出来ないので、これも少々扱い難いです。

自分が持っている通貨のみのバランスデータを取得したり、成行トレードする機能を追加したいですね。

そのうちpoloniex.Poloniexをカスタムしてみたいと思います。