在比特币上进行套利操作能赚钱吗?
首先
比特币的一个特征是,不同交易所的价格不同。
这是由每个交易所的供需决定比特币的价格。
假设
在交易所中以最低的价格购买硬币,将其发送到以最高价买卖的地方,从而实现套利转换为现金,这样可行吗?
在这里,我们不讨论是否合法、不合法或灰色地带。
暂时设定在这里的范围是参考数据并确认差异。
处理方式
了解并一步一步操作的重要性:了解交易所中列出的货币价格以及其偏移程度最为重要。
幸运的是,许多比特币交易所都公开了货币和交易的API。
我们可以定期获取这些数据并对其进行可视化呈现。
这个任务虽然很重要,但我不想花太多时间。我思考着能否想出一个巧妙的方法,完成这个任务。
首先是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交易所
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是韩国的交易所,交易价格会以韩元显示。
在将其添加到本表之前,要将其转换为日元。
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
如果无法访问,请重新检查防火墙和selinux等设置。
注册数据集
注册可视化数据库 注意:即使可视化目标服务器与在docker上运行的re:dash服务器相同,也无法在localhost上连接,因为需要通过Docker Bridge进行连接。
查看的注册
成功地使用交易所数据创建图表,在这一示例中,还可以同样地添加其他货币。
计算差分
计算交易所和交易所之间的差异。
根据存储在数据库中的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写法的话,请指教一下。
注册仪表板
在蜡烛图上显示了离散信息。
(虽然可能还有更好的方法,但暂时先用这个来进行。)
可以说,Bithumb的交易价格比Coincheck高出17.5% ~ 19%左右。我们可以在系统中注册多个这样的图表,将乖离度最大的货币转移到其他交易所,而将乖离度最小的货币换回来,理论上应该能够实现套利。
请自行承担实际交易的责任。
将来想做的事情
目前只是了解而已,但可以使用redash的Alert功能来设置监控,并且也可以进行相应的设置。
希望像https://qiita.com/bitrinjani/items/3ed756da9baf7d171306文章中所述,能够自动进行交易。