当前位置: 首页 > article >正文

【深度学习量化交易18】盘前盘后回调机制设计与实现——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~
目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。

盘前时间是交易者准备当日交易计划、分析隔夜数据和市场情绪的黄金时段,而盘后则适合总结当日表现、调整策略参数并为次日交易做准备。本文将详细介绍盘前盘后回调机制的设计与实现过程,探讨如何在量化交易框架中优雅地集成这一功能,使策略开发者能够充分利用非交易时段进行策略优化和执行。

一、系统架构设计

前文讲到过,策略文件是由初始化配置和主要交易逻辑两个核心部分组成,今天则是要在这两个组成部分之外,额外增加两个回调函数,分别处理盘前和盘后操作。当然这个设置是可选项,不做盘前盘后处理也是没问题的。

盘前盘后回调机制的系统架构基于事件驱动模型实现。配置数据从GUI层传递至框架层,包含回调开关和时间设置。框架使用反射机制检测策略是否实现了盘前盘后回调接口,并维护状态变量避免重复触发。

触发时,系统构造仅含时间信息的数据结构传递给回调函数,返回的交易信号由交易管理器统一处理。

整个设计保持了接口一致性和模块间低耦合,使策略开发者能专注于业务逻辑而非底层实现。

二、策略接口设计

为支持盘前盘后回调,我们在策略模块中定义了两个标准函数接口:

def khPreMarket(data: Dict) -> List[Dict]:
 """盘前回调函数,在每个交易日开盘前执行"""
 # 策略逻辑
 return signals

def khPostMarket(data: Dict) -> List[Dict]:
 """盘后回调函数,在每个交易日收盘后执行"""
 # 策略逻辑
 return signals

这两个函数接口与主策略函数(khHandlebar)采用相同的数据格式和返回值结构,确保了接口一致性,降低了用户的学习成本。回调函数接收包含时间信息的市场数据,并返回交易信号列表,系统会自动处理这些信号。

顺便说一句,策略模块中其他两个接口是:

策略主逻辑khHandlebar:

def khHandlebar(data: Dict) -> List[Dict]:
    """策略主逻辑
    
    Args:
        data: 行情数据,格式为 {股票代码: {字段名: 字段值}, "__current_time__": {...}}
              其中包含特殊键"__current_time__",其值为一个字典,包含以下字段:
              - timestamp: 时间戳(整数,秒级)
              - datetime: 格式化的日期时间字符串,格式为"%Y-%m-%d %H:%M:%S"
              - date: 格式化的日期字符串,格式为"%Y-%m-%d"
              - time: 格式化的时间字符串,格式为"%H:%M:%S"
              - raw_time: 原始时间戳(保持原格式)
        
    Returns:
        List[Dict]: 交易信号列表,每个信号字典包含以下字段:
        {
            "code": str,       # 股票代码
            "action": str,     # 交易动作,可选值:"buy"(买入) | "sell"(卖出)
            "price": float,    # 委托价格
            "volume": int,     # 委托数量,单位:股
            "reason": str,     # 交易原因说明
            "order_type": str, # 可选,委托类型,默认为"limit":
                              # "limit"(限价) | "market"(市价) | "best"(最优价)
            "position_type": str,  # 可选,持仓方向,默认为"long":
                                  # "long"(多头) | "short"(空头)
            "order_time": str, # 可选,委托时间,格式"HH:MM:SS"
            "remark": str      # 可选,备注信息
        }
    """

以及策略初始化init:

def init():
    """策略初始化"""

这里就先不展开说了,回头专门会写文章介绍策略编写框架。

三、用户界面实现

为了让用户可以灵活配置盘前盘后回调,我在GUI界面中设计了专门的设置区域:

  • 复选框控制是否启用盘前盘后回调
  • 时间选择器设定具体的触发时间

这个界面是很简单的:

这些设置被保存在配置文件中,系统在启动时会加载这些设置,确保每次运行时都应用用户的偏好。界面设计遵循了直观、简洁的原则,使用户能够轻松理解和操作。

四、回测模式实现

回测模式下,盘前盘后回调的实现需要解决以下关键问题:

  1. 时间点识别:系统需要识别新的交易日开始和结束
  2. 数据处理:即使某些时间点缺乏市场数据,也能正确执行回调
  3. 信号处理:回调函数生成的交易信号需要被正确处理

具体实现中,系统会根据历史数据生成一系列时间点,按时间顺序模拟市场运行。当检测到新的交易日开始时,先执行盘前回调;当交易日结束时,则执行盘后回调。为确保在没有市场数据时也能执行回调,我们实现了一种机制,创建只包含时间信息的数据结构。

五、工具函数支持

为支持盘前盘后回调机制,我们在工具类中增加了一些辅助函数,如is_trade_day方法用于判断某个日期是否为交易日:

def is_trade_day(self, date_str: str = None) -> bool:
 """判断是否为交易日"""
 if date_str is None:
        date_str = datetime.datetime.now().strftime("%Y-%m-%d")
 
 # 解析日期
    date = datetime.datetime.strptime(date_str, "%Y-%m-%d")
 
 # 排除周六和周日
 if date.weekday() >= 5:
 return False
 
 # 这里可以添加节假日的判断逻辑
 return True

这些工具函数极大地简化了主要逻辑的复杂度,提高了代码的可读性和可维护性。

六、下一步考虑

后边还有几件事要做,做完后回测系统就可以跟大家见面了:

  • 完善不同数据订阅模式与框架的兼容
  • 策略的项目化管理设置
  • 回测结果可视化与评估参数优化
  • 与成熟的回测软件(比如QMT)进行相同策略的对比,以验证软件的有效性

因此,目前的回测系统还不满足放出来给大家使用的状态,待测试稳定后,快捷的安装包版本以及全部开源代码都会放出来给读者朋友们使用。

近期我尽量加快软件和文章更新的频率,尽早让朋友们使用上这个软件。

回测系统一览

end、开通miniQMT

上述讲到的系统是基于miniQMT,很多券商都可以开通miniQMT,不过门槛各有不同,很多朋友找不到合适的券商和开通渠道。这里我可以联系券商渠道帮忙开通,股票交易费率是万1,开通成功的朋友都可以免费使用上边开发的“看海量化交易系统”。这个系统还在持续开发的过程中,数据下载的功能已经可以使用,回测部分正在加紧开发,大家可以先开通MiniQMT的权限,这样回测部分的功能放出后就能第一时间用上了~

对于想要开通miniQMT、使用上边开发的“看海量化交易系统”的朋友们,请大家关注一下我的公众号“看海的城堡”,在公众号页面下方点击相应标签即可获取。

相关文章

【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想

【深度学习量化交易2】财务自由第一步,三个多月的尝试,找到了最合适我的量化交易路径

【深度学习量化交易3】为了轻松免费地下载股票历史数据,我开发完成了可视化的数据下载模块

【深度学习量化交易4】 量化交易历史数据清洗——为后续分析扫清障碍

【深度学习量化交易5】 量化交易历史数据可视化模块

【深度学习量化交易6】优化改造基于miniQMT的量化交易软件,已开放下载~(已完成数据下载、数据清洗、可视化模块)

【深度学习量化交易7】miniQMT快速上手教程案例集——使用xtQuant进行历史数据下载篇

【深度学习量化交易8】miniQMT快速上手教程案例集——使用xtQuant进行获取实时行情数据篇

【深度学习量化交易9】miniQMT快速上手教程案例集——使用xtQuant获取基本面数据篇

【深度学习量化交易10】miniQMT快速上手教程案例集——使用xtQuant获取板块及成分股数据篇

【深度学习量化交易11】miniQMT快速上手教程——使用XtQuant进行实盘交易篇(一万七千字超...

【深度学习量化交易12】基于miniQMT的量化交易框架总体构建思路——回测、模拟、实盘通吃的系统架...

【深度学习量化交易13】继续优化改造基于miniQMT的量化交易软件,增加补充数据功能,优化免费下载...

【深度学习量化交易14】正式开源!看海量化交易系统——基于miniQMT的量化交易软件

【深度学习量化交易15】基于miniQMT的量化交易回测系统已基本构建完成!AI炒股的框架初步实现

【深度学习量化交易16】韭菜进阶指南:A股交易成本全解析

【深度学习量化交易17】触发机制设置——基于miniQMT的量化交易回测系统开发实记


http://www.kler.cn/a/592912.html

相关文章:

  • Leetcode 刷题笔记1 单调栈part01
  • 瑞幸需要宇树科技
  • 使用hel-micro微服务实现在jsp项目中引入react组件
  • Jenkins自动化部署pigx项目的实践总结
  • DLMS电能表通讯协议学习笔记
  • 2025三掌柜赠书活动第八期:预训练语言模型:方法、实践与应用
  • 联核科技AGV无人叉车有哪些常见的安全防护措施?
  • Flutter小白零基础入门到高级项目实战全集
  • 解决uni-app授权弹框华为审核拒绝
  • vscode+wsl2+bear+clangd配置教程
  • 【Spark】查询优化中分区(Partitioning)和分桶(Bucketing)是什么关系?什么时候应当分区,什么时候应当分桶?
  • 【sgAutocomplete_v2】自定义组件:基于elementUI的el-input组件开发的搜索输入框(支持本地保存历史搜索关键词、后台获取匹配项)
  • flutter 专题 九十 四 Flutter开发之基础知识
  • xss注入实验(xss-lab)
  • 4.1-1 IS-NET-Pro视频转图片的插件
  • 在ASP.NET Core中使用NLog:配置与性能优化指南
  • vscode查看文件历史git commit记录
  • windows安装配置FFmpeg教程
  • 【C#】Winform调用NModbus实现Modbus TCP 主站通讯
  • LeetCode--2181. 链表--合并零之间的节点