PoloniexのAPIを使ってトレードしてみる
目次
はじめに
前回はPush APIを使ってPoloniexのサーバーが配信するデータを自動受信してみました。
今回は通常のAPIを使って仮想通貨のトレードをしてみたいと思います。
Push APIとの違いは、何かデータを取得したいときには、毎回サーバーに対してリクエストを送信しなければいけません。
リクエストを送信すると言ってもWebブラウザのアドレスにリクエストとなるスクリプトを貼り付けるだけです。
例えばBTC_ETHの日足データを取得したい場合は、Webブラウザのアドレスに以下を張り付けてやります。
https://poloniex.com/public?command=returnChartData¤cyPair=BTC_ETH&start=1405699200&end=9999999999&period=14400
Pythonでは、urllib2というモジュールを使ってアドレスに対するサーバー側の出力を取得してやります。
import urllib2 requestStr = "https://poloniex.com/public?command=returnChartData¤cyPair=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をクリックしてやります
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状態になり下記のオーダーブックに登録されます。
成行トレードが出来ないので、これも少々扱い難いです。
自分が持っている通貨のみのバランスデータを取得したり、成行トレードする機能を追加したいですね。
そのうちpoloniex.Poloniex
をカスタムしてみたいと思います。