2022-01-27 05:01 | 出处: odaily
原文作者:Dave White,Frankie,Justin Roiland
原文编译:Kyle,DiFi 之道
如果我们想每天卖出 100 个 NFT,但实际只能卖出 10 个,那么 CRISP 会慢慢降低“立即购买”的价格。如果我们想每天卖出 100 个 NFT,但实际能够卖出 200 个,那么 CRISP 会在每次新卖出时迅速提高“立即购买”的价格。
我们提供了一个 Python notebook 来模拟这个机制的行为,以及一个参考 Solidity 实现。
我们使用指数移动和或 EMS 来衡量销售速度。
EMS 是对指数移动平均线的调整,通常用于量化交易,以衡量某个数量在最近加权时间窗口内的累积。它的计算成本很低,并且需要很少的存储空间。
CRISP EMS特别是用来跟踪最近一段时间内出售的 NFT 数量,该时间段由销售平均半衰期定义。平均半衰期为 100 的销售意味着 100 个区块前的销售只会增加当前 EMS 的 1/2。
区块b中的 EMS 递归定义为:
其中S_b 是一个变量,表示在区块b中发生的销售数量。
给定两个区块 b_1 和 b_2,假设区块之间没有发生销售,我们有
我们可以使用上述公式将目标销售速度转换为一个目标 EMS。 假设我们的目标是每 n 个区块进行 1 次销售,那么目标 EMS 应该是
然后设定
其中价格上涨速度控制价格对目标价格和观察价格之间差异的反应速度。
在此示例中,我们在 200 个区块的周期内对 CRISP 进行建模。 我们的目标是每 100 个区块进行一次销售,并使用 700 个区块的销售半衰期。 在给定的时期内,我们看到每 50 个区块发生一次购买,这超出了我们的目标。 这会在每次购买时将 EMS 推高,价格也会相应做出反应。
但是,我们希望随着时间的推移缓慢降低价格,因为我们设法以之前的价格达到了目标速度,而且我们不希望降价超过我们必须的水平。
假设最后一笔交易发生在区块 b_1 的price_{b_1},那么区块 b_2 的价格由下式给出:
其中价格衰减半衰期控制衰减速度。
因为我们只想在销售速度低于目标时衰减价格,如果当前销售是自销售速度低于目标速度后的第一次销售,我们从低于目标时的区块开始计算衰减,而不是从自上次销售以来的时间。
在此示例中,我们在 300 个区块的周期内对 CRISP 进行建模。 同样,我们的目标是每 100 个区块进行一次销售。 在给定的时间段内,只有一次购买发生在第 200 个区块。 我们看到当前 EMS 在前 200 个区块上缓慢下跌,但价格直到第 100 个区块左右才开始下跌,此时当前 EMS 跌破目标。 由于购买后,EMS仍然低于目标,价格没有上涨。
将目标销售速度转换为目标 EMS:证明
假设我们的目标是每第 n 个区块销售 1 次。 然后,使用公式 (1),第 k^{th} 次销售的区块上的 EMS 为
这是一个几何级数,收敛于
因此,我们可以在目标销售速度和目标 EMS 之间进行转换。