Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> 仮想通貨、ブロックチェーン関連 -> 【アービトラージ】仮想通貨5社間で価格差を計算するプログラム【PHP】

【アービトラージ】仮想通貨5社間で価格差を計算するプログラム【PHP】

BitFlyer、BitBank、Quoine、BTCBox、CoinCheckの5社間で、
BTC/JPYの価格差を計算するプログラムをPHPで作ってみました。

ただのノリで作っただけなので、細かい事は気にしないでくださいw

なんとなくcoincheckのみ、composerからライブラリをインストールしているので、事前に、composer initした上で、composer.jsonのrequire欄に"coincheck/coincheck": "1.0.0"を記述し、composer installしておく必要があります。

<?php // coincheck用ライブラリのインクルード。 // あらかじめcomposer.jsonのrequire欄に"coincheck/coincheck": "1.0.0"を記述のうえ、 // composer installしておく。 require "vendor/autoload.php"; use Coincheck\Coincheck; $coincheck= new Coincheck('ACCESS_KEY', 'API_SECRET'); // 変数の初期化 $min_ask = -1; $max_bid = -1; $ask_name = $bid_name = ""; $vars = array( "BitFlyer" => get_bitflyer_ticker(), "BitBank" => get_bitbank_ticker(), "Quoine" => get_quoine_ticker(), "BTCBox" => get_btcbox_ticker(), "CoinCheck" => get_coincheck_ticker(), ); $cnt = 0; foreach($vars as $name => $data){ calc_min_max($name, $data); if($cnt == 0){ $first_time = $data["time"]; } echo "[{$name}] ask:{$data["ask"]} bid:{$data["bid"]} spread:{$data["spread"]} time:{$data["time"]}\n"; $cnt++; } $last_time = $data["time"]; $spread = $max_bid - $min_ask; echo "Best Ask : {$min_ask}($ask_name), Best Bid : {$max_bid}($bid_name), Spread: ($spread)\n"; echo "Benefit: ".(int)$spread."\n"; echo "Time Difference: ".((int)$last_time - (int)$first_time)." Sec \n"; if($spread > 1000 && (int)$last_time - (int)$first_time <= 1){ echo "Status: True\n"; }else{ echo "Status: False\n"; } //////////////////////// // BitFlyerのTickerを読み込む関数 //////////////////////// function get_bitflyer_ticker(){ $data = json_decode(file_get_contents("https://api.bitflyer.com/v1/getticker")); if(!empty($data) && !empty($data->best_bid) && !empty($data->best_ask)){ $bid = $data->best_bid; $ask = $data->best_ask; $spread = $bid - $ask; return array("bid" => $bid, "ask" => $ask, "spread" => $spread, "time" => date("Gis")); }else{ return null; } } //////////////////////// // BitBankのTickerを読み込む関数 //////////////////////// function get_bitbank_ticker(){ $data = json_decode(file_get_contents("https://public.bitbank.cc/btc_jpy/ticker")); if(@$data->success){ $ask = $data->data->sell; $bid = $data->data->buy; $spread = $bid - $ask; return array("bid" => $bid, "ask" => $ask, "spread" => $spread, "time" => date("Gis")); }else{ return false; } } //////////////////////// // QuoineのTickerを読み込む関数 //////////////////////// function get_quoine_ticker(){ $data = json_decode(file_get_contents("https://api.liquid.com/products/5")); if(!empty($data) && $data->currency_pair_code == "BTCJPY"){ $ask = $data->market_ask; $bid = $data->market_bid; $spread = $bid - $ask; return array("bid" => $bid, "ask" => $ask, "spread" => $spread, "time" => date("Gis")); }else{ return false; } } //////////////////////// // BTCBoxのTickerを読み込む関数 //////////////////////// function get_btcbox_ticker(){ $data = json_decode(file_get_contents("https://www.btcbox.co.jp/api/v1/ticker/")); if(!empty($data) && !empty($data->sell) && !empty($data->buy)){ $ask = $data->sell; $bid = $data->buy; $spread = $bid - $ask; return array("bid" => $bid, "ask" => $ask, "spread" => $spread, "time" => date("Gis")); }else{ return false; } } //////////////////////// // CoincheckのTickerを読み込む関数 //////////////////////// function get_coincheck_ticker(){ global $coincheck; $data = $coincheck->ticker->all(); if(!empty($data) && !empty($data["ask"]) && !empty($data["bid"])){ $data["spread"] = $data["bid"] - $data["ask"]; $data["time"] = date("Gis"); return $data; }else{ return null; } } //////////////////////// // AskとBidの最小値・最大値を算出する関数 //////////////////////// function calc_min_max($label, $data){ global $min_ask, $max_bid, $ask_name, $bid_name; if($data){ if($min_ask == -1 || $data["ask"] < $min_ask){ $min_ask = $data["ask"]; $ask_name = $label; } if($max_bid == -1 || $data["bid"] > $max_bid){ $max_bid = $data["bid"]; $bid_name = $label; } } } ?>
実行結果は、下記のような感じ。
[BitFlyer] ask:723734 bid:723689 spread:-45 time:74004 [BitBank] ask:724401 bid:724388 spread:-13 time:74004 [Quoine] ask:723239.81 bid:722994.81 spread:-245 time:74004 [BTCBox] ask:725147 bid:725047 spread:-100 time:74005 [CoinCheck] ask:724317 bid:724251 spread:-66 time:74005 Best Ask : 723239.81(Quoine), Best Bid : 725047(BTCBox), Spread: (1807.1899999999) Benefit: 1807 Time Difference: 1 Sec Status: True
Time Differenceは、各社のAPIを読み込んで、最初から最後までかかった時間を秒単位で計算しています。 この値が高い場合はFalseとします。 (あまりにもAPI取得に時間がかかりすぎると、価格自体が信用できないため) Benefitは、最小の購入価格と最大の売却価格の差、つまり、利益です。 利益が1000円以上の場合は、Trueとしています。 この続きのプログラムが書きたい方は、自己責任でお願いします。

この記事の最終更新日:2018/10/16
最初に記事を書いた日:2018/10/16

この記事をシェアする

このエントリーをはてなブックマークに追加
資料室のトップに戻る
Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> 仮想通貨、ブロックチェーン関連 -> 【アービトラージ】仮想通貨5社間で価格差を計算するプログラム【PHP】
▲Top English