在比特币上进行套利操作能赚钱吗?

首先

比特币的一个特征是,不同交易所的价格不同。
这是由每个交易所的供需决定比特币的价格。

假设

在交易所中以最低的价格购买硬币,将其发送到以最高价买卖的地方,从而实现套利转换为现金,这样可行吗?

在这里,我们不讨论是否合法、不合法或灰色地带。
暂时设定在这里的范围是参考数据并确认差异。

处理方式

了解并一步一步操作的重要性:了解交易所中列出的货币价格以及其偏移程度最为重要。
幸运的是,许多比特币交易所都公开了货币和交易的API。
我们可以定期获取这些数据并对其进行可视化呈现。

スクリーンショット 2018-01-15 17.02.58.png

这个任务虽然很重要,但我不想花太多时间。我思考着能否想出一个巧妙的方法,完成这个任务。

首先是Coincheck。它是日本最主要的加密货币交易所。
另一个是Bithumb。它是韩国最大的加密货币交易所。
我们首先从这两个交易所开始比较差异。

数据的存储位置

这个盒子用来存储数据。
这次我们决定将数据存储在MariaDB中。

yum install mariadb mariadb-server -y
rpm -qa | grep maria

# MariaDBの起動
systemctl start mariadb
systemctl enable mariadb

# ログイン (ノーパスで入れる)
mysql -uroot -p
MariaDB [(none)]> 
MariaDB [(none)]> create database coin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> 

访问权限

在使用Docker运行re:dash并连接到服务器上的mysql时,
由于连接源(re:dash)通过Docker桥接,所以IP地址不再是localhost(127.0.0.1),

172.18.0.*是Docker容器的默认段。

如果将密码设置为”password”,用户的配置步骤如下:

MariaDB [(none)]> SELECT PASSWORD('password');
+-------------------------------------------+
| PASSWORD('password')                      |
+-------------------------------------------+
| *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+-------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> GRANT USAGE ON *.* TO 'redash'@'172.18.0.%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT SELECT, EXECUTE ON `coin`.* TO 'redash'@'172.18.0.%';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user,host from mysql.user;
+--------+------------+
| user   | host       |
+--------+------------+
| root   | 127.0.0.1  |
| redash | 172.18.0.% |
| root   | ::1        |
|        | instance-1 |
| root   | instance-1 |
|        | localhost  |
| root   | localhost  |
+--------+------------+
7 rows in set (0.00 sec)

MariaDB [(none)]> show grants for 'redash'@'172.18.0.%';

创建表格

MariaDB [(none)]> use coin;
Database changed
MariaDB [coin]> 

日元购买比特币的Coincheck交易所

名前型 用途priceint(10)CoincheckでのBTCの値段creation_timetimestamp登録した時間
CREATE TABLE `COINCHECK_JPY_BTC` (
  `price` int(10) unsigned NOT NULL,
  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`price`,`creation_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

BITHUMB 使用日元购买比特币。

因为Bitthumb是韩国的交易所,交易价格会以韩元显示。
在将其添加到本表之前,要将其转换为日元。

名前型 用途priceint(10)BITHUMBでのBTCの値段(JPY)creation_timetimestamp登録した時間
CREATE TABLE `BITHUMB_JPY_BTC` (
  `price` int(10) unsigned NOT NULL,
  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`price`,`creation_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

获取数据

只要取一下就可以用Shell了。
使用Cron定期获取最新值并生成SQL(插入语句)。

Coincheck使用

Note: “Coincheck” is a cryptocurrency exchange platform.

#!/bin/sh

TABLE=COINCHECK_JPY_BTC
PRICE=`curl -s https://coincheck.com/api/rate/btc_jpy | jq -r .rate | awk -F'.' '{print $1}'`

echo "insert into $TABLE(price) values($PRICE);" > sql/$TABLE.sql;

为了将存储在数据库中的货币统一换算为日元,需要获取汇率数据。由于有幸使用了鲸鱼Web API公开提供的数据,所以可以根据该数据进行日元兑换。

#!/bin/sh

TABLE=BITHUMB_JPY_BTC
ORIGINALPRICE=`curl -s https://api.bithumb.com/public/ticker/BTC | jq -r '.data.buy_price'`
RATE=`curl -s http://api.aoikujira.com/kawase/json/krw | jq -r '.JPY'`

PRICE=`echo "scale=0 ; $ORIGINALPRICE * $RATE" | /usr/bin/bc`


echo "insert into $TABLE(price) values(${PRICE%.*});" > sql/$TABLE.sql;

数据输入

定期地在MySQL数据库(严格地说是MariaDB)上执行SQL语句,将最新的数据存储在数据库中。

只需要一個選擇的中文同義句:
由於要使用jq命令和bc命令,所以需要安裝jq命令。

curl -o /usr/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && chmod +x /usr/bin/jq

yum install bc -y
echo "insert...."

for i in `ls sql`; do
    echo sql/$i
    mysql -uroot coin < sql/$i
    sleep 5;
done 
echo "insert....done"

当然应该输入密码,但现在先选择不设密码。

数据展示

使用Docker将re:dash容器引入并进行可视化操作。

# docker install
yum -y install docker-io
systemctl start docker
systemctl enable docker

# docker compose install
curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

# re:dash container 
git clone https://github.com/getredash/redash
cd redash/
docker-compose -f docker-compose.production.yml run --rm server create_db
docker-compose -f docker-compose.production.yml up -d

スクリーンショット 2018-01-15 13.28.39.png

如果无法访问,请重新检查防火墙和selinux等设置。

注册数据集

注册可视化数据库 注意:即使可视化目标服务器与在docker上运行的re:dash服务器相同,也无法在localhost上连接,因为需要通过Docker Bridge进行连接。

スクリーンショット 2018-01-15 14.22.37.png

查看的注册

スクリーンショット 2018-01-15 13.31.55.png
スクリーンショット 2018-01-15 14.16.27.png
スクリーンショット 2018-01-15 14.16.56.png

成功地使用交易所数据创建图表,在这一示例中,还可以同样地添加其他货币。

计算差分

计算交易所和交易所之间的差异。

根据存储在数据库中的Bithumb和coincheck数据,
计算它们在相同时间段内的偏离程度。

select b1.price as BITHUMB_JPY_BTC , 
    c1.price as COINCHECK_JPY_BTC , 
    b1.price / c1.price as percent ,
    c1.creation_time

from BITHUMB_JPY_BTC as b1 
left join COINCHECK_JPY_BTC as c1
on b1.creation_time >= c1.creation_time
where b1.creation_time between '2018-01-11 10:55' and '2120-01-11 12:55'
order by creation_time desc 
limit 1000

如果有更好的SQL写法的话,请指教一下。

スクリーンショット 2018-01-15 15.43.54.png

注册仪表板

スクリーンショット 2018-01-15 15.40.30.png
スクリーンショット 2018-01-15 15.41.45.png

在蜡烛图上显示了离散信息。
(虽然可能还有更好的方法,但暂时先用这个来进行。)

スクリーンショット 2018-01-15 15.58.07.png

可以说,Bithumb的交易价格比Coincheck高出17.5% ~ 19%左右。我们可以在系统中注册多个这样的图表,将乖离度最大的货币转移到其他交易所,而将乖离度最小的货币换回来,理论上应该能够实现套利。

请自行承担实际交易的责任。

将来想做的事情

目前只是了解而已,但可以使用redash的Alert功能来设置监控,并且也可以进行相应的设置。
希望像https://qiita.com/bitrinjani/items/3ed756da9baf7d171306文章中所述,能够自动进行交易。

广告
将在 10 秒后关闭
bannerAds