Nova Kwok's Awesome Blog

用 Grafana + InfluxDB 可视化 APR——Binance(币安)和欧易(OKX)简单赚币(理财)对比

首先得非常感谢 @taresky 的文章 「无风险年化 360%?小白也能懂的 Crypto 套利」,让许多人可以以一个非偏见的形式「了解逻辑,理解风险,明白利润的来源」。

在文章中「交易所理财」是一个相对门槛低且较低风险的入门方式,本文将尝试进一步探索 OKX 和 Binance 两家提供的 USDT/USDC 理财。

本文仅尝试从技术层面分析 OKX 和 Binance 两家提供的 USDT/USDC 理财平均 APR 情况,不构成任何投资建议。

根据「关于进一步防范和处置虚拟货币交易炒作风险的通知」:

(一)虚拟货币不具有与法定货币等同的法律地位。比特币、以太币、泰达币等虚拟货币具有非货币当局发行、使用加密技术及分布式账户或类似技术、以数字化形式存在等主要特点,不具有法偿性,不应且不能作为货币在市场上流通使用。

(四)参与虚拟货币投资交易活动存在法律风险。任何法人、非法人组织和自然人投资虚拟货币及相关衍生品,违背公序良俗的,相关民事法律行为无效,由此引发的损失由其自行承担;涉嫌破坏金融秩序、危害金融安全的,由相关部门依法查处。

Binance && OKX

根据文章,Binance 的 USDT 理财属于「暗池撮合」,利息每分钟计算/结算一次,利率也会随时调整(目前我观测到的是按照分钟为维度)。

OKX 理财(简单赚币)属于「暗池拍卖」,利息每小时结算,也会每小时变化,此外…

我们可以对比一下两个产品在 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)

最终查询语句变成这样

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 接口获得真实已出借的资金利率?

以及,我们在知道了这样的数据之后,为了获得最大化利率,是否可以有一些其他的自动化动作?

本着授人以鱼不如授人以渔的精神,剩下的部分就交给读者来进行探索了。

#Chinese