数字货币的价格算法浅析
像爬虫一样学习
最近在尝试一种新的学习方式:在了解/学习一项新事物的时候,把途中遇到的感兴趣的知识点记录下来,然后再逐个发散地去学习,不断拓宽知识面。
之前在了解区块链的相关知识时,对数字货币的价格算法颇有兴趣,便研究了一番,顺便做个记录。
买入价和卖出价
没有买卖,便没有价格一说。所以,价格通常需要分为买入价和卖出价。
我们作为现实生活中的普通消费者,在说一个商品的价格时,通常指的是它的买入价,对于数字货币而言也是如此。
而这个价格则要取决于卖家的挂牌价(卖出价),当买家出价和卖家出价不一致时,通常会发生博弈行为,讨价还价则是买家和卖家博弈的典型。
另外一个老生常谈的价格影响因素则是供求关系,供不应求时价格上涨,供大于求时则下跌。
价格算法
在对上述的价格基本原理所有了解之后,也就不难理解现有的数字货币价格主流算法:基于订单薄、基于流动性池恒定乘积算法。
订单薄
大部分中心化的交易所(如币安、欧易)采用的是订单薄的方式。
每对数字货币都各自有一个订单薄,订单薄分买方和卖方两个阵营,每个买家/卖家下单的时候,会在订单薄上产生相应的一笔订单。系统实时计算卖方最低价和买方最高价,当他们相等(或产生交叉)时发生交易。
上面仅是对订单薄的一种简化描述,实际上基于订单薄的原理,可以衍生出很多的玩法:限价单、市价单、冰山单、止盈止损单等等。
恒定乘积
像 UniSwap、PancakeSwap、ICPSwap 之类的去中心化交易所,通常采用的是恒定乘积算法来确定币价。
它的原理是一个非常简单的数学公式 x * y = k
,x
和 y
是一个交易池中两种不同数字货币的数量,而 k
是它们的乘积,且每次交易后 k
值保持不变。
举个例子:假设在 ICP/USDT
交易池中,ICP
和 USDT
分别有 100 和 1000 枚,则它们的乘积 k
为 100000。当用户需要购买 1 枚 ICP
时,为了保证 k
值不变,他需要往池中放入的 USDT
数量为 100 * 1000 / (100 - 1) - 1000 ≈ 10.10
,即 ICP
的购买价格为 10.10 USDT
。
这个例子足够简单,并且省略了手续费的计算等步骤,但足以反映出供求关系对价格的影响。
参考资料
- Uniswap V3 Book 中文版