miniQuant 回测系统模块拆解

miniQuant 回测系统模块拆解

写在前面

码上君量化互助社群已建立,所有源码免费对社群成员开放,如有需要请查看社群介绍文章,里面有加入社群的方式。

社群介绍:码上君量化互助社群介绍

公众号-码上助君(可跳转)

感兴趣的关注下公众号,优先发布,接收后续的更新内容会更及时奥


在前面,我们分享了关于量化回测系统的文章:七天打造一套量化交易系统:Day3-回测系统的选择、搭建及改造,在里面提到了自研的 miniQuant 回测系统。

在上次分享的基础上,重新进行了梳理,今天将这个回测系统按模块模块进行拆解:

如何使用

先看下如何使用,这里选择期货螺纹钢一年的1分钟k线数据为例,采用双均线策略进行回测,包含止损止盈功能

螺纹钢1分钟k线数据示例

在前面,我们分享过如何获取历史行情数据和实时行情数据(包括期货和股票),这里给大家提供一个简单的获取历史行情数据的方式。

文章链接:七天打造一套量化交易系统:Day1-数据分类、获取、清洗与存储

通过通达信金融终端,选择标的(螺纹钢主连)-> 选择k线级别(1分钟)-> 右上角选项 -> 数据导出,就可以导出txt或excel文件,稍做处理就是上面看到的csv格式的数据。

回测结果数据展示
回测结果资金曲线及回撤区间
画指定日期交易情况的买卖点

接下来按模块拆解miniQuant回测系统

DataFactory 模块

负责数据清理加工,目前支持从文件读取不同格式的k线数据或者分时数据,转换成统一的数据格式,提供给策略模块进行回测使用。

包括前面分享的tick数据合成k线的方法,也加入了其中。

文章链接:tick数据合成k线的完整过程(含源代码)

Strategy 模块

策略模块基类,包括所有策略共有的基础成员变量以及函数。

其中 trade 交易下单函数是最主要的功能,提供给具体的策略模块使用,以下是该函数的主要代码截图:

MovingAverageStrategy 模块

每个策略继承自 Strategy 类,

. 1.添加本策略独有的参数

. 2.实现 初始化策略参数的函数 init_arg

.3.在 next 函数中实现 策略回测的逻辑代码

根据双均线上穿/下穿进行开仓和平仓
动态止盈 + 固定止损

DailySummary 模块

按交易日期对交易数据进行汇总,包括每日的交易详情数据,在Strategy类中的trade函数,调用的add_trade_info就是用来存储交易详情,并通过report函数,对每个交易日的数据进行汇总。

DrawChat 模块

画图模块能够直观的展示回测的结果,包括上面的回测资金曲线/最大回撤,以及在k线图上标记买卖点,都是该模块的主要功能。

这部分可以选择性的开启,画图会消耗一定资源,让整个回测变慢,在进行具体策略分析的过程中可以使用画图模块。

总结

虽然上面是以期货数据为例进行展示,理论上任何标的都支持,只要提供该标的的分时数据或者K线数据,通过封装之后,只需要将重心放到具体的策略上,实现严谨的交易策略逻辑,就可以很快给出回测结果。

上面回测的一年的一分钟k线数据,基本在秒级别就可以回测完成,对于回测来说我认为效率是足够的,后续运行稳定后会考虑用c++进行封装,进一步提高效率。

源码获取方式

码上君量化互助社群已建立,所有源码免费对社群成员开放,包括文章的示例tick数据文件,如有需要请查看社群介绍文章,里面有加入社群的方式。

社群介绍:码上君量化互助社群介绍

公众号-码上助君(可跳转)

感兴趣的关注下公众号,优先发布,接收后续的更新内容会更及时奥

相关推荐
Navicat中国14 分钟前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
gmaajt20 分钟前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python
折哥的程序人生 · 物流技术专研25 分钟前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
李可以量化26 分钟前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
maqr_11033 分钟前
CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
jvm·数据库·python
m0_6138562935 分钟前
uni-app怎么做类似于美团的商家评价星级 uni-app五星评分组件制作【实战】
jvm·数据库·python
Irene19911 小时前
大数据开发语境下,SQL 模式名,映射关系 - - 概念理解
大数据·数据库·sql
顾随1 小时前
(二)kettle--输入与输出
javascript·数据库·kettle
2401_833033622 小时前
如何修复固定定位头部容器中悬浮下拉菜单的错位问题
jvm·数据库·python
SelectDB2 小时前
Doris & SelectDB for AI 实战:从基础 RAG 到知识图谱增强的完整实现
数据库·人工智能·数据分析