zlq4863947 / triangular-arbitrage

数字货币-三角套利机器人
GNU General Public License v3.0
625 stars 230 forks source link

三角套利交易算法问题 #13

Closed zlq4863947 closed 6 years ago

zlq4863947 commented 6 years ago

套利标的信息:

{
    "id": "ETH-BTC-ADA",
    "a": {
        "coinFrom": "ETH",
        "coinTo": "BTC",
        "pair": "ETH/BTC",
        "side": "sell",
        "price": 0.076252,
        "quantity": 0.102,
        "conversionRate": 13.11441011383308
    },
    "b": {
        "coinFrom": "BTC",
        "coinTo": "ADA",
        "pair": "ADA/BTC",
        "side": "buy",
        "conversionRate": 0.00002348,
        "price": 0.00002348,
        "quantity": 591
    },
    "c": {
        "coinFrom": "ADA",
        "coinTo": "ETH",
        "pair": "ADA/ETH",
        "side": "sell",
        "price": 0.00030802,
        "quantity": 6147,
        "conversionRate": 3246.5424323095904
    },
    "rate": 0.03041329,
    "ts": 1520536682458
}

逻辑说明

现在已有上面的套利组合信息,套利对象为:ETH

最小交易数量 最小交易价格 最小下单总金额
0.001 ETH 0.000001 BTC 0.001 BTC
最小交易数量 最小交易价格 最小下单总金额
1 ADA 0.00000001 BTC 0.001 BTC
最小交易数量 最小交易价格 最小下单总金额
1 ADA 0.00000001 ETH 0.01 ETH

问题点

IMYin commented 6 years ago

咱可以拆分来看,总共就3步, 第1步没问题,就是2和3之间会卡主,那么把2和3之间的挂单量进行比较,挑小的那个,然后换算成A币,这就是要进行套利的额度

IMYin commented 6 years ago

首先 A ---> B是没有问题的,都是大币种,量肯定没问题,就是B --> C ---> A 出问题,为了保证量的话,我们不妨将所有的币种的一天之中的交易量过滤下,找出排名靠前的一些币,只套利它们。 如果程序在测算期间是根据卖一价或者买一价来计算的,那么在卖不出去的时候或者买不进来的时候,就挂单行不行?直到交易完成,再进行下一步骤的交易,直到套利完成。

或者为了保证 B-->C顺利完成,我们在套利开始时,提前将B-->C的的挂单一价的 量提出来,保证B-->C能够顺利完成,那么就剩下C--->A了,

IMYin commented 6 years ago

威 13:16:16 两部分相等大于最小标准交易量+手续费,就进行套利 威 13:17:19 保险点,交易量小于一点相等量

1112LIN commented 6 years ago

如果按照孙的 ,直接取B到C 这部分买一量 和 C到A这部分的卖1量进行比较。

1112LIN commented 6 years ago

整理一下思路 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的量

IMYin commented 6 years ago

ETH --->BTC ---> ADA 第1步: 卖出ETH ,换成BTC,看的是ETHBTC的买一价 第2步: 用BTC买入ADA,看的是BTCADA的卖一价 第3步:卖出ADA,换成ETH,看的是ETHADA的买一价

所以,想要完成交易,第1步不用担心,; 分别对第2步中BTCADA的卖一价的量和ETHADA买一价的量,计算出价值多少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
    套利开始
zlq4863947 commented 6 years ago

初始交易金额 = 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

然后取最小的
zlq4863947 commented 6 years ago

套利标的信息2:

{
    "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