LoginSignup
867
867

More than 5 years have passed since last update.

ビットコイン自動裁定取引システムを開発・トレードした結果

Last updated at Posted at 2017-09-16

ビットコインをAPIで自動売買する



3


bitFlyer

Quoine

Coincheck

bitbank.cc

BTCBox


GitHubTypeScriptNode.js

R2 Bitcoin Arbitrager GitHub starsBuild StatusCoverage Status
R2Mac OS, Windows, LinuxAPI

MIT











GitHubGitHub issues

()?




Bitcoin

API10





rinjani.gif
30661






(一)3()

(二)BTC1

(三)Bitflyer0Bitflyer()

(四)()()()1

(五)(/)(minTargetProfitPercent)2

(六)

(七)1onSingleLeg


12

i. ()exitNetProfitRatio
ii. 2


minTargetProfitPercent, exitNetProfitRatioconfig.jsonAnalyticsAnalyticsGitHub


GitHub

diagram_ja.png


1) Node.js 8.5
2) git
git clone https://github.com/bitrinjani/r2.git

3) フォルダr2に移動し、npm installをコンソールで実行

cd r2
npm install

4) config_default.jsonconfig.json
5) keysecretAPI 
6) UIlanguage"en""ja"
7) npm start


config.json
CONFIG_JP.md

Blackbird

全体設定(概要)

Name Values Description
demoMode true or false デモモード。trueのとき、裁定機会の解析は行うが実際の注文は送らない。
maxSize number 取引所に送る注文数量の最大値。仮にこの値よりも大きい数量で裁定可能であっても、この設定値の注文を送信する。
minSize number 取引所に送るオーダー数量の最小値。裁定機会がこの値より小さい数量の場合、取引を行わない。
minTargetProfitPercent number 最小目標収益割合。期待収益の裁定取引の円換算(取引価格*数量)に対する割合(%)がこれより小さい場合、取引を行わない。
exitNetProfitRatio number オープン時の収益に対し、クローズによって何%の利益を確定するか指定する。このパーセンテージ分だけオープン時からスプレッドが縮小した時、そのオープンペアをクローズする。例えば、オープン時の収益が200かつexitNetProfitRatio=20とすると、クローズのコストが160を下回ったときにR2はクローズオーダーを送信し、40の利益を確定しようとする。(オープンによる収益200, クローズによる費用160 -> 利益40)
maxNetExposure number 最大ネットエクスポージャー。取引所の合計ネットエクスポージャーの絶対値がこの値を超える場合、取引を行わない。
onSingleLeg - 裁定ペアの片側だけ約定したときの動作を指定。詳細はCONFIG_JP.mdを参照

minTargetProfitPercentの例

minTargetProfitPercent: 0.1%
ベストアスク: 800,000円, 0.3 BTC
ベストビッド: 801,000円, 0.2 BTC
-> MID: 800,500円, 目標数量0.2BTC,期待収益200円となり、収益の割合は 200 / (800500 * 0.2) = 0.0012、つまり0.12%。
この値はminTargetProfitPercentである0.1%を上回っているので、取引を送信します。

maxNetExposureの例

ここでのネットエクスポージャーとは、各取引所のポジションを合計した"BTC数量"です。一般にはエクスポージャーには数量ではなく割合を指しますが、簡略化のため数量としています。例えば、Bitflyerで0.1 BTC, Quoineで0.1 BTC, Coincheckでマイナス0.1 BTC(空売り)のとき、ネットエクスポージャーは 0.1 + 0.1 - 0.1 = 0.1 BTCとなります。仮にMaxNetExposure=0.05と設定されていた場合、0.1 > 0.05のため取引は送信しません。

取引所設定

Name Values Description
broker Bitflyer, Quoine or Coincheck 取引所名
enabled true or false 裁定取引の対象とするかどうかの設定
key string 取引所APIのキーもしくはトークン
secret string 取引所APIのシークレット
maxLongPosition number 最大ロングポジション
maxShortPosition number 最大ショートポジション
cashMarginType Cash, MarginOpen or NetOut オーダータイプ。現金取引、証拠金取引オープン、ネットアウトのどれか。取引所ごとにサポートしているタイプは異なる。下記テーブルを参照。
commissionPercent number 取引手数料割合。裁定プロセスが予想利益を計算する際、取引手数料(目標価格 * 目標数量 * (commissionPercent / 100))を期待収益から差し引いた上で、取引を送信するか判断する。
noTradePeriods ["開始時間", "終了時間"]のリスト CONFIG_JP.mdを参照

*取引所は最低2つ有効になっている必要があります。

cashMarginType詳細

取引所 サポートされるcashMarginType
Bitflyer Cash
Quoine Cash, NetOut
Coincheck Cash, MarginOpen, NetOut*
bitbank.cc Cash
BTCBox Cash

*CoincheckAPI(Quoine API)
CoincheckcashMarginTypeNetOut(FIFO)
1%0.01 BTC0.010005 BTC1%

 (Slack, LINE)


Slack, LINEkeywords
CONFIG_JP.md


R2
config.jsonAPI
tools

getBalance - 各取引所のJPY, BTC残高をCSV形式で出力

npm run -s getBalance

出力例:

Exchange, Currency, Type, Amount
bitFlyer, JPY, Cash, 300000
bitFlyer, BTC, Cash, 1.234
Coincheck, JPY, Cash, 300000
Coincheck, BTC, Cash, 0.123
Coincheck, JPY, Margin, 200000
Coincheck, JPY, Free Margin, 123456
Coincheck, BTC, Leverage Position, 3.456
Quoine, JPY, Margin, 300000
Quoine, JPY, Free Margin, 123456
Quoine, BTC, Leverage Position, 0.01

closeCcPosition - Coincheckの全レバレッジポジションを成行注文でクローズ

npm run closeCcPosition

closeBfPosition - bitFlyerの全現物BTCを成行注文で売却

npm run closeBfPosition

closeQuPosition - Quoineの全レバレッジポジションを成行注文でクローズ

npm run closeQuPosition

clearPairs - R2が保持しているオープンペア情報をクリアする(取引は送信されません)

npm run clearPairs

closeAll - 上記3つのcloseを順に実行し、clearPairsでペア情報をクリア後、getBalanceを実行する。

npm run closeAll

問題点

取引所の証拠金取引(レバレッジ取引)の可否



bitFlyerFXFX
bitFlyer

1/21: bitFlyerBTC-FX/JPYhttps://github.com/bitrinjani/bitflyer-fx


API


API10Bitflyer()
API10

API使37API使
使Bitflyer, QuoineAPI(BitflyerAPI)
API
API


BitflyerQuoineBitflyerQuoineBitflyerQuoineexitNetProfitRatio

BTCBTC1000


API
API

FAQ

Q. Zaif


A. Zaif

Q. Unauthorized


Unauthorized


HTTP request failed. Response from https://api.bitflyer.jp/v1/me/getbalance. Status Code: 401 (Unauthorized) Content: {"status":-500,"error_message":"Invalid signature","data":null}


A. API/config.jsonAPI/Web

Q. 





 


A. config.jsonmaxLongPosition, maxShortPosition
maxLongPositionmaxShortPosition
QuoineQuoinemaxShortPositionFalse

Q. BTC?


BTC
BTCBTCBTCBTC

Q. ?


使
867
867
220

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
867
867