コピペで簡単にできるアービトラージ用自動メール送信システム

ブラックジャックによろしく 著作者名: 佐藤秀峰

取引所Aでビットコイン価格100万

取引所Bでビットコイン価格110万

取引所Cでビットコイン価格105万

Aで購入してBで売却すれば10万の利益!

仮想通貨市場ではアービトラージが活発に行われています。しかしながら各取引所の価格を常にチェックするのは辛いですよね・・

「価格差が一定の値になった時に知らせて欲しい」

ビットコインのアービトラージ用の自動通知システムをGoogle Apps Scriptを使って作成しました。

使うものは

  1. Gmail
  2. Google Apps Script(gas)
  3. メール受信用のメールアドレス

の3つのみ。

簡単にコピペでできるはずです。

APIを使ってティッカー取得する取引所

Public APIを公開している国内取引所のみ対象です。今回のスクリプトでティッカーを取得したのは以下の取引所。売買チャンスを広げるためにも複数登録しておくのが望ましいです。

取引高
現物手数料 0.01~0.15%
送金手数料 最低0.0008 BTC

bitFlyer

ビットコイン取引高日本一の取引所。アビトラ大口取引に使うので登録必須。約定額が大きいほど手数料は小さくなります。送金は基本一律0.0008BTC。追加手数料で送金スピードを早くできる。

取引高
現物手数料 maker -0.05%,taker -0.01%
送金手数料 0.0001BTCから

Zaif

ビットコイン取引手数料がマイナスで売買するたびに手数料分の利益がプラスされる(キャンペーン期間中)。送金時間は手数料によって変化。ビットコインの取引高はビットフライヤー、コインチェック、Zaifの3社で大半を占める。

取引高
現物手数料 0
送金手数料 無料

Quoinex

元々は海外業者。現物取引のベース通貨(BTC/JPY)の手数料は無料。送金手数料も無料ですが、BTC上乗せで送金スピードを早くできる。無料だとかなり時間が掛かるので急いでいる時は注意!

取引高
現物手数料 0
送金手数料 0.001BTC

BTCBOX

シンプルで使いやすい取引所。残念なのは取引高が小さく板が薄いこと・・・大口のアビトラには向きませんが、頻繁に回していくスタイルでは結構役に立ちます。

取引高
現物手数料 0
送金手数料 0.001BTC

bitbank

キャンペーン期間中につきBTC/JPYを含む全ての通貨の手数料が無料。ここもBTCBOX同様に現物板は薄い。ただし、他取引所と比較して大きな価格差がでやすくアビトラでは有用な取引所。

コピペでスクリプトを動かしてみる

続いて実際にgasにコードを打ちこんでメール通知スクリプトを動かします。スクリプトの流れは

1、gasで動かしたスクリプトが取引所のティッカー読み込み

2、ビットコインの価格を比較

3、指定した価格差になったら設定したメルアドにお知らせメールを送る

単純な仕組みです。お知らせメールの送り元はユーザーのGmailアドレスになります。

まずは、Google Apps Scriptにアクセスしてください。

「Start」ボタンを押して「無題のプロジェクト」を開きます。

下のコードをコピペ。

function myFunction() {
    ////ビットフライヤー API読み取り////
    
    var bf_response = UrlFetchApp.fetch("https://api.bitflyer.jp/v1/ticker");
    var bf_json = JSON.parse(bf_response.getContentText());
    var bf_bid=bf_json["best_bid"];
    var bf_ask=bf_json["best_ask"];    
    
    ////Zaif API読み取り////
    
    var zaif_response = UrlFetchApp.fetch("https://api.zaif.jp/api/1/ticker/btc_jpy");
    var zaif_json = JSON.parse(zaif_response.getContentText());
    var zaif_bid=zaif_json["bid"];
    var zaif_ask=zaif_json["ask"];
    
    ////QUOINEX API読み取り////
    
    var qu_response = UrlFetchApp.fetch("https://api.quoine.com/products/5");
    var qu_json = JSON.parse(qu_response.getContentText());
    var qu_ask=qu_json["market_ask"];
    var qu_bid=qu_json["market_bid"];
    
    ////BTCBOX API読み取り////
    
    var bb_response = UrlFetchApp.fetch("https://www.btcbox.co.jp/api/v1/ticker/");
    var bb_json = JSON.parse(bb_response.getContentText());
    var bb_ask=bb_json["sell"];
    var bb_bid=bb_json["buy"];
    
    ////bitbank API読み取り////
    
    var bt_response = UrlFetchApp.fetch("https://public.bitbank.cc/btc_jpy/ticker");
    var bt_json = JSON.parse(bt_response.getContentText());
    var bt_ask=bt_json["data"]["sell"];
    var bt_bid=bt_json["data"]["buy"];
  
  
  ////最安購入額、最高売却額算出////
  
  var hikaku_ask=[bf_ask,zaif_ask,qu_ask,bb_ask,bt_ask];
  var hikaku_bid=[bf_bid,zaif_bid,qu_bid,bb_bid,bt_bid];
  
  var ask_min = Math.min.apply(null, hikaku_ask);
  var bid_max = Math.max.apply(null, hikaku_bid);
  
  var min_co;
  var max_co;
  
  if (ask_min == bf_ask) {
      min_co = "ビットフライヤー";
    } else if (ask_min == zaif_ask) {
      min_co = "Zaif";
    } else if (ask_min == qu_ask) {
      min_co = "QUOINEX";
    } else if (ask_min == bb_ask) {
      min_co = "BTCBOX";
    } else {
      min_co = "bitbank";
    }
    
   if (bid_max == bf_bid) {
      max_co = "ビットフライヤー";
    } else if (bid_max == zaif_bid) {
      max_co = "Zaif";
    } else if (bid_max == qu_bid) {
      max_co = "QUOINEX";
    } else if (bid_max == bb_bid) {
      max_co = "BTCBOX";
    } else {
      max_co = "bitbank";
    }
  
  
    var hikaku=bid_max-ask_min;
    var mail=min_co + "で購入して" +  max_co + "で売却すれば" + hikaku + "円の利益だよ!";
  
  
   ////メール送信 hikaku>=????? ここでメールに通知したい価格差を入れる////
   
   if(hikaku>=3000){
    
     MailApp.sendEmail('ここに送信したいメルアド記述', 'タイトル', mail);
     
     }
}

80行目にある

「hikaku>=3000」

の数値は価格差です。指定したい価格差を入力してください。

82行目の「MailApp.sendEmail(‘ここに送信したいメルアド記述’, ‘タイトル’, mail);」に

通知先のメルアド、メールのタイトルを入力してください。

以上でスクリプトの準備は完了です!

実際に実行してみましょう。メニューにある実行ボタンをクリック!

プロジェクトの保存をします。コード名は自由に付けてください。

その後スクリプトを実行するために「許可を確認」する必要があります。ご自分のgoogleアカウントが表示されているのでクリックしてください。

許可したらスクリプトが自動で実行されます。通知先に設定したメールアドレスに

「○○で購入して△△で売却すれば□□円の利益だよ!」

と表示されれば成功です!

トリガーを設定して完全自動通知を実現

今度はトリガーを設定。決まった時間ごとに価格差を読み取り、一定ラインを超えていたら自動通知します。上メニューの時計マークのアイコンをクリック。

スクリプトを自動的に実行する時間を指定できます。管理人は「分タイマー」で「1分ごと」に設定します。

コードの設定で通知する価格差を小さくしすぎるとスパムみたいにバンバンメールが飛んでくるので注意してくださいね。

コードカスタマイズ

5つも取引所を比較する必要がないって方は上のコードから比較にいれない取引所に関するコードを外してください。各取引所の変数はそれぞれ

bitFlyer→bf

zaif→zaif

Quoinex→qu

BTCBOX→bb

bitbank→bt

と設定しています。例えばBTCBOXをコードから除外したければ25~28行目のティッカー読み込み箇所、40,41行目のbb_askとbb_bid、55~57行の

else if (ask_min == bb_ask) {
      min_co = "BTCBOX";
    } 

67~69行の

else if (bid_max == bb_bid) {
      max_co = "BTCBOX";
    }

を消すだけですね。