見出し画像

bitFlyerの先物を利用してアービトラージするためのプログラム

今回は今流行っている?bitFlyerの現物とLightning Futures(以下3ヶ月先物)でアービトラージを行うために
価格差分を通知するプログラムについて書きます。

対象となる取引はBTC現物と3ヶ月先物を対象としています。

まず、現物と3ヶ月先物でアービトラージを実施する方法についてですが、
現時点で現物と3ヶ月先物の価格に常に乖離がある状態が発生しています。

5/10現在1BTCあたりで100〜3000円程度の乖離が発ししている状態で、
今回のプログラムはこの乖離を利用して利益を得るための通知を行います。

また、3ヶ月先物は売り注文から開始することができ、レバレッジもかけられるため、証拠金は現物よりも少なく始めることができます。

今回の通知では、3ヶ月先物の方が価格が高い場合のみ、
つまり3ヶ月先物は売り、現物は買いのパターンでアービトラージができる場合のみ通知を行うようにしています。

また、コンソールでは上記の通知条件に合致した場合は常に通知し、
特定の設定値の条件に合致した場合はLINE Notifyに通知を行うように作成しました。

プログラムはPython3.6.5を使用し、
モジュールはwebsocket-client, requests, jsonを使用しているのでpipにてインストールをしてください。

ではプログラムについて実際に記載していきます。

# -*- coding: utf-8 -*-
from websocket import create_connection
import requests
from decimal import * 
import json
# 定数
LINE_URL   = "https://notify-api.line.me/api/notify"
MARKET     = "https://api.bitflyer.jp/v1/getmarkets"
WS_URI     = "wss://ws.lightstream.bitflyer.com/json-rpc"
STOCKS     = "BTC_JPY"
CHANNEL    = "lightning_board_snapshot_{0}"

まずはモジュールの参照と定数を設定しています。

定数について特筆すべき点として、

MARKET = "https://api.bitflyer.jp/v1/getmarkets"

今回は一番最初にLightning APIのgetmarketsを利用します。

理由としては3ヶ月先物のproduct_codeは取引日によって変動します。
5/10時点ではBTCJPY29JUN2018といったproduct_codeになっていますが、
これは満期を迎える日が月によって異なっており(現在の満期は6/29(金)となっている)、それに合わせてproduct_codeも変更されるということです。

今回のプログラムで価格を取得するために使用する板情報はLightning APIのwebsocket(json-rpc)を利用しますが、
こちらで設定するChannnelにもproduct_codeが必要となっています。

# 設定値
LOT           = 0.1
LINE_TOKEN    = 'Line Notify Token'
NOTIFY_BORDER = 1200
CHANGE_PRICE  = 100

次にプログラムをカスタマイズする設定値を記載します。

LOTは利益表示をする際に、購入ロット数によってどれだけ利益が得られるかを表示するために設定します。

LINE_TOKENはLineにて通知を行うためのトークンを設定します。
取得していない場合は以下のサイトからトークンを取得してください。

NOTIFY_BORDERは現物と3ヶ月先物の価格差分が設定値より大きい場合に
LINEに通知するようにします。

CHANGE_PRICEは一度LINEに通知した後に前回通知した差分価格(利益)から設定値以上に価格の変動があった場合に再度LINE通知を行うようにするための閾値隣ます。
※NOTIFY_BORDERとアンド条件となるため、閾値以上に変動があってもNOTIFY_BORDER以下の価格の場合は通知しません。

次から実際の処理の記載になります。

ここから先は

7,809字

¥ 3,300

プログラムのことに関しては言語問わず対応できます。主にこれからプログラムを覚えていきたい+仮想通貨で自動売買をしたい人向けに記事を書いていきます。