【初心者向け】Zaif API×Pythonでプチフィンテック12 発注処理の自動化

今回は、いよいよ仮想通貨取引botの中核となる、発注処理の自動化方法について説明していきます。

<スポンサーリンク>

今回作成するプログラムの概要

まず、今回の記事で、どのようなプログラムを作成するのか説明します。

作成するプログラムでは、ビットコインを日本円で購入する注文を出します。

条件は以下の通りとします。

項目 内容
取引通貨 BTC/JPY
取引種類 買い(bid)
注文価格 \100,000
注文数量 0.0001
リミット(いくら上がったら売るか) \200,000

上記内容について、少し補足します。

まず、取引種類は買い(bid)と売り(ask)の2種類があります。今回はビットコインを購入しますので、取引種類は「bid」を指定することになります。

また、注文価格と注文数量は、取引する通貨ペア毎に指定できる値に制限があります。ビットコインを日本円で取引する場合、注文価格は5円刻み、注文数量は0.0001単位で指定する必要があります。

さて、この条件で発注処理を行うことにより、「ビットコインが\100,000円になったら0.0001単位購入し、価格が\200,000上がったら(\300,000になったら)売る」という注文を出すことができます。

なお、本記事執筆時点(2018年2月6日時点)のレートでは、注文はされますが価格が\100,000までは下がらず、約定する可能性は低いと思います。しかしながら、今回はあくまでも発注処理のテストであり、実際に注文が行われることのみを確認することが目的ですので、プログラムミスにより意図せぬ約定がされてしまう可能性も考慮して、上記条件は意図的に設定しています。

また、発注処理は現物取引APIの中の1つのAPIを用いて実装しますが、基本的な流れは前回説明した現物取引APIの流れと全く同様です。基本的には、HTTPリクエストを作成する際に使用するパラメータを、発注用のものに置き換えるだけで、処理を行うことができます。

それでは、早速プログラムの実装へ移りましょう。

プログラム実装

まずは、PyCharmを開き、新規にPythonファイルを作成します。ここでは、「tradetest2」という名称で作成しますが、特に決まりはありませんので、お好きな名称を付けても結構です。

ファイルを作成しましたら、第9回目に掲載したサンプルプログラムの内容を丸々コピーして貼り付けます。

前回の記事でAPIキーを取得することにより、現物取引APIを利用できる準備が整いました。 そこで今回は早速、現物取引APIを利用してみ...

このコードをベースとして、必要な箇所を修正していきましょう。

①注文に必要な基礎情報の記述

前述の条件に即して、取引通貨ペア等の基礎情報をプログラム中に記述します。

~省略~
KEY = "XXX" #前回取得した「key」を「"」で括って記述
SECRET = "XXX" #前回取得した「secret」を「"」で括って記述
CURRENCY_PAIR = 'btc_jpy' #追加
ORDER_PRICE = 100000 #追加
AMOUNT = 0.0001 #追加
LIMIT = 200000 #追加
~省略~

KEYとSECRETの記述に続けて、CURRENCY_PAIR(取引する通貨ペア)、ORDER_PRICE(注文価格)、AMOUNT(注文数量)、LIMIT(リミット)の4つの変数・値を追加しています。

ここで追記した4つの変数を、以降の処理で使っていきます。

②パラメータの設定

続いて、発注用APIを用いる際に指定すべきパラメータを記述します。既存の「params」から始まるブロックを、以下のように上書きします。

~省略~
params = { #このブロックを上書き
    'method': 'trade',
    'nonce': time(),
    'currency_pair': CURRENCY_PAIR,
    'action': 'bid',
    'price': ORDER_PRICE,
    'amount': AMOUNT,
    'limit': ORDER_PRICE + LIMIT
}
~省略

今回指定したパラメータの形式は、前回紹介した資産情報を取得するためのAPI利用時と全く同様で、「どのAPIを利用するか」と「API毎に決められた情報」の2つから構成されています。

「どのAPIを利用するか」に該当する部分が「’method’: ‘trade’」という記述です。Zaif APIでは発注処理を行う際、現物取引APIの中の「trade」というAPIを指定する必要があります

また、「API毎に決められた情報」について、「trade」APIでは以下の情報をパラメータとして指定する必要があります。

パラメータ 内容
nonce (必須)任意の数値情報を指定。前回紹介した内容と全く同様
currency_pair (必須)取引対象の通貨ペアを指定
action (必須)買い注文はbid、売り注文はaskを指定
price (必須)発注価格を指定
amount (必須)注文数量を指定
limit (任意)リミットを指定

limit以外の情報は必ず指定する必要がある点に留意下さい。

③response表示行のコメントアウト

ベースとしているコードの最後には、responseを表示するためのprint関数が記述されています。

この行は、第9回の資産情報を表示するためのAPI利用時には必要でしたが、今回は一旦不要ですので、以下のようにコメントアウト(コメントとして扱うことにより、機能を無効化する)しておきます。

~省略~
#print(response.text)

テスト実行

それでは、指定した条件に基づき正しく注文処理が行われるか、プログラムを実行して確認してみましょう。

まず、プログラムを実行するとPyCharm上には「Process finished with exit code 0」とだけ表示されます。

ここで、Zaifにログインし、注文情報を確認してみましょう。

以下のように、指定した条件通りの注文が表示されていれば、プログラムの作成は成功です。

終わりに

今回の記事で、botの中核となる発注処理のやり方を解説しました。

そろそろ実際にbotの開発に移りたいところですが、もう数点だけ、botが正しく稼働するための周辺処理を紹介させて下さい。

その周辺処理の1つとして、現物取引API特有の異常対応が挙げられます。

例えば、口座に十分な資金が無い状態で注文処理を行った場合、サーバは当然エラーを返しますが、その取扱い方法は現物公開APIの使い方の中で紹介した異常対応の方法とはまた異なるものです。

そこで次回は、この現物取引API特有のエラー処理について解説していきたいと思います。

カテゴリ:フィンテック
<スポンサーリンク>

シェアする

フォローする