如何获取数据计算币安BTCUSDT永续合约资金费率的溢价指数时间加权平均值
Pine Script实现币安BTCUSDT永续合约资金费率计算方案
核心逻辑说明
币安永续合约资金费率每8小时(UTC时间0点、8点、16点)结算一次,你需要的时间加权平均溢价指数,本质是取上一个结算时间到当前时间共480分钟的溢价指数,按时间先后赋予1到480的权重后求和,再除以权重总和。
具体实现步骤
1. 获取分钟级溢价指数数据
首先调整request.security的分辨率参数,获取1分钟级的溢价指数序列,代码如下:
// 获取1分钟分辨率的溢价指数,单位转为% p_1min = request.security("BINANCE:BTCUSDT_PREMIUM", "1", close) * 100
2. 定位上一个资金结算时间点
通过UTC时间判断是否到达结算时点,再获取上一次结算对应的K线索引:
// 判断当前UTC时间是否为8小时整点结算时点 is_funding_time = hour(time, "UTC") % 8 == 0 and minute(time, "UTC") == 0 // 取上一次结算时点对应的K线索引 last_settlement_idx = ta.valuewhen(is_funding_time, bar_index, 0)
3. 计算时间加权平均溢价指数
权重总和为固定值:1+2+...+480 = (480*481)/2 = 115440,直接使用固定值即可无需动态计算:
// 当前K线距离上一次结算的分钟数,即当前溢价指数对应的权重 curr_weight = bar_index - last_settlement_idx // 累加过去480根1分钟K线的加权溢价指数总和 sum_weighted_p = ta.sum(curr_weight * p_1min, 480) // 计算时间加权平均溢价指数 avg_p = sum_weighted_p / 115440
4. 计算最终资金费率
币安默认8小时基准利率为0.01%,通过math.clamp限制偏移区间在±0.05%:
// 8小时基准拆借利率 interest_rate_8h = 0.01 // 按官方公式计算资金费率 funding_rate = avg_p + math.clamp(interest_rate_8h - avg_p, -0.05, 0.05)
完整测试代码
你可以直接复制以下代码到Pine编辑器运行:
//@version=5 indicator("币安BTCUSDT永续资金费率", overlay=false, precision=4) // 1. 获取1分钟溢价指数 p_1min = request.security("BINANCE:BTCUSDT_PREMIUM", "1", close) * 100 // 2. 定位上一个结算时间点 is_funding_time = hour(time, "UTC") % 8 == 0 and minute(time, "UTC") == 0 last_settlement_idx = ta.valuewhen(is_funding_time, bar_index, 0) // 3. 计算时间加权平均溢价指数 curr_weight = bar_index - last_settlement_idx sum_weighted_p = ta.sum(curr_weight * p_1min, 480) avg_p = sum_weighted_p / 115440 // 4. 计算最终资金费率 interest_rate_8h = 0.01 funding_rate = avg_p + math.clamp(interest_rate_8h - avg_p, -0.05, 0.05) // 绘制资金费率曲线 plot(funding_rate, title="资金费率(%)", color=color.new(color.blue, 0), linewidth=2) // 标记0轴 hline(0, "0轴", color=color.gray, linestyle=hline.style_dashed)
注意事项
- 脚本需要运行在1分钟及更高分辨率的K线图上,否则无法获取足够的分钟级数据
- 回测时建议开启编辑器设置中的「扩展历史数据」选项,避免前期480分钟数据不足导致计算偏差
- 计算结果单位为%,和币安官方公布的资金费率单位一致,可直接对比校验
内容的提问来源于stack exchange,提问作者user511981
相关产品推荐
相关产品推荐

