用 Grafana + InfluxDB 可视化 APR——Binance(币安)和欧易(OKX)简单赚币(理财)对比
首先得非常感谢 @taresky 的文章 「无风险年化 360%?小白也能懂的 Crypto 套利」,让许多人可以以一个非偏见的形式「了解逻辑,理解风险,明白利润的来源」。
在文章中「交易所理财」是一个相对门槛低且较低风险的入门方式,本文将尝试进一步探索 OKX 和 Binance 两家提供的 USDT/USDC 理财。
Legal Notice
本文仅尝试从技术层面分析 OKX 和 Binance 两家提供的 USDT/USDC 理财平均 APR 情况,不构成任何投资建议。
根据「关于进一步防范和处置虚拟货币交易炒作风险的通知」:
(一)虚拟货币不具有与法定货币等同的法律地位。比特币、以太币、泰达币等虚拟货币具有非货币当局发行、使用加密技术及分布式账户或类似技术、以数字化形式存在等主要特点,不具有法偿性,不应且不能作为货币在市场上流通使用。
(四)参与虚拟货币投资交易活动存在法律风险。任何法人、非法人组织和自然人投资虚拟货币及相关衍生品,违背公序良俗的,相关民事法律行为无效,由此引发的损失由其自行承担;涉嫌破坏金融秩序、危害金融安全的,由相关部门依法查处。
Binance && OKX
根据文章,Binance 的 USDT 理财属于「暗池撮合」,利息每分钟计算/结算一次,利率也会随时调整(目前我观测到的是按照分钟为维度)。
OKX 理财(简单赚币)属于「暗池拍卖」,利息每小时结算,也会每小时变化,此外…
收益你只能拿到 85%,所以标称的出借年化 39% 可能是 33.15%,因为:
这句话似乎在官网上是没有写的,只有点「收益明细」才能看到
这里展示的 10% 可能是包含了「平台奖励」,比如前 1000USDT 可以获得 10%,剩余部分也许是 2%
我们可以对比一下两个产品在 App 上提供的年化利率参考:
Compare
好了,以上你已经了解到了两个产品的特性了,作为一个合格的"投资者",假设你有着非常合规的出入金途径,且不考虑平台跑路或者倒闭的系统性风险,为了获得更好的收益,你应该如何选择呢?
Binance 的理财看上去很不错,利息每分钟结算一次,不过利率看数字而言对比 OKX 有点低,但是 OKX 这个利率抖动情况会不会导致平均值其实不如 Binance?
Data Import
在大学时我们上过一个课程叫做「数据导入与预处理技术」,上面从 App 的数据来看似乎没法指导我们理解,Binance 只提供了 24hr 的利率变化,OKX 的图过于鬼畜没法看。
这个时候我们就需要考虑从额外的数据源(比如他们的官网)保存历史数据了,这里我使用 InfluxDB 保存数据,搓了个简单的 Python 脚本用 crontab 运行,部分代码如下:
def get_simple_earn_info():
url = "https://www.binance.com/bapi/earn/v1/friendly/finance-earn/simple/product/simpleEarnProducts"
r = requests.get(url)
return r.json()['data']['list']
def get_simple_earn_info_okx():
url = "https://www.okx.com/priapi/v1/earn/simple-earn/all-products?type=all"
r = requests.get(url)
return r.json()['data']['all']
if __name__ == '__main__':
client = InfluxDBClient(host=INFLUXDB_HOST, port=INFLUXDB_PORT,database=INFLUXDB_DB, username=INFLUXDB_USERNAME, password=INFLUXDB_PASSWORD)
# Fetch Binance simple Earn info
data = get_simple_earn_info()
for item in data:
asset = item['asset']
apr = item['productDetailList'][0]['marketApr']
if apr is not None:
apr = float(apr) * 100
else:
apr = float(0)
print(asset, apr)
json_body = [
{
"measurement": "simpleEarn",
"tags": {
"asset": asset,
},
"time": str(datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")),
"fields": {
"apr": apr,
}
}
]
client.write_points(json_body)
# Fetch OKX simple Earn info
...
在运行了一个月之后,我们可以在 Grafana 上可视化 Binance/OKX 所有理财的收益变化曲线,当然,为了帮助理解收益什么时候变化,我还保存了 BTC/ETH 的价格曲线,让我们来看看效果。
Crypto Price/APR
我们首先对比这些「理财」利率变化对应币价的关系,以 BTC/ETH 对比 Binance 的 USDT 理财为例。
可以看到每次在币价发生巨大变化的时候也会对应 APR 的变化,币价暴涨,APR 快速升高,币价下跌,APR 降低。
原因也很好理解,「你的理财,是存入资金,通过平台来放贷。借款者通过抵押的方式,向平台借款。」,「理财的收益来源于有人借钱」
Binance/OKX Compare
本文的重点在于对比 Binance 的稳定曲线和 OKX 的抖动曲线实际收益差异,于是我们将 USDT/USDC 的 Binance 和 OKX APR 曲线合并在一张图上,我们看这个图,右边有图例,以 _OKX
结尾的为 OKX 理财 APR。
将两个图对齐了之后我们终于可以知道 OKX 的 APR 曲线有多么鬼畜了,不过这个不是重点,重点在于——如何对比这两个理财产品的实际收益率(比如月平均 APR,日平均 APR)?
最简单可靠的方法是两个平台存入同数量的 USDT,然后一个月后观测结果
InfluxDB 支持按照小时来 Group 数据,上面数据的查询语句为:
SELECT mean("apr") FROM "autogen"."simpleEarn" WHERE ("asset"::tag = 'USDT_OKX') AND $timeFilter GROUP BY time($__interval) fill(null)
- 我们将
GROUP BY time($__interval)
换一下,改为GROUP BY time(24h)
获得每天数据 - 顺便考虑到 OKX 实际收益率为标定收益率的 85%,我们需要改写一下
最终查询语句变成这样
SELECT mean("apr") * 0.85 FROM "autogen"."simpleEarn" WHERE ("asset"::tag = 'USDT_OKX') AND $timeFilter GROUP BY time(24h) fill(null)
就可以看到这么一张图:
现在是不是就比较直观了,从图中我们可以看出,在 2024-03-20~2024-03-22 期间,OKX 和 Binance 实际日平均年化是差不多的,均在 9% 左右,而从 2024-03-23 开始 OKX 的理财收益就开始大于 Binance 了,直到今天。
OKX Tricks
但是真的就这么简单么?我们重新看一下 USDT_OKX 和 USDT(Binance) 的数据:
可以看到 APR 一直在 10%~某个值之间抖动,最低的时候就是稳定 10%,而 Binance 在 2024-03-22 开始已经稳定低于 10% 了。
如果这个时候你在 OKX 账户内观测的话,会发现这里的 10% 只是「平台奖励」的部分,如果你的资产超过奖励的线,比如 1000USDT 的话,超出部分的实际利率可能只有 2%。
所以上面的日平均 APR 图中 OKX 的曲线可能也只能作为一个参考,要获得非常真实的平均 APR 需要对 OKX 的数据做额外的处理,比如..通过 /api/v5/finance/savings/balance
接口获得真实已出借的资金利率?
以及,我们在知道了这样的数据之后,为了获得最大化利率,是否可以有一些其他的自动化动作?
本着授人以鱼不如授人以渔的精神,剩下的部分就交给读者来进行探索了。