ZaifのプライベートAPI(現物取引)を使って、注文操作などをしてみましょう。
以前、Zaif上で手動で注文操作等をしているのですが、今回は、その時と同じ様な流れの操作をAPIを使って実現してみます。
※手動で行った注文はざっく言うと以下の通りです。
1.買い注文を入れる
2.注文の一覧を取得する
3.注文のリミット値を変更する
4.注文のキャンセルを行う
この中で、1、2、4の操作をAPIで行ってみます。手動による注文と、APIによる注文を見比べて、同じ様に注文が通る事を確認しましょう。
コンテンツ
プライベートAPIを使って注文する
では実際に現物取引の注文をしてみましょう。
APIリクエスト用の関数は以前作っていますので、その関数を使っていきます。
ちなみに、テスト的に資産を「5,000円」だけ用意している状態です。
■アカウント画面
■注文一覧画面(現在は注文が入っていません)
では、この状態で実際に注文を発行してみましょう。
プライベートAPIの共通関数を使う
今回は様々なAPIを使おうと思っているのですが、ZaifのプライベートAPIにリクエストする場合にはお決まりの記述があるんです。
その部分は既に共通関数としてコード化しています。プライベートAPIにリクエストするための関数についてはコチラの記事を参考にして下さい。
※以降のコードの中に出現する「Zaif_Private_Req」という関数がその共通関数です。
買い注文
Zaifで注文をする場合は「trade」というメソッドを指定します。
tradeを使う場合には一つ注意点があります。パラメータの一つである”action”に、BidかAskを設定する必要があるのですが、ZaifのtradeのAPIではBidが買い。Askが売りとなります。普段私たちが使っているBidとAskとは逆になるので要注意です。
※いずれ修正になるのでは?という話もあります
今回は指値注文を入れてみようと思うのですが、実際に売買はせずに現在価格よりもずっと下に買い指値を入れておきます。注文時はやく1BTCが68万円程度だったので、65万円の買い指値を入れる事にします。また、取引数(amount)は最小の0.001にしておきます。
もしも注文が通れば650円分の資産が押さえられる事になります。
実際に注文をするコードを書いてみます。
買い注文のコード
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#注文用のパラメータ設定 params = { "method":"trade", "currency_pair":"btc_jpy", "price":650000, "action":"bid", "amount":0.001, "nonce":time() } #プライベートリクエスト用の関数にパラメータを渡す response = Zaif_Private_Req(params) print(response.json()) |
買い注文の実行結果
■コード実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "success": 1, "return": { "received": 0, "remains": 0.001, "order_id": 385254741, "funds": { "jpy": 4350, "btc": 0, "xem": 0, "mona": 0 } } } |
■実行後のアカウント画面
注文が入ったので、保有資産の650円分が仮押さえされている事が分かります。
■実行後の注文一覧画面
注文が通ったので、注文一覧画面に(先ほどプライベートAPIでリクエストした)65万円ー0.001BTCの指値注文が表示されました。
買い注文コードの解説
リクエスト用のパラメータとnonce値を設定して、リクエスト用関数に渡しています。
zaifのAPI仕様ではmethodの値を「trade」に指定すれば、注文用のリクエストが可能です。
・currency_pair(通貨ペア):btc_jpy
・action(注文の種類):bid
※Zaifの場合、bid(買い注文)もしくはask(売り注文)※bidとaskが一般的な使われ方とは逆になっている事に注意
・price(注文の価格):650000
・amount(通貨数量):0.001
・limit(リミット値):ー
・nonce(ナンス値):現在日時
また、実際に注文が通れば、successフィールドを確認してみて値が1であれば成功。0の場合はエラーとなります。
■処理結果
処理結果 | successの値 | returnの値 |
成功 | 1 | 実行結果 |
失敗 | 0 | エラーメッセージ |
■これでも注文が通らない場合は?
実行結果のHTTPステータスコードが「200」となっていればリクエスト自体の送信はOKですので、リクエストが送信できていないかな?と思ったら共通関数の方のHTTPステータスコードを確認してみて下さい。
注文一覧の取得
次は注文一覧を取得しましょう。一覧を取得する場合は「active_orders」というAPIを使います。※現時点で有効になっている注文情報だけを取得します。
先ほど買い注文を入れているので、その結果が取得できるはずです。
■注文一覧画面
では実際にAPIにリクエストをしてみましょう。
注文一覧取得コード
■Pythonコード
1 2 3 4 5 6 7 8 9 10 |
#注文一覧取得用のパラメータ設定 params = { "method":"active_orders", "currency_pair":"btc_jpy", "nonce":time() } #プライベートリクエスト用の関数にパラメータを渡す response = Zaif_Private_Req(params) print(response.json()) |
注文一覧取得コードの実行結果
■コード実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "success": 1, "return": { "385254741": { "currency_pair": "btc_jpy", "action": "bid", "amount": 0.001, "price": 650000, "timestamp": "1539410194", "comment": "" } } } |
注文一覧取得コードの解説
実際に実行をしてみると、有効になっている注文を取得する事ができました。(先ほど買い注文を入れていますので、その情報が取得できます。)
注文時とリクエストの方法はほぼ同じです。
注文一覧取得のAPIにリクエストする場合は、methodの値に「active_orders」を設定します。
・currency_pair(通貨ペア):btc_jpy
・nonce(ナンス値):現在日時
出力されるデータは注文IDがキーとなっていて、通貨ペア、注文の種類、数量、価格などがデータに格納されている事が分かります。
注文のキャンセル
次は注文のキャンセルをしてみましょう。Zaifでは「cancel_order」というAPIを使ってキャンセルする事ができます。
パラメータとして注文IDを指定する必要があるので、先ほど注文一覧で確認したID「385254741」をここに設定してみましょう。
■注文一覧画面
注文キャンセルのコード
■Pythonコード
1 2 3 4 5 6 7 8 9 10 |
#注文削除用のパラメータ設定 params = { "method":"cancel_order", "order_id":385254741, "nonce":time() } #プライベートリクエスト用の関数にパラメータを渡す response = Zaif_Private_Req(params) print(response.json()) |
注文キャンセルの実行結果
■コード実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "success": 1, "return": { "order_id": 385254741, "funds": { "jpy": 5000, "btc": 0, "xem": 0, "mona": 0 } } } |
■実行後の注文一覧
■実行後のアカウント画面(保有資産)
注文キャンセルコードの解説
キャンセルについては特別解説はいらないかもしれませんね。
キャンセルする場合のAPIにリクエストする場合、methodには「cancel_order」を設定します。
・order_id(注文ID):対象の注文IDを指定
・nonce(ナンス値):現在日時
注文一覧の取得コードで取得した「注文ID」を指定してパラメータに設定し、「cancel_order」のAPIをリクエストすればキャンセルができます。
再度注文一覧を取得してみると
さて、何も注文が入っていない状態で、再度注文一覧を取得するとどうなるのでしょうか?先程実行した注文一覧取得用のAPIを再度実行します。
■実行結果
[python]{‘success’: 1, ‘return’: {}}[/python]
注文が入っていない場合はこの様なデータが返ってきます。何も注文されていない事が分かります。
まとめ
APIを使って注文を出す事ができました。これで仮想通貨BOTによる自動売買も夢ではありません。今回は、あくまでZaifを紹介しましたが、APIへのリクエスト送信時のコードの書き方が少し違うくらいで他の取引所のAPIの場合もほぼ同じです。
今回お伝えした、
・買い(売り)注文を入れる
・注文一覧を取得する
・注文をキャンセルする
という操作は、BOTを作成する場合などには何度も使用するコードになりますので、ここでしっかりと覚えておきましょう。