浅谈虚拟货币交易所三角套利的算法


高频交易(HFT, High Frequency Trading) 指得是我们可以让程序调用交易所的API 来自动下买单或者卖单, 赚差价来达到挣钱的目的. 常见的高频交易策略有低买高卖, 本文介绍一种常见的三角套利的策略.

高频交易 (HFT) 简介

高频交易 (HFT) 是一种算法交易, 它使用计算机程序在金融市场上快速执行交易. 它是一种自动交易形式, 使用复杂的算法来分析市场数据并以闪电般的速度执行交易. 对冲基金和投资银行等大型机构投资者使用高频交易来利用市场中的微小价格差异.

高频交易者使用复杂的算法来识别和利用这些价格差异. 这些算法旨在扫描市场以寻找潜在机会, 并在发现机会后立即执行交易. 这使得高频交易者可以在价格差异消失之前利用它们.

高频交易者还使用复杂的风险管理技术来限制他们的风险敞口. 通过使用止损单和其他风险管理策略, 高频交易者可以在市场走势对他们不利时限制损失.

高频交易是一项复杂且具有风险的策略, 并不适合所有投资者. 在尝试使用高频交易之前了解与高频交易相关的风险非常重要. 使用提供安全交易平台和可靠客户服务的信誉良好的经纪人也很重要.

三角套利算法简介

高频交易者采用的最流行的策略之一是三角套利. 三角套利是一种利用三种不同资产价格差异的交易策略. 它涉及同时买卖三种不同的资产, 以便从它们之间的价格差异中获利. 例如, 如果一只股票在一个交易所的价格高于另一个交易所的价格, 交易者可以在价格较低的交易所买入该股票, 并在价格较高的交易所卖出以获利.

三角套利是高频交易者的一种流行策略, 因为它可以快速执行且风险最小. 该策略利用了市场上由于流动性, 交易量和其他因素的差异而可能出现的微小价格差异. 通过快速执行交易, 高频交易者可以在这些差异消失之前利用它们.

三角套利是一种利用外汇市场上三种不同货币对之间的差异进行交易的策略. 它也被称为交叉货币套利或三点套利. 高频交易 (HFT) 是一种算法交易, 它使用计算机程序在金融市场上快速执行交易. 高频交易通常用于三角套利, 因为它允许交易者利用三种不同货币对之间的微小价格差异.

在三角套利中, 交易者将同时买卖三种不同的货币对, 以利用它们之间的价格差异. 例如, 如果 EUR/USD 汇率为 1.10, USD/JPY 汇率为 110.00, 而 EUR/JPY 汇率为 121.00, 则交易者可以买入 EUR/USD, 卖出 USD/JPY, 买入 EUR/ 日元获利. 这是因为交易者可以以 1.10 的价格买入 EUR/USD, 以 110.00 的价格卖出 USD/JPY, 以 121.00 的价格买入 EUR/JPY, 从而获利 10.00.

HFT 通常用于三角套利, 因为它允许交易者快速利用小的价格差异. HFT 算法可以扫描市场中的价格差异并在几毫秒内执行交易, 允许交易者在价格差异消失之前利用它们.

总的来说, 三角套利是一种利用外汇市场上三种不同货币对之间的差异进行交易的策略. 高频交易通常用于三角套利, 因为它允许交易者快速利用小的价格差异.

bitcoin-logo 浅谈虚拟货币交易所三角套利的算法 交易所 Crypto Exchanges 加密货币 区块链 数据结构与算法 程序设计 算法 编程 资讯 跟我一起来谈钱 高频交易 HFT

比特币

前几天 在 STEEM 编程群里 大家聊到了三角套利的可能, 简单来说, 就是在交易所里可以交易的虚拟货币 A-B-C, 当价格A/B价格*B/C价格*C/A价格大于1的时候就有套利撸羊毛的可能, 反之则不符合套利规则.

比如:

BTC/USDT 9044.53
USDT/XRP 3.5669
XRP/BTC 0.00003097

而 9044.53*0.00003097*3.5669=0999121, 则不可能套利, 因为我用1个BTC换得9044.53个USDT, 然后可以换得 9044.53*3.5669个 XRP, 然后再换回BTC就是9044.53*3.5669*0.0003097个, 小于我们刚开始的1个BTC的本金.

价格是由市场决定, 所以是完全有可能能找到三角套利的配对. 不过这里还有两个限制条件:

  • 手续费: 交易所才是一本万利的买卖, 每笔交易都有手续费, 所以三角套利里需要交的手续费有三次. 这个需要考虑进去, 否则能亏死. 这个手续费能容易的估算并且考虑在模型中.
  • 交易深度: 深度简单来说就是可交易量, 还是上面的例子, 比如你拿了1个BTC来换 USDT没问题, 但是当你从USDT换成XRP 结果市场上可交易的单子量远远不够1 个BTC, 那你这个三角套利就卡住了无法进行下去. 当然比较有可能的情况就是价格 3.5669的单子(你要的价格) 可交易量不足.
  • 时效: 交易所的价格是不停变化的, 出单的速度很快, 瞬息万变. 可能这一秒还是这个价格, 下一秒就不一定了. 三角套利一定要快.

不一定要同一交易所, 假设里你的子单充足, 并且在几大交易所里都有相应的配对, 三角套利也是可以进行的, 并且是可以同时进行的. 交易所互相进行转帐是会有一个额外的手续费的.

三角套利的算法

假设上面说的因素都是可控的, 我们可以在算法模型中引起, 比如可以适当加大套利触发的敏感阀值来保证每次 三角套利总是能挣钱的, 哪怕只有一点点利润也是可以的, 因为只要不停的撸羊毛, 总能撸成棉袄.

假设已知 所有交易配对及其价格: pairs = [(A, B, price) …] 那我们可以预先处理成 有向图 (Directed Graph), 具体实现可以用 稀疏矩阵 或者二维链表. 这里的采用的数据结构一定要满足快的要求, 给你一个虚拟货币, 你要很快的查得所有能和它交易的配对. 可以以虚拟货币来哈希.

交易配对并不是一个完全图, 比如 STEEM 要换成 YOYOW, 就需要通过 STEEM/BTC, 然后BTC/YOYOW. 一般来说, 交易对是双向的, 比如 STEEM换成BTC, 也可以BTC换成STEEM (有点废话哈, 有买就有卖)

然后, 我们就可以从每个顶点进行一次广度优先的算法 (Breadth First Search). 每次把当前的价格交易系数记录下来并传到下一层新节点去. 这里需要判断重复, 比如我们从 BTC 开始, BTC可以和 STEEM 配对, 当到了STEEM, 我们就没有必要再回去BTC了, 否则会陷入死循环. 这个可以用哈希集合来解决 (unordered_set)

当然我们也可以用深度优先算法, 两种树的搜索算法都可以加入几个条件来限制树的扩展和搜索. 深度优先可能会更先返回一个可交易的三角套利的方案, 而广度优先算法在返回所有可获利的方案上更有优势.

  • 最大层数为3. 当然理论上可以4角套利甚至5角套利, 因为只要这条交易链最后回到了原节点货币并且交易系数相乘是大于1的, 就可以套利. 只不过链数也长, 不确定因素越大, 获利的难度更大(深度影响和时效).
  • 可以适当的过滤掉交易深度浅的节点, 而从量大支持更广的BTC就可以了.

可能的搜索树长这样:

1
2
3
4
5
6
7
        BTC
       /     \
     USDT    STEEM
    /  \       /    
   XRP STEEM   EOS
  /    /       /
 BTC  BTC     BTC
        BTC
       /     \
     USDT    STEEM
    /  \       /    
   XRP STEEM   EOS
  /    /       /
 BTC  BTC     BTC

三角套利套用广度优先搜索算法的C++伪代码如下(未经测, 概不负责):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
typedef coin string;
const double C_MARGIN = 0.1; // 敏感阀值, margin
 
vector<vector<coin>> findProfit(const CoinGraph G, coin root) {
    queue<pair<vector<coin>, double>> Q; // 队列
    unordered_set<coin> visited;       // 这条链是否已经访问过了
    Q.push({{root}, 1.0});                   // 初始货币, 还有本金为1个
    ans = vector<vector<coin>>();// 结果列表
    while (!Q.empty()) {
       auto p = Q.front();
       Q.pop();
       coin previousCoin = p.first.back(); // 链的最后一个货币
       if (previousCoin != root) visited.insert(previousCoin); 
       if ((p.first.size() >= 4)) {  // BTC-USDT-XRP-BTC
          // 可套利 并且又回到了初始节点
          if ((p.second > 1 + C_MARGIN) && (previousCoin == root)) {
             ans.push_back(p.first); // 加入结果
          }
       } else {
          for (const auto &c: G[p.first.back()].getPairs()) { // 获取该货币所有可配对的货币列表
             vector<int> newChain = p.first;
             newChain.push_back(c);   // 把该货币加到该链上
             if (!visited.count(c)) {  // 没有访问过该货币
                 Q.push({newChain, p.second * c.getPrice()}); // 把该链和新的价格系数入队列
                 visited.insert(c);    // 防止重复搜索同样的货币
             }
          }
       }
    }
    return ans;
}
typedef coin string;
const double C_MARGIN = 0.1; // 敏感阀值, margin

vector<vector<coin>> findProfit(const CoinGraph G, coin root) {
    queue<pair<vector<coin>, double>> Q; // 队列
    unordered_set<coin> visited;       // 这条链是否已经访问过了
    Q.push({{root}, 1.0});                   // 初始货币, 还有本金为1个
    ans = vector<vector<coin>>();// 结果列表
    while (!Q.empty()) {
       auto p = Q.front();
       Q.pop();
       coin previousCoin = p.first.back(); // 链的最后一个货币
       if (previousCoin != root) visited.insert(previousCoin); 
       if ((p.first.size() >= 4)) {  // BTC-USDT-XRP-BTC
          // 可套利 并且又回到了初始节点
          if ((p.second > 1 + C_MARGIN) && (previousCoin == root)) {
             ans.push_back(p.first); // 加入结果
          }
       } else {
          for (const auto &c: G[p.first.back()].getPairs()) { // 获取该货币所有可配对的货币列表
             vector<int> newChain = p.first;
             newChain.push_back(c);   // 把该货币加到该链上
             if (!visited.count(c)) {  // 没有访问过该货币
                 Q.push({newChain, p.second * c.getPrice()}); // 把该链和新的价格系数入队列
                 visited.insert(c);    // 防止重复搜索同样的货币
             }
          }
       }
    }
    return ans;
}

三角套利算法由于很简单, 直接明了, 可操作性强, 据说有人已经写过机器人获得数千万的羊毛, 我等只能膜拜的份了. 不过现在要想在交易所里进行虚拟货币三角套利, 可能没那么简单, 只能机器人不停的搜索, 等待时机成熟, 下手快准狠, 每次撸一点羊毛, 这也是我们常说的搬砖的其中一种方式.

对一同一交易所, 三角套利也许实际上操作起来并不适用, 因为手续费通常能比搬砖得到的收益多.

PS: 不构成任何投资建议, 币圈有风险, 入行需谨甚.
PPS: 交易所撮合引擎是中心化的, 这种搬砖现在不太行了, 当大家都发现的时候 就没有利益了, 所以闷声发大财.
PPPS: 币安api有百分之几的概率延迟抖动, 很难解决.

PPPPS: 订单簿简介(Order Book)+最简单的高频交易策略HFT(低买高卖)

英文: High-Frequency Trading (HFT) – Triangular Arbitrage Algorithm

Crypto虚拟货币交易所

whale-300x200 浅谈虚拟货币交易所三角套利的算法 交易所 Crypto Exchanges 加密货币 区块链 数据结构与算法 程序设计 算法 编程 资讯 跟我一起来谈钱 高频交易 HFT

Steem 坐火箭🚀!

  • 您可以通过 steem2sol 交换 STEEM/SBD 到 SOL Solana 索拉纳!
  • 您可以通过 steem2eth 兑换 STEEM/SBD 到 ETH (Ethereum 以太网)
  • 您可以通过 steem2usdt 兑换 STEEM/SBD 到 Tether USDT (波场U, TRC-20)
  • 您可以通过 steem2trx 兑换 STEEM/SBD 到 波场 TRX (TRON)
  • 您可以通过 steem2bts 兑换 STEEM/SBD 到 比特股 BTS (BitShares)
  • SteemYY 免费注册 STEEM 帐户
  • Steem 区块链浏览器

GD Star Rating
loading...
本文一共 2543 个汉字, 你数一下对不对.
浅谈虚拟货币交易所三角套利的算法. (AMP 移动加速版本)
上一篇: 程序员能刷题的网站和资源(我的刷题经验之谈)
下一篇: Microbit/Javascript 编程入门之简易计数器

扫描二维码,分享本文到微信朋友圈
25f61b4e6dac920131e50b68755cbaa9 浅谈虚拟货币交易所三角套利的算法 交易所 Crypto Exchanges 加密货币 区块链 数据结构与算法 程序设计 算法 编程 资讯 跟我一起来谈钱 高频交易 HFT

评论