Closed zlq4863947 closed 6 years ago
咱可以拆分来看,总共就3步, 第1步没问题,就是2和3之间会卡主,那么把2和3之间的挂单量进行比较,挑小的那个,然后换算成A币,这就是要进行套利的额度
首先 A ---> B是没有问题的,都是大币种,量肯定没问题,就是B --> C ---> A 出问题,为了保证量的话,我们不妨将所有的币种的一天之中的交易量过滤下,找出排名靠前的一些币,只套利它们。 如果程序在测算期间是根据卖一价或者买一价来计算的,那么在卖不出去的时候或者买不进来的时候,就挂单行不行?直到交易完成,再进行下一步骤的交易,直到套利完成。
或者为了保证 B-->C顺利完成,我们在套利开始时,提前将B-->C的的挂单一价的 量提出来,保证B-->C能够顺利完成,那么就剩下C--->A了,
威 13:16:16 两部分相等大于最小标准交易量+手续费,就进行套利 威 13:17:19 保险点,交易量小于一点相等量
如果按照孙的 ,直接取B到C 这部分买一量 和 C到A这部分的卖1量进行比较。
整理一下思路 A1-->B-->C-->A3 第一步 B-->C C的卖1量为D C-->A3 A3的卖1量为E 则交易量为X=D=E> min+0.1% 运行 X=D=E<min+0.1% 取消 第二步 保险点 X=A1()%-->换成使用A1的量
ETH --->BTC ---> ADA 第1步: 卖出ETH ,换成BTC,看的是ETH对BTC的买一价 第2步: 用BTC买入ADA,看的是BTC对ADA的卖一价 第3步:卖出ADA,换成ETH,看的是ETH对ADA的买一价
所以,想要完成交易,第1步不用担心,; 分别对第2步中BTC对ADA的卖一价的量和ETH对ADA买一价的量,计算出价值多少ETH,选择值较小的; 如果这个值,满足(大于)平台设置的最小交易额度,则进行套利,否则套利取消。
伪代码:
初始交易金额 = 0
B2C_ask_volumn = get_volumn()
B2C_ask_price = get_price()
B2C_cost = B2C_ask_volumn * B2C_ask_price
C2A_bid_volumn = get_volumn()
C2A_bid_price = get_price()
C2A_cost = C2A_bid_volumn * C2A_bid_price
if B2C_cost > C2A_cost and C2A_cost > 最小交易额度:
初始交易金额 = C2A_cost
套利开始
if C2A_cost > B2C_cost and B2C_cost > 最小交易额度:
初始交易金额 = B2C_cost
套利开始
初始交易金额 = 0
// B2C_cost = B2C_ask_volumn * B2C_ask_price
B2C总价 = 0.00002348 * 591 = 0.01387668 BTC
B2C总价_ETH = 0.01387668 BTC / 0.076252 = 0.1819844725384252
// C2A_cost = C2A_bid_volumn * C2A_bid_price
C2A总价 = 0.00030802 * 6147 = 1.89339894 ETH
然后取最小的
{
"id": "BTC-ETH-SALT",
"a": {
"coinFrom": "BTC",
"coinTo": "ETH",
"pair": "ETH/BTC",
"side": "buy",
"conversionRate": 0.078563,
"price": 0.078563,
"quantity": 1.67
},
"b": {
"coinFrom": "ETH",
"coinTo": "SALT",
"pair": "SALT/ETH",
"side": "buy",
"conversionRate": 0.004515,
"price": 0.004515,
"quantity": 0.01
},
"c": {
"coinFrom": "SALT",
"coinTo": "BTC",
"pair": "SALT/BTC",
"side": "sell",
"price": 0.000355,
"quantity": 100.75,
"conversionRate": 2816.9014084507044
},
"rate": 0.08120815,
"ts": 1520659933180
}
最小交易数量 | 最小交易价格 | 最小下单总金额 |
---|---|---|
0.001 ETH | 0.000001 BTC | 0.001 BTC |
0.01 SALT | 0.000001 ETH | 0.01 ETH |
0.01 SALT | 0.000001 BTC | 0.001 BTC |
初始交易金额 = 0
// B2C_cost = B2C_volumn / B2C_price
B2C总价 = 0.01 ETH / 0.004515= 2.21 SALT
B2C总价_BTC = 2.21 SALT x 0.000355 = 0.000784 BTC
// C2A_cost = C2A_volumn * C2A_price
C2A总价 = 0.000355 * 100.75 = 0.03576625 BTC
套利标的信息:
程序交易代码 : https://github.com/zlq4863947/triangular-arbitrage/blob/develop/src/lib/trading.ts#L37-L96
BigNumber语法说明
times
: 乘法div
: 除法plus
: 加法minus
: 减法逻辑说明
现在已有上面的套利组合信息,套利对象为:
ETH
,0.5 ETH
汇率为:0.076252
,挂单量为:0.102
程序判断side= "sell"
,所以换算BTC
为乘法 换成BTC:0.5 ETH
x0.076252
=0.038126 BTC
0.038126 BTC
汇率为:0.00002348
,挂单量为:591
程序判断side= "buy"
,所以换算ADA
为除法 换成ADA:0.038126 BTC
/0.00002348
=1693 ADA
1693 ADA
汇率为:0.00030802
,挂单量为:6147
程序判断side= "sell"
,所以换算ETH
为乘法 换成ETH:1693 ADA
x0.00030802
=0.52147786 ETH
问题点
591
, 但是要卖的量有1693
, 现在想到的解决办法是按限价单
以1693
卖出。