いまさら(2017/12/6)ながら、Poloniex API使う。
意外とすんなりと上手くいったのでAPIのレスポンスを見返すためにも残します。
- Poloniex - API DOCUMENTATIONはこちら
- APIのPHP WrapperはPoloniex - API DOCUMENTATIONにあったPHP wrapper by compcentralを使いました。
今回はPoloniexの PHP Wrapperをpolo.php
として保存し、main.php
から呼び出して実行させます.
※ APIの実行にはAPIキー
とSECRETキー
が必要なのでPoloniex HPから取得しておきます.
// 実行
php main.php ABCDEFG-YOUR-APIKEY-HIJKLMN abcd0your0secret0keys0123456789
APIキー
とSECRETキー
は環境に残しておくのはあまり好きでないので、main.php
の引数としてます
以下、main.php
で、poloniex
クラスに実装されている関数を実行し結果を残しています。
<?php
/*
* main.pnp
*/
require_once 'polo.php';
# コマンドライン引数からAPIキーとSecretキーを取得
$apy_key = $argv[1];
$secret_key = $argv[2];
$p = new poloniex($apy_key, $secret_key);
/* 以下実行結果 */
// Public API Methods
$ret = $p->get_trading_pairs();
// 利用できる通貨ペアを取得
// array(99) {
// [0] =>
// string(7) "BTC_BCN"
// [1] =>
// string(8) "BTC_BELA"
// [2] =>
// ....
// Public API Methods
$ret = $p->get_order_book("ALL");
// 現時点での注文板を表示
// var_dump($ret['XMR_ZEC']['bids']);
// array(50) {
// [0] =>
// array(2) {
// [0] =>
// string(10) "1.26728153"
// [1] =>
// double(2.1E-5)
// }
// [1] =>
// array(2) {
// [0] =>
// string(10) "1.24250061"
// [1] =>
// double(155.90149009)
// }
// Public API Methods
$ret = $p->get_volume();
// 取引総量を表示
// 'USDT_BTC' =>
// array(2) {
// 'USDT' =>
// string(17) "74938426.36199297"
// 'BTC' =>
// string(13) "6309.72084154"
// }
// 'USDT_DASH' =>
// array(2) {
// 'USDT' =>
// string(16) "2260852.12898294"
// 'DASH' =>
// string(13) "3038.97564685"
// }
// 'USDT_LTC' =>
// array(2) {
// 'USDT' =>
// string(16) "4205524.08145450"
// 'LTC' =>
// string(14) "41639.03123061"
// }
// Public API Methods
$ret = $p->get_ticker("USDT_BTC");
// 特定の通貨ペアの`Ticker`取得
// array(10) {
// 'id' =>
// int(121)
// 'last' =>
// string(14) "12438.16711453"
// 'lowestAsk' =>
// string(14) "12438.16000000"
// 'highestBid' =>
// string(14) "12430.00000019"
// 'percentChange' =>
// string(10) "0.07596601"
// 'baseVolume' =>
// string(17) "75541818.20710723"
// 'quoteVolume' =>
// string(13) "6357.91442531"
// 'isFrozen' =>
// string(1) "0"
// 'high24hr' =>
// string(14) "12497.00000000"
// 'low24hr' =>
// string(14) "11459.29472806"
// }
// Trading API Methods
$ret = $p->get_balances();
// 自分の持つ各コインの総量を取得
// array(291) {
// '1CR' =>
// string(10) "0.00000000"
// 'ABY' =>
// string(10) "0.00000000"
// 'AC' =>
// string(10) "0.00000000"
// 'ACH' =>
// string(10) "0.00000000"
// Trading API Methods
$ret = $p->buy("USDT_BTC", 12400, 0.000001);
//BTCをUSDTで買い注文. rate=12400[USDT/BTC] Amoun=0.000001[BTC]
// ※ つまり、USDTでBTCを購入.
// array(2) {
// 'orderNumber' =>
// string(12) "118649087266"
// 'resultingTrades' =>
// array(1) {
// [0] =>
// array(6) {
// 'amount' =>
// string(10) "0.00000100"
// 'date' =>
// string(19) "2017-12-06 06:49:21"
// 'rate' =>
// string(14) "12364.99999850"
// 'total' =>
// string(10) "0.01236499"
// 'tradeID' =>
// string(8) "14200718"
// 'type' =>
// string(3) "buy"
// }
// }
// }
// Trading API Methods
$ret = $p->sell("USDT_BTC", 12400, 0.000001);
// BTCをUSDTで買い注文. rate=12400[USDT/BTC] Amoun=0.000001[BTC]
// ※ つまり、所有しているBTCを売る.
// array(2) {
// 'orderNumber' =>
// string(12) "118649814538"
// 'resultingTrades' =>
// array(0) {
// }
// }
// Trading API Methods
$ret = $p->get_my_trade_history("USDT_BTC");
// 買い注文が約定されていた場合、売買履歴に記録されている.
// array(1) {
// [0] =>
// array(10) {
// 'globalTradeID' =>
// int(279065068)
// 'tradeID' =>
// string(8) "12300321"
// 'date' =>
// string(19) "2017-12-06 06:49:21"
// 'rate' =>
// string(14) "12345.999"
// 'amount' =>
// string(10) "0.00000100"
// 'total' =>
// string(10) "0.012345"
// 'fee' =>
// string(10) "0.00250000"
// 'orderNumber' =>
// string(12) "118321876662"
// 'type' =>
// string(3) "buy"
// 'category' =>
// string(8) "exchange"
// }
// }
// Trading API Methods
$ret = $p->cancel_order("USDT_BTC", 118650367984);
// 注文のキャンセル. HPの「MY OPEN ORDER」表の未決算注文をキャンセルします。
// Trading API Methods
$ret = $p->get_open_orders("ALL");
// 未決算注文の一覧を表示
//array(99) {
// 'BTC_AMP' =>
// array(0) {
// }
// 'BTC_ARDR' =>
// array(0) {
// }
// 'BTC_BCH' =>
// array(0) {
// }
// 'BTC_BCN' =>
// array(0) {
// }
// 'BTC_BCY' =>
// Trading API Methods
$ret = $p->withdraw("BTC", 0.0000001, "Sy6tu7cJ<送金先アドレス>CYr31");
// (通貨, 送金量, 送金先アドレス)
// Poloniex HPにてAPIのWithdrawals権限を有効にしていないとエラーとなります。
//
// ** API Optionsの"Enable Withdrawals"を許可してない場合 **
// array(1) {
// 'error' =>
// string(30) "Permission to withdraw denied."
// }
$ret = $p->get_total_btc_balance();
// 今保有しているコインのBTC換算量 (一部コードを修正)
// Poloniex HPの「BALANCES, DEPOSITS & WITHDRAWALS」あたりで確認しました。
// double(5.081294646709107)
Poloniex APIクラス修正
poloniex.get_total_btc_balance()の実行時にエラーがでてしまうので修正。[2017/12/6]
どうも$prices[$pair]
が配列なのに$amount
らと四則演算してしまい型のエラー? 適当に動作するように修正。Poloniex HPの「BALANCES, DEPOSITS & WITHDRAWALS」あたりで確認したところ大きく外れないので正しそう。
※ 自信はないのでミスあると教えて頂けるとありがたいです
public function get_total_btc_balance() {
$balances = $this->get_balances();
+ sleep(0.2); // 念のため
$prices = $this->get_ticker();
+ sleep(0.2); // 念のため
+ $open_orders_S = $this->get_open_orders("ALL"); // 配列保持しておき,forループ内で毎回APIを叩くのを軽減
$tot_btc = 0;
foreach($balances as $coin => $amount){
$pair = "BTC_".strtoupper($coin);
// ****************************************
// convert coin balances to btc value
// ****************************************
if($amount > 0){
if($coin != "BTC"){
- $tot_btc += $amount * $prices[$pair];
+ $tot_btc += $amount * $prices[$pair]['last'];
}else{
$tot_btc += $amount;
}
}
// ****************************************
// process open orders as well
// ****************************************
if($coin != "BTC"){
- $open_orders = $this->get_open_orders($pair); // 配列保持しておき,forループ内で毎回APIを叩くのを軽減
+ $open_orders = $open_orders_S[$pair];
+ if($open_orders == NULL) continue;
foreach($open_orders as $order){
if($order['type'] == 'buy'){
$tot_btc += $order['total'];
}elseif($order['type'] == 'sell'){
- $tot_btc += $order['amount'] * $prices[$pair];
+ $tot_btc += $order['amount'] * $prices[$pair]['last'];
}
}
}
}
return $tot_btc;
}
おまけ
Poloniexで取り扱っているキーペアの種類を吐き出すサンプルです。コーディング中に意外と探したりするので吐き出していると便利だったりします。
/*
* 取り扱いペアの一覧を吐き出し
*/
$ret = $p->get_trading_pairs();
// 以下trading_pairs.txtに吐き出し
ob_start();
var_dump($ret);
$result =ob_get_contents();
ob_end_clean();
$fp = fopen("./trading_pairs.txt", "w" );
fputs($fp, $result);
fclose( $fp );