KB / ARTICLE

实盘策略集成

机器学习 · 期货版修订 R2发布于 2026-10-16

本文讲解如何将训练好的机器学习模型接入期魔方实盘策略:模型文件从训练侧到实盘侧的衔接方式、15 分钟预测策略完整示例,以及关键函数说明。

从训练到实盘:模型文件衔接

训练阶段(见案例:铁矿石预测螺纹钢)通过 get_save_model_path + joblib.dump 将模型保存到本地;实盘阶段在策略的 on_init 中通过 load_model 加载该模型文件。

要点:两处使用的模型文件名必须一致。本系列文档统一使用 model_lr.joblib:

# 训练侧:保存模型
model_filename = get_save_model_path("model_lr.joblib")
joblib.dump(model, model_filename)

# 策略侧:加载模型
context.model = load_model('model_lr.joblib')

实盘策略完整示例

完成模型训练后,下面以 15 分钟的机器学习预测模型为例,在策略中进行实际使用。

"""
案例
模型设定:通过铁矿石价格 15 分钟走势预测螺纹钢价格 15 分钟走势,并将结果输出到日志中
注意:本案例非交易案例,交易过程请参考策略文档进行编译
"""
# 通过 QMF 提供的多产品设置变量,设置需要的产品数据 
QMF_SUBSCRIBE_SYMBOLS = "I999:M15&rb999:M15"

def on_init(context):
    print("[on_init] => 初始化...")
  
    # 获取基础产品的产品 code 及周期并保存在变量中,方便后续访问使用
    context.base_instrument_id = BASE_SETTING.get("Instrument")
    context.period = BASE_SETTING.get("bPeriod") 
    # 设定一个全局的变量用于区分是否为新K线的计算使用
    context.nBars_time = ""
    # 加载机器学习模型
    # load_model 是策略模块封装的读取模型函数,可直接读取对应相对地址
    context.model = load_model('model_lr.joblib')
    print("[on_init] => 初始化完成")

# 当生成了新的 K 线时,就返回真
def is_changing(context,time_array):
    if context.nBars_time != time_array[-1]:
        context.nBars_time = time_array[-1]
        return True
    return False

# 每当新的行情进来就调用 on_tick() 函数一次;
def on_tick(context):
    import numpy as np
    # 获取铁矿石的K线数据 
    i999_data  = get_kline("I999", "M15", 2)
    # 获取螺纹钢的K线数据 
    rb999_data  = get_kline("rb999", "M15", 2)
  
    if is_changing(context,i999_data.get("datetime")):
        close_array = i999_data.get("close")
        I999_close = np.array([[close_array[-1]]])
        # 使用初始化时导入的模型,加载最新的铁矿石价格
        # 获得模型计算后返回的预测螺纹钢价格
        predicted_rb999_close = context.model.predict(I999_close)
        print(f"螺纹钢的价格预测值为:{predicted_rb999_close[0]:.2f}") 
        rb999_close = rb999_data.get("close")
    
        # 对比预测价格及实际价格进行后续操作计划
        if predicted_rb999_close[0] > rb999_close[-1]:
            print("预测的价格大于当前的实际价格,建议执行开多平空操作;")
        elif predicted_rb999_close[0] < rb999_close[-1]:
            print("预测的价格小于当前的实际价格,建议执行开空平多操作;")
      
def on_stop(context):
    print("demo停止")

以上是一个机器学习预测模型在实盘策略中的应用。

关键函数说明

  • QMF_SUBSCRIBE_SYMBOLS:QMF 提供的多产品订阅设置变量,格式为 产品:周期&产品:周期
  • on_init(context):策略初始化函数,在此通过 load_model 加载机器学习模型。load_model 是策略模块封装的读取模型函数,可直接读取对应相对地址
  • get_kline(symbol, period, count):获取指定品种、周期的最新 K 线数据
  • is_changing(context, time_array):自定义函数,通过对比最新 K 线时间判断是否生成了新 K 线,保证每根 K 线只计算一次
  • on_tick(context):每当新行情进来即调用一次。在新 K 线时取铁矿石最新收盘价送入模型预测,再对比预测价与螺纹钢实际价,输出操作提示
  • on_stop(context):策略停止时调用

相关阅读

已复制到剪贴板
机器学习 · 期货版修订 R2

返回机器学习 · 期货版板块

评论