背景
我们在前面的图文中介绍了一种跨市场的套利策略:
该策略俗称搬砖,只要两个交易所对于同一种数字资产出现价差,就可以进行套利。
<u>三角套利就是在同一家交易所内利用三种数字资产之间的价格差来获利</u>。
三角套利的过程就是规划三角路径的过程,三角路径无外乎有两种:
- 第一种:买入 -> 卖出 -> 卖出(BSS)
- 第二种:卖出 -> 买入 -> 买入(SBB)
比如 BigOne 交易所有 ONE-USDT、ONE-EOS、EOS-USDT 交易对。
如果你手中拥有 USDT,可以通过第一种路径进行套利。即用 A 数量的 USDT 买入 ONE,然后把买入的 ONE 换成 EOS,最后卖出EOS 换回 USDT。在刨除手续费之后,如果最后换回的 USDT 数量超过 A,我们就可以依赖这个路径进行套利。
如果你手中拥有 ONE,可以通过第二种路径进行套利。即卖出 A 数量的 ONE 得到 USDT,然后用该 USDT 买入 EOS,最后用这些 EOS 换回 ONE。 在刨除手续费之后,如果最后换回的 ONE 数量超过 A,我们就可以依赖这个路径进行套利。
详细的流程图如下:
技术分析
<b>以先买入后卖出的方式构造三角套利的路径</b>:
假设:USDT 起始数量为 A,交易手续费为:0.1%
<u>Step1:USDT -> ONE</u>
以Q1的价格买入ONE。
- OneAmount = A ÷ Q1
- RealOneAmount = OneAmount × 0.999
<u>Step2:ONE -> EOS</u>
以 Q2 的价格卖出 ONE 得到 EOS
- EOSAmount = RealOneAmount × Q2
- RealEOSAmount = EosAmount × 0.999
<u>Step3:EOS -> USDT</u>
以 Q3 的价格卖出 EOS 得到 USDT
- UsdtAmount = RealEOSAmount × Q3
- RealUsdtAmount = UsdtAmount × 0.999
如果想获得盈利,则需要 RealUsdtAmount > A
即可。
经过简单的推导,我们可以发现该三角套利路径的盈利条件是:
(Q2 × Q3 × 0.999^3) ÷ Q1 > 1.0
<b>以先卖出后买入的方式构造三角套利的路径</b>:
假设:ONE 起始数量为 A,交易手续费为:0.1%
<u>Step1:ONE -> USDT</u>
以 P1 的价格卖出 ONE,获得 USDT。
- UsdtAmount = A × P1
- RealUsdtAmount = UsdtAmount × 0.999
<u>Step2:USDT -> EOS</u>
用 USDT 以 P2 的价格买入 EOS。
- EosAmount = RealUsdtAmount ÷ P2
- RealEosAmount = EosAmount × 0.999
<u>Step3:EOS -> ONE</u>
用 EOS 以 P3 的价格换回 ONE
- OneAmount = RealEosAmount ÷ P3
- RealOneAmount = OneAmount × 0.999
如果想获得盈利,则需要 RealOneAmount > A
即可。
经过简单的推导,我们可以发现该三角套利路径的盈利条件是:
(P1 × 0.999^3) ÷ (P2 × P3) > 1.0
代码实现
<b>检验是否具有套利机会</b>
static double TestBuySellSell(double q1, double q2, double q3)
{
return q2 * q3 * Math.Pow(0.999, 3) / q1;
}
<b>运行先买入后卖出的套利模型</b>
static void RunBuySellSell(double q1, double q2, double q3, double a)
{
double usdt = a;
double oneAmount = 1.0*usdt/q1;
double realOneAmount = oneAmount*0.999;
double eosAmount = realOneAmount*q2;
double realEosAmount = eosAmount*0.9999;
double usdtAmount = realEosAmount*q3;
double realUsdtAmount = usdtAmount*0.999;
//用USDT换入ONE
List<Order> orderOneUsdt = new List<Order>
{
new Order(q1, oneAmount),
};
_bigOneUtility.CreateBidOrders(orderOneUsdt, "ONE-USDT");
//用ONE换入EOS
List<Order> orderOneEos = new List<Order>
{
new Order(q2, realOneAmount),
};
//用EOS换入USDT
_bigOneUtility.CreateAskOrders(orderOneEos, "ONE-EOS");
List<Order> orderEosUsdt = new List<Order>
{
new Order(q3, realEosAmount),
};
_bigOneUtility.CreateAskOrders(orderEosUsdt, "EOS-USDT");
}
<b>检验是否具有获利机会</b>
static double TestSellBuyBuy(double p1,double p2,double p3)
{
return p1*Math.Pow(0.999, 3)/(p2*p3);
}
<b>运行先卖出后买入的套利模型</b>
static void RunSellBuyBuy(double p1, double p2, double p3, double a)
{
double one = a;
double usdtAmount = one*p1;
double realUsdtAmount = usdtAmount*0.999;
double eosAmount = 1.0*realUsdtAmount/p2;
double realEosAmount = eosAmount*0.999;
double oneAmount = 1.0*realEosAmount/p3;
double realOneAmount = oneAmount*0.999;
//用One 换入USDT
List<Order> orderOneUsdt = new List<Order>
{
new Order(p1, one),
};
_bigOneUtility.CreateAskOrders(orderOneUsdt, "ONE-USDT");
//用USDT 换入Eos
List<Order> orderUsdtEos = new List<Order>
{
new Order(p2, eosAmount),
};
_bigOneUtility.CreateBidOrders(orderUsdtEos, "EOS-USDT");
//用Eos 换入One
List<Order> orderEosOne = new List<Order>
{
new Order(p3, oneAmount),
};
_bigOneUtility.CreateBidOrders(orderEosOne, "ONE-EOS");
}
总结
到此为止,有关于三角套利的模型以及具体实现就介绍完了。
由于市场中做市商的存在,这样的套利机会虽然很多,但转瞬即逝。通过手工挂单的方式已经很难满足速度要求了。如果要用该种方式套利,需要写程序让计算机来执行。我上面的代码大家可以作为参考啊。今天就到这里吧!See You!
相关图文:
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
- 如何利用 C# 开发「桌面版百度翻译」软件!
- 如何利用 C# 开发「股票数据分析软件」(上)
- 如何利用 C# 开发「股票数据分析软件」(中)
- 如何利用 C# 开发「股票数据分析软件」(下)
- 如何利用 C# 爬取「财报说」中的股票数据?
- 如何利用 C# 爬取 One 持有者返利数据!
- 如何利用 C# 爬取Gate.io交易所的公告!
- 如何利用 C# 爬取BigOne交易所的公告!
- 如何利用 C# 爬取 ONE 的交易数据?
- 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
- 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
- 如何进行代码的重构?以封装 BigOne API 为例
- 如何利用BigOne的API制作自动化交易系统 -- 身份验证
- 如何利用BigOne的API制作自动化交易系统 -- 获取账户资产
- 如何利用BigOne的API制作自动化交易系统 -- 订单系统