首页 > 财经 > Python量化交易之三角套利原理

Python量化交易之三角套利原理


三角套利,属于无风险套利技术的一种,最早应用于外汇交易中。

双边套利策略仅在一个交易对(instrument)上进行交易,以数字货币市场为例,BTC/USDT单一交易对中基础币BTC(base coin)和计价币USDT(quote coin)之间相互兑换。


三角套利策略需要在三个交易对上进行,以数字货币市场为例,BTC/USDT、ETH/USDT、ETH/BTC三个交易对中BTC、ETH、USDT三种币之间相互兑换。


我们可以按照兑换顺序,将三角套利分成两种情况:正循环(红色)、逆循环(绿色)。无论是正循环还是逆循环,当满足某种条件时,ETH、USDT数量不变,BTC数量增加。

正循环步骤:

1、卖出BTC,买入ETH

2、卖出ETH,买入USDT

3、卖出USDT,买入BTC

逆循环步骤:

1、卖出BTC,买入USDT

2、卖出USDT,买入ETH

3、卖出ETH,买入BTC

下面以正循环为例,计算一下三角套利的收益:

1、假设卖出的BTC数量为A,卖出BTC买入ETH,即执行ETH/BTC交易对的买入操作,执行价格为对手价,即订单簿中的最优卖价(best_ask_price),最大可执行数量为最优卖价量(best_ask_amount),把第一步的执行价格记为P1,把第一步最大执行数量记为A1,获得ETH数量为A/P1;

2、卖出A/P1个ETH,买入USDT,即执行ETH/USDT交易对的卖出操作,执行价格为对手价,即订单簿中的最优买价(best_bid_price),最大可执行数量为最优买价量(best_bid_amount),把第二步执行价格记为P2,把第二步最大执行数量记为A2,获得USDT数量为A/P1*P2;

3、卖出A/P1*P2个USDT,买入BTC,即执行BTC/USDT交易的买入操作,执行价格为对手价,即订单簿中的最优卖价(best_ask_price),最大可执行数量为最优卖价量(best_ask_amount),把第三步的执行价格记为P3,把第三步最大执行数量记为A3,获得BTC数量为A/P1*P2/P3。

因为执行了三次交易,付出的手续费约等于3倍单次交易的手续费:

fee = 3 * A * 0.0015 (假设手续费为0.15%)

完成一次正循环的收益为:

win = A/P1*P2/P3 - A - fee = A (1/P1*P2/P3 - 1 - 0.0045)

当收益大于手续费时,即1/P1*P2/P3 > 0.0045时,正循环的三角套利可以为我们带来正向收益。

然后计算完成一次循环的可执行数量,因为每次交易的数量不能超过对手价的数量上限,否则可能会造成一定滑点,故实际可执行价为最开始持有币的数量和每一步可执行数量中的最低值。

Amount = min(A, A1, A2, A3)

实盘步骤:

1、采用协程or多线程方式,尽可能同时获取3个币对订单簿信息;

2、分别计算正、逆循环的收益是否大于零;

1/P1*P2/P3 > 0.0045

3、分别计算正、逆循环的数量是否满足交易所要求。

min(A, A1, A2, A3)

4、满足2、3步条件时,采用协程or多线程方式,尽可能同时下单进行交易。

5、查询订单成交结果,检查是否存在滑点,计算最终收益

可能遇到的问题:

1、三角套利策略为赚币,可能币多了,但是币价跌了;

2、需要持有一定数量的中间货币,才能同时完成三次交易;

3、滑点和下单细节的处理。

实盘建议:

无风险套利策略特点是收益低、风险低、资金使用效率低,因此考虑和屯币策略、均仓策略等结合使用,可以让你屯着屯着币就多了,不知不觉牛就来了。

喜欢套利类策略的朋友,可以在公众号“千千的量化世界”中回复“搬砖之王”下载双边套利、三角套利、跨市双边、跨市三角组合套利策略源代码,感谢关注和支持!

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2210483.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)