このエントリーをはてなブックマークに追加


coincheckの新規注文API(orders)のレバレッジ取引注文サンプルコード(PHP)

PHPを使って Coincheck のBTC現物注文・新規注文APIのサンプルコードを以下に記します。


当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。
当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。
あらかじめご了承ください。



スポンサーリンク

関連記事

新規注文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 逆指値レート ( 逆指値とは? )
<省略>

新規注文APIサンプルソースを使用する前の準備

本サンプルソースには、$ACCESS_KEY, $SECRET_ACCESS_KEY にAPIキーを設定していません。
APIキーを準備してください。

// Please set ACCESS_KEY and SECRET_ACCESS_KEY
$ACCESS_KEY = "";
$SECRET_ACCESS_KEY = "";

APIキーの作成に関しては以下の記事を参考にしてください。

本サンプルソースを実行するには、APIキーのパーミッションとして「新規注文」にチェックが必要です。

01.png
 

APIキーを作成すると、以下のスクリーンショットのように「アクセスキー」「アクセスシークレットキー」が作成されるので、
サンプルソースの $ACCESS_KEY, $SECRET_ACCESS_KEY に設定してください。

02.png
 

レバレッジ取引(BTC/JPY) PHPサンプルソース

以下に 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の数量、価格等を入力するファインクション群のサンプルコードです。

  • leverage_order_ui.php
    <?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;
    }

BTC/JPYレバレッジ取引注文・サンプルコード

以下のサンプルコードでは、上記のleverage_order_ui.phpを呼び出し、レバレッジ注文内容を入力後、
BTC/JPYのレバレッジ売買発注を行うサンプルコードになります。

  • leverage_order.php
    <?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(買い)注文

レバレッジ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ページでキャンセル可能です。

03.png

Short(売り)注文

$ 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ページでキャンセル可能です。

04.png

新規注文APIのエラーについて

以下によく発生すると思われるエラーについて記します。

invalid authentication エラーになった場合

以下のようにERRORが出た場合は、APIキーの設定に誤りがないか確認してください。

$ php balance.php
[ERROR] : invalid authentication

This api is not permitted... エラーになった場合

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レバレッジ注文をするサンプルコードおよび実行結果でした。


スポンサーリンク

添付ファイル: file04.png 16件 [詳細] file03.png 15件 [詳細] file02.png 16件 [詳細] file01.png 14件 [詳細] filesrc.zip 12件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-12-30 (土) 15:07:28 (345d)