PHPを使って Coincheck のBTC現物注文・新規注文APIのサンプルコードを以下に記します。
当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。
当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。
あらかじめご了承ください。
残高APIはPrivate APIのため、
Coincheck
の口座開設が必要となります。
本PHPサンプルコードでは、BTCのレバレッジ取引のサンプルコードを公開しています。
order_typeをレバレッジ取引にした程度で、現物の新規注文とほとんど同じサンプルコードとなります。
新規注文APIの仕様(Coincheck APIページから抜粋)
新規注文 取引所に新規注文を発行します。 たとえば、10 BTC を 30000 JPY/BTC で買いたい場合は、以下のように指定します。 rate: 30000, amount: 10, order_type: "buy", pair: "btc_jpy" 買い注文の場合、指定した価格よりも低い価格での売り注文が既に存在していれば、その売り注文を安い順に決済します。売り注文が足りなかった場合は未決済の注文として残ります。売り注文の場合も同様です。 注文方法について order_type は全部で8つあります。 "buy" 指値注文 現物取引 買い "sell" 指値注文 現物取引 売り "market_buy" 成行注文 現物取引 買い "market_sell" 成行注文 現物取引 売り "leverage_buy" 指値注文 レバレッジ取引新規 買い "leverage_sell" 指値注文 レバレッジ取引新規 売り "close_long" 指値注文 レバレッジ取引決済 売り "close_short" 指値注文 レバレッジ取引決済 買い <省略> POST /api/exchange/orders PARAMETERS *pair 取引ペア。現在は "btc_jpy" のみです。 *order_type 注文方法 rate 注文のレート。(例)28000 amount 注文での量。(例)0.1 market_buy_amount 成行買で利用する日本円の金額。(例)10000 position_id 決済するポジションのID stop_loss_rate 逆指値レート ( 逆指値とは? ) <省略>
本サンプルソースには、$ACCESS_KEY, $SECRET_ACCESS_KEY にAPIキーを設定していません。
APIキーを準備してください。
// Please set ACCESS_KEY and SECRET_ACCESS_KEY $ACCESS_KEY = ""; $SECRET_ACCESS_KEY = "";
APIキーの作成に関しては以下の記事を参考にしてください。
本サンプルソースを実行するには、APIキーのパーミッションとして「新規注文」にチェックが必要です。
APIキーを作成すると、以下のスクリーンショットのように「アクセスキー」「アクセスシークレットキー」が作成されるので、
サンプルソースの $ACCESS_KEY, $SECRET_ACCESS_KEY に設定してください。
以下に
Coincheck
の残高APIを呼び出すサンプルソースを記します
上記に記述しましたが、「アクセスキー」「アクセスシークレットキー」を準備してください。
このサンプルコードでは、注文入力を行い(leverage_order_ui.php)、レバレッジ注文を行う(leverage_order.php)の2つのサンプルコードファイルから構成されています。
また、新規注文を行う(leverage_order.php)サンプルコードでは、POSTするデータ形式をクエリー文字列または、JSONを選択できるようになっています。
POSTする注文内容は、クエリー文字列でもJSONでも問題なく動作しました。
JSONの場合は、ヘッダーに Content-Type: application/json が必要になります。
leverage_order_ui.phpはBTCの数量、価格等を入力するファインクション群のサンプルコードです。
<?php //---------------------------------------- // leverage order ui functions //---------------------------------------- function leverage_order_ui() { $rate = input_rate(); $amount = input_amount(); $order_type = input_leverage_buy_sell(); printf( "Rate[BTC/JPY] : %d" . PHP_EOL . "Amount[BTC] : %f" . PHP_EOL . "Price[JPY] : %f" . PHP_EOL . "Order type : %s" . PHP_EOL , $rate, $amount, $rate*$amount, $order_type); if(!yes_no_quit()) { die(0); } $order = array('rate'=>$rate, 'amount'=>$amount, 'order_type'=>$order_type); return $order; } //---------------------------------------- function input_amount() { while(TRUE) { print("Amount[BTC](quit if empty): "); $n = trim(fgets(STDIN)); if(empty($n)) { print("Quit." . PHP_EOL); die(0); } elseif(!is_numeric($n)) { printf("[ERROR] " . $n . " is not numeric." . PHP_EOL); } else { break; } } return $n; } //---------------------------------------- function input_rate() { while(TRUE) { print("Rate[BTC/JPY](quit if empty): "); $rate = trim(fgets(STDIN)); if(empty($rate)) { print("Quit." . PHP_EOL); die(0); } elseif(!ctype_digit($rate)) { printf("[ERROR] " . $rate . " is not integer." . PHP_EOL); } else { break; } } return $rate; } //---------------------------------------- function input_leverage_buy_sell() { while(TRUE) { print("Order type [long/short](quit if empty): "); $type = trim(fgets(STDIN)); if(empty($type)) { print("Quit." . PHP_EOL); die(0); } elseif(!strcasecmp($type, "short")) { $type = "leverage_sell"; break; } elseif(!strcasecmp($type, "long")) { $type = "leverage_buy"; break; } else { print("Please check the input." . PHP_EOL); } } return strtolower($type); } //---------------------------------------- function yes_no_quit() { while (TRUE) { print("OK? [yes/no/quit] :"); $ok = trim(fgets(STDIN)); if(!strcasecmp($ok, "yes")) { $ok = TRUE; break; } elseif(!strcasecmp($ok, "no")) { print("Order canceled." . PHP_EOL); $ok = FALSE; break; } elseif(!strcasecmp($ok, "quit")) { print("Quit." . PHP_EOL); $ok = FALSE; break; } else { print("Please check the input." . PHP_EOL); } } return $ok; }
以下のサンプルコードでは、上記のleverage_order_ui.phpを呼び出し、レバレッジ注文内容を入力後、
BTC/JPYのレバレッジ売買発注を行うサンプルコードになります。
<?php // API doc : https://coincheck.com/ja/documents/exchange/api#order-new // API url : https://coincheck.com/api/exchange/orders // order ui require("./leverage_order_ui.php"); // Please set ACCESS_KEY and SECRET_ACCESS_KEY $ACCESS_KEY = ""; $SECRET_ACCESS_KEY = ""; // BTC/JPY only $currency_pair = "btc_jpy"; // proxy settings $proxy = ""; $proxy_port = ""; // coincheck order api url $url = "https://coincheck.com/api/exchange/orders"; // Post data type $json = FALSE; // $json ? POST data is JSON : POST data is Query string // input order $order = leverage_order_ui(); // post data $postdata_array = array( "rate" => $order["rate"], "amount" => $order["amount"], "order_type" => $order["order_type"], "pair" => $currency_pair); if($json) { $postdata = json_encode($postdata_array); // POST data is JSON } else { $postdata = http_build_query($postdata_array); // POST data is Query string } // create signature $nonce = time(); $message = $nonce . $url . $postdata; $signature = hash_hmac("sha256", $message, $SECRET_ACCESS_KEY); // header $headers = array( "ACCESS-KEY: {$ACCESS_KEY}", "ACCESS-SIGNATURE: {$signature}", "ACCESS-NONCE: {$nonce}", ); if ($json) { // $json ? POST data is JSON : POST data is Query string array_push($headers, "Content-Type: application/json"); } $curl = curl_init(); if ($curl == FALSE) { fputs(STDERR, "[ERR] curl_init(): " . curl_error($curl) . PHP_EOL); die(1); } // set proxy server settings if (!empty($proxy) && !empty($proxy_port)) { curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($curl, CURLOPT_PROXY, $proxy . ":" . $proxy_port); curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); $response = curl_exec($curl); if ($response == FALSE) { fputs(STDERR, "[ERR] curl_exec(): " . curl_error($curl) . PHP_EOL); die(1); } curl_close($curl); // json decode $json_decode = json_decode($response, true); if ($json_decode == NULL) { fputs(STDERR, "[ERR] json_decode(): " . json_last_error_msg() . PHP_EOL); die(1); } // output json_decode print_r($json_decode); exit(0);
以下に、上記サンプルコードを実行した結果を記します。
レバレッジLongの注文内容を入力している時の出力です。
$ php leverage_order.php Rate[BTC/JPY](quit if empty): 1500000 Amount[BTC](quit if empty): 0.005 Order type [long/short](quit if empty): long Rate[BTC/JPY] : 1500000 Amount[BTC] : 0.005000 Price[JPY] : 7500.000000 Order type : leverage_buy OK? [yes/no/quit] :yes
以下、yesを入力しEnterキーを押すことによりレバレッジ注文(long)が発注されました。
Array ( [success] => 1 [id] => 111111111 [amount] => 0.005 [rate] => 1500000.0 [order_type] => leverage_buy [pair] => btc_jpy [created_at] => 2017-12-12T15:15:15.100Z [market_buy_amount] => [stop_loss_rate] => )
以下、
Coincheck
のWeb画面です。
発注されているのが確認できます。
もちろんWebページでキャンセル可能です。
$ php leverage_order.php Rate[BTC/JPY](quit if empty): 1900000 Amount[BTC](quit if empty): 0.005 Order type [long/short](quit if empty): short Rate[BTC/JPY] : 1900000 Amount[BTC] : 0.005000 Price[JPY] : 9500.000000 Order type : leverage_sell OK? [yes/no/quit] :yes
以下、yesを入力しEnterキーを押すことによりレバレッジ(short)注文が発注されました。
Array ( [success] => 1 [id] => 111111112 [amount] => 0.005 [rate] => 1900000.0 [order_type] => leverage_sell [pair] => btc_jpy [created_at] => 2017-12-12T13:13:13.500Z [market_buy_amount] => [stop_loss_rate] => )
以下、
Coincheck
のWeb画面です。
発注されているのが確認できます。
もちろんWebページでキャンセル可能です。
以下によく発生すると思われるエラーについて記します。
以下のようにERRORが出た場合は、APIキーの設定に誤りがないか確認してください。
$ php balance.php [ERROR] : invalid authentication
APIキーの設定を確認してください。
新規注文にチェックが入っていないためパーミッションエラーとなっています。
$ php balance.php [ERROR] : This api is not permitted, Please set permission. https://coincheck.com/api_settings
その他にも以下のように数量不足や残高不足などのエラーも出力されます。
$ php leverage_order.php Rate[BTC/JPY](quit if empty): 1600000 Amount[BTC](quit if empty): 0.001 Order type [long/short](quit if empty): long Rate[BTC/JPY] : 1600000 Amount[BTC] : 0.001000 Price[JPY] : 1600.000000 Order type : leverage_buy OK? [yes/no/quit] :yes Array ( [success] => [error] => Amount 注文量が最低量(0.005 BTC)を下回っています )
$ php leverage_order.php Rate[BTC/JPY](quit if empty): 1700000 Amount[BTC](quit if empty): 1 Order type [long/short](quit if empty): short Rate[BTC/JPY] : 1700000 Amount[BTC] : 1.000000 Price[JPY] : 1700000.000000 Order type : leverage_sell OK? [yes/no/quit] :yes Array ( [success] => [error] => Amount insufficient balance )
以上、 Coincheck の新規注文APIを使ってBTC/JPYレバレッジ注文をするサンプルコードおよび実行結果でした。