问题描述
请教大神,期货分时图中的实时均价如何获取?不胜感谢
解决方案
在JoinQuant(聚宽)量化平台上,期货分时图中的“实时均价”(即当日开盘至当前时刻的成交均价)并没有直接作为一个现成的属性提供,但我们可以通过获取当日的累计成交额和累计成交量来轻松计算得出。
计算公式
期货实时均价 = 当日累计成交额 / (当日累计成交量 * 合约乘数)
实现方法
你可以使用聚宽的 get_current_tick() 函数来获取当前时刻的快照数据(Tick数据),该数据中包含了截至当前时刻的累计成交量(volume)和累计成交额(money)。
Python 代码示例
以下是一个在分钟级别或Tick级别策略中获取期货实时均价的示例代码:
# 导入聚宽函数库
import jqdata
def initialize(context):
# 设定基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设定要操作的期货合约,例如螺纹钢主力合约
g.security = 'RB9999.XSGE'
# 设定该品种的合约乘数(螺纹钢为10吨/手)
g.multiplier = 10
def handle_data(context, data):
# 获取当前最新 tick 数据
tick = get_current_tick(g.security)
# 确保 tick 数据存在且当日已有成交
if tick is not None and tick.volume > 0:
# 提取累计成交额和累计成交量
total_money = tick.money
total_volume = tick.volume
# 计算实时均价
# 均价 = 累计成交额 / (累计成交量 * 合约乘数)
realtime_avg_price = total_money / (total_volume * g.multiplier)
log.info(f"时间: {context.current_dt}, 合约: {g.security}, 累计成交量: {total_volume}, 累计成交额: {total_money}, 实时均价: {realtime_avg_price:.2f}")
else:
log.info(f"{g.security} 暂无成交数据")
注意事项
- 合约乘数:不同期货品种的合约乘数不同(例如螺纹钢是10,白银是15,沪深300股指期货是300)。在计算均价时,必须除以对应的合约乘数,否则计算出的价格会偏大。
- API 适用环境:
get_current_tick()是回测环境和模拟交易专用的 API,支持在run_daily、handle_data或handle_tick中调用。如果在研究环境(Jupyter Notebook)中,需要使用get_ticks()函数获取历史 tick 数据进行计算。 - 夜盘处理:聚宽的期货数据已经处理好了夜盘逻辑,有夜盘的品种,其累计成交量和成交额会从前一日晚上的 21:00 开始累计,符合交易所的实际交易日划分规则。