
ビットコインのシステムトレードは単にお金を増やすだけでなく、単純に楽しいプロセスです。今回はZaifのAPIを利用して売買のプログラムを実装する方法を紹介します。
はじめに
前回はbitFlyerのAPIを利用して売買のプログラムを作りました。
今回はZaifのAPIを利用して売買のプログラムを作る方法を紹介します。
ZaifのAPIを使ったシステムトレード
前提条件
以下を事前に準備してください。
- Zaifのアカウント(本人確認済)を持っていること
- Zaifの二段階認証が完了していること
- Zaifに入金済であること
- NodeJSがインストールされていること
APIキーの取得
まずはAPIキーをZaifの開発者ページから発行しましょう。
ログインしたら「アカウント -> 各種サービス -> 開発者向けAPI -> API Keys」を選択します。
二段階認証の番号を入力して「Submit」をクリックします。
名前は今回は「my-trade」としておきましょう。権限は今回は「Info」と「Trade」のみを選択して、「Create」をクリックします。
すると新しいAPIのkeyとsecretが発行されます。
これらの情報はプログラムで使用します。
プロジェクトの準備
それではプロジェクトのファイルとパッケージを準備しましょう。
$ mkdir my-trade
$ cd my-trade
$ yarn init -y
$ yarn add axios crypto qs
$ touch utils.js
$ touch order.js
$ touch cancel.js
API認証用の関数の実装
ZaifのAPI認証の仕組みはここにあります。
const crypto = require('crypto');
function generateAccessHeaders(key, secret, encodedParams) {
const sign = crypto.createHmac('sha512', secret).update(encodedParams).digest('hex');
return { key, sign };
}
module.exports = { generateAccessHeaders };
パラメーターの「encodedParams」には「qs」のライブラリでエンコードしたパラメーターを渡します。
ビットコインを売買するスクリプトの実装
メインの売買スクリプトを作りましょう。今回はパラメーターを引数で渡すのではなく、シンプルにソースコード内に記載する形にします。
「order.js」のソースコードは以下です。
const orderKind = 'buy'; // 'buy' or 'sell'
const price = 816525;
const amount = 0.001;
const API_KEY = '{your-api-key}';
const API_SECRET = '{your-api-secret}';
const axios = require('axios');
const qs = require('qs');
const BASE_URL = 'https://api.zaif.jp/tapi';
const METHOD = 'trade';
const { generateAccessHeaders } = require('./utils');
const nonce = Date.now().toString() / 1000;
let params;
if (orderKind === 'buy') {
params = {
nonce,
method: METHOD,
currency_pair: 'btc_jpy',
action: 'bid',
price,
amount
};
} else {
params = {
nonce,
method: METHOD,
currency_pair: 'btc_jpy',
action: 'ask',
price,
amount
};
}
const encodedParams = qs.stringify(params);
const headers = generateAccessHeaders(API_KEY, API_SECRET, encodedParams);
axios
.post(`${BASE_URL}`, encodedParams, { headers })
.then((response) => {
console.log(response.status);
console.log(response.data);
})
.catch((error) => {
console.error(error.response.status);
console.error(error.response.data);
});
パラメーターの設定は以下です。
- orderKind -> 買う場合は「buy」、売る場合は「sell」
- price -> ビットコインの取引金額
- amount -> ビットコインの取引量
ZaifはパブリックなAPIとプライベートなAPIでURLが異なっているので注意しましょう。
また、ZaifのAPIは指値注文しか対応していません。
ビットコインの売買をキャンセルするスクリプトの実装
「cancel.js」のソースコードは以下です。
const orderId = 'XXXXXXXXX';
const API_KEY = '{your-api-key}';
const API_SECRET = '{your-api-secret}';
const axios = require('axios');
const qs = require('qs');
const BASE_URL = 'https://api.zaif.jp/tapi';
const METHOD = 'cancel_order';
const { generateAccessHeaders } = require('./utilsZaif');
const nonce = Date.now().toString() / 1000;
const params = {
nonce,
method: METHOD,
order_id: orderId,
currency_pair: 'btc_jpy'
};
const encodedParams = qs.stringify(params);
const headers = generateAccessHeaders(API_KEY, API_SECRET, encodedParams);
axios
.post(`${BASE_URL}`, encodedParams, { headers })
.then((response) => {
console.log(response.status);
console.log(response.data);
})
.catch((error) => {
console.error(error.response.status);
console.error(error.response.data);
});
パラメーターの設定は以下です。
- orderId -> 注文実行時の返却値に含まれる「order_id」を指定する
動作確認する
それではスクリプトを実行してみましょう。実行が成功すると「order_id」が返却されます。
$ node ./order.js
200
{ success: 1,
return:
{ received: 0,
remains: 0.001,
order_id: XXXXXXXXX,
funds: [Object] } } }
注文をキャンセルしたい場合はスクリプト内に「child_order_acceptance_id」の値を設定して実行します。
$ node ./cancel.js
200
{ success: 1,
return:
{ order_id: XXXXXXXXX,
funds: { jpy: 77774.319, btc: 0.513, xem: 0, mona: 0 } } }
「success」が1であれば成功です。
最後に
いかがでしたか?取引所が提供しているAPIを使えば簡単にシステムトレードが実現できます。最近は取引所のAPIをラップしたライブラリを目にするのですが、この程度の処理であればライブラリを使う必要は全く無いでしょう。では。