本文讲解如何将训练好的机器学习模型接入期魔方实盘策略:模型文件从训练侧到实盘侧的衔接方式、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):策略停止时调用
相关阅读
- • 机器学习流程详解
- • 策略文档 • 期货版

评论
登录后参与讨论,与站内账号体系共用。