yyz-202200826-交易系统2.0架构详细设计文档_v1.0
<h1><center>量化交易平台2.0架构详细设计文档_v1.0</center></h1>
<h2>修订记录</h2>
<table>
<thead>
<tr>
<th style="text-align: center;">版本号</th>
<th style="text-align: center;">修订人</th>
<th style="text-align: center;">修订日期</th>
<th style="text-align: center;">修订内容</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">V1.0</td>
<td style="text-align: center;">Challenger</td>
<td style="text-align: center;">2020-08-26</td>
<td style="text-align: center;">init</td>
</tr>
<tr>
<td style="text-align: center;"></td>
<td style="text-align: center;"></td>
<td style="text-align: center;"></td>
<td style="text-align: center;"> </td>
</tr>
</tbody>
</table>
<p>[TOC]</p>
<h2>1.引言</h2>
<h3>1.1 编写目的</h3>
<p> 由于系统交易策略需求复杂,变动比较大,目前的决策引擎和交易操作合并在一起的架构耦合过深,而且交易操作基本是HardCode实现,导致新需求开发效率低下,扩展及维护成本高。考虑到开发效率、系统解耦、系统维护胶需求横向扩展,将决策引擎与量化交易平台进行拆分,实现系统解耦,系统之间通过消息队列实现信息交互。决策引擎负责交易模型(日间模型、日内模型、选股模型)执行及决策结果消息发布,量化交易平台订阅消息封装成消息事件,根据交易策略条件的配置提供交易决策参数(买卖量价...)。
本文档给出量化交易平台2.0重构的设计说明,包括最终实现的功能需求、技术架构方案、业务时序图、数据库模型设计、相关页面设计。
产品研发过程以本文档为基础,技术代码依照本文档方案执行。如过程中涉及需求、架构、方案设计调整都需要更新到本文档中。</p>
<h3>1.2 范围</h3>
<p><strong>范围说明:</strong></p>
<ol>
<li>交易模块-产品管理;</li>
<li>交易模块-交易事件;</li>
<li>交易模块-交易策略;</li>
<li>交易模块-后台管理;</li>
<li>交易模块-告警服务;</li>
<li>交易模块-日志服务;</li>
</ol>
<h3>1.3 术语</h3>
<table>
<thead>
<tr>
<th style="text-align: center;">术语</th>
<th style="text-align: center;">术语定义</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">二方</td>
<td style="text-align: center;">本系统模块之外的所属本企业的内部系统模块,如:规则引擎、指标平台...</td>
</tr>
<tr>
<td style="text-align: center;">三方</td>
<td style="text-align: center;">除本企业内部所有系统之外的外部服务商,如:IB、FMP、英为财情...</td>
</tr>
<tr>
<td style="text-align: center;"></td>
<td style="text-align: center;"> </td>
</tr>
</tbody>
</table>
<h3>1.4 参考资料</h3>
<p>《重构:改善既有代码的设计》</p>
<h2>2.整体设计</h2>
<h3>2.1 整体架构图</h3>
<p><strong>业务逻辑架构图</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/0d05254ab7def92bad18c46cd89f31e0?showdoc=.jpg" alt="" /></p>
<p><strong>运维部署架构图</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/b40c88d0f40cac35dd5f9e3c5b77be13?showdoc=.jpg" alt="" /></p>
<p><strong>技术架构图</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/ecf80bf8a3d71653797f8f9623fee4d1?showdoc=.jpg" alt="" /></p>
<h3>2.2 关键子功能模块</h3>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/56121e69e757f808a5e922e009ed3767?showdoc=.jpg" alt="" /></p>
<h3>2.3 关键业务时序图</h3>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/1a1611d78f6d8469bf5d78b9ccaa0ea4?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/bb8282d22d53fb55915bbac187f2d387?showdoc=.jpg" alt="" /></p>
<h2>3. 接口设计</h2>
<h3>3.1 三方接口</h3>
<p>暂无</p>
<h2>4. 子模块设计</h2>
<h3>4.1 产品管理模块</h3>
<h4>4.1.1 模块需求说明</h4>
<p> 账户管理需求,账户管理通过注册中心注册的交易账户别名,通过注册中心实现交易指令传输。
个股管理需求,
产品管理需求,产品逻辑类型与多个股票的集合。</p>
<h4>4.1.1 架构设计图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/f6e076db157cf12bdff9b415567a5b74?showdoc=.jpg" alt="" /></p>
<h4>4.1.2 关键业务时序图</h4>
<p>暂无</p>
<h4>4.1.3 数据库结构设计</h4>
<p><strong>数据库结果及ER关系图</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/81187aab2532a2222071d48a432730ba?showdoc=.jpg" alt="" /></p>
<hr />
<h3>4.2 交易事件模块</h3>
<h4>4.2.1 模块需求说明</h4>
<p> 规则平台通过事件触发模型决策,通过kafka消息发布通知,量化交易平台订阅对应消息转换成量化交易平台内部标准实体。</p>
<h4>4.2.1 架构设计图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/35e4a130361ac8a9e80b43ade4c93224?showdoc=.jpg" alt="" /></p>
<h4>4.2.2 关键业务时序图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/14216e3ca0ca5bce73e6d6bff6f9b8e1?showdoc=.jpg" alt="" /></p>
<h4>4.2.3 程序设计</h4>
<p> 交易策略的触发与执行通过事件消息进行触发,目前的事件有<span style='color:red'>定时事件</span>、模型预测结果事件、行情事件、成交回报事件、系统事件。定时事件、模型预测结果事件、行情事件、成交回报事件、系统事件。
交易事件全局保存记录,业务需求根据不同事件类型个性化进行存储数据,各流程事件流转通过EventDTO进行交互。各产品通过<span style='color:red'>定长线程池+业务分布式锁机制,锁key使用事件类型+产品的方式</span>实现事件队列及关键业务防重入问题。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/17ef926cf957cb69b55dbc5c5c3a7fd5?showdoc=.jpg" alt="" /></p>
<h4>4.2.4 数据库结构设计</h4>
<p><strong>暂无</strong></p>
<hr />
<h3>4.3 交易策略模块</h3>
<h4>4.3.1 模块需求说明</h4>
<p> 目前需求交易策略包括,</p>
<h4>4.3.1 架构设计图</h4>
<h4>4.3.2 关键业务时序图</h4>
<h4>4.2.3 程序设计</h4>
<p> 目前交易策略变化快,技术平台响应效率差,需要支持能灵活支持策略配置及快速上线的平台。结合目前存在的问题,业务逻辑上我们把交易节点拆分抽象为建仓、止盈、止损、补仓、追高5种策略类型,各类型通过配置触发条件、计算逻辑、执行动作来完成业务需求。技术上我们通过接口+抽象类实现+通用Util工具包+子类继承重写的设计方案,满足通用流程及个性化重写流程的扩展需求。前期先按模型单倍做多策略、模型x倍做空杠杆策略、日间捞鱼策略、日内捞鱼策略进行子类重写,后期需求稳定好再进行业务再抽象。
量化交易平台基础框架约定优于配置为原则,选用springboot+mybatisPlus为基础,消息通信采用kafka消息队列。
交易策略采用公式化配置,使用google aviator表达式引擎做公式逻辑解析实现。支持boolean判断、逻辑运算。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c8069bbec3a2488300a70de1999a33d9?showdoc=.jpg" alt="" /></p>
<h4>4.3.4 数据库结构设计</h4>
<p>交易策略表ER图
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/684fcb5f186e38d82753ff864f9e0bb1?showdoc=.jpg" alt="" /></p>
<p>交易策略及交易业务数据ER图
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/58b24fce37e1e17e5c5456f96d3b9d28?showdoc=.jpg" alt="" /></p>
<hr />
<h3>4.4 回测系统模块</h3>
<h4>4.4.1 模块需求说明</h4>
<h4>4.4.2 关键业务时序图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/a2132c2a3d10a780a78216666a9fdb7e?showdoc=.jpg" alt="" /></p>
<hr />
<h3>4.5 交易后台管理模块</h3>
<h4>4.5.1 模块分类</h4>
<p>交易产品模块</p>
<ul>
<li>账户管理</li>
<li>个股管理</li>
<li>产品管理</li>
<li>账户与产品关联管理</li>
<li>产品及个股关联管理</li>
</ul>
<p>交易策略模块</p>
<ul>
<li>交易策略配置</li>
<li>交易策略关联</li>
</ul>
<p>交易操作模块</p>
<ul>
<li>下单功能</li>
</ul>
<p>财务管理模块:</p>
<ul>
<li>出入金管理</li>
</ul>
<h4>4.5.2 架构设计图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/4b12596eafe5dca3dc33a39cc774eb40?showdoc=.jpg" alt="" /></p>
<h4>4.5.3 角色分配</h4>
<p>分配角色:模型、运营、开发、管理员</p>
<hr />
<h3>4.6 告警服务模块</h3>
<h4>4.6.1 模块需求说明</h4>
<p>实现全服务统一出口告警消息处理,告警的分类、等级、业务、频率、工具的即时化切换,在消息服务实现告警消息的接收、解析、转发保存等功能</p>
<h4>4.6.2 告警接口定义</h4>
<p>请求参数:告警消息文本、告警Code枚举
响应参数:是否成功</p>
<h4>4.6.3 告警等级定义</h4>
<p>告警等级分类:紧急(ERROR)、提醒(WARN)、通知(INFO)、数据统计及监控(MONITOR)
告警等级定义:</p>
<ul>
<li>紧急:影响线上交易主流程,例如影响模型结果的产生、交易动作的执行,包括这些流程的子流程,例如外部数据获取缺失、第三方交易接口调用失败</li>
<li>提醒:不影响执行的过程,例如全局系统异常输出,非主流程异常提醒</li>
<li>通知:关键业务的关键流程通知,用于流程问题的排查,通知再根据业务进行分类,例如执行,关键业务:模型执行过程、策略执行交易过程、数据爬取过程</li>
<li>数据统计及监控:执行结果的统计输出,监控数据的统计输出,例如关键数据库表的关键数据统计,无异常正常输出,有异常@具体开发</li>
</ul>
<p>告警业务分类:</p>
<ul>
<li>紧急:全交易系统一个群,有消息即时处理</li>
<li>提醒:不同的系统分不同的群,一天处理一次</li>
<li>通知:模型执行过程群,策略执行交易过程群</li>
<li>监控:一个功能一个群,例如监控数据异常群,统计关键数据群</li>
</ul>
<h4>4.6.4 告警枚举Code定义</h4>
<p>总长度7位,第1-3位:主模块,第4-8:子模块</p>
<ul>
<li>主模块 ,01:规则平台,02:指标平台,03:交易平台,04:交易后台,05:数据服务,06:IB服务</li>
<li>子模块,服务接入方提供,告警服务平台实现</li>
</ul>
<h4>4.6.5 告警数据库结构设计</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/cb88597ef4b8414745b2d94ba168da30?showdoc=.jpg" alt="" /></p>
<hr />
<h3>4.7 日志服务模块</h3>
<p><strong>TODO</strong></p>
<hr />
<h3>4.8 规则平台模块</h3>
<h4>4.8.1 关键业务时序图</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/89bc298a2bc9eb3a7236720e13dfa7d0?showdoc=.jpg" alt="" /></p>
<h4>4.8.2 改动点</h4>
<ul>
<li>日内及日间数据结果通知事件定义及监听</li>
<li>模型结果保存</li>
<li>指标平台从数据服务调取数据</li>
<li>日内及日间模型预测结果事件定义及发送</li>
</ul>
<hr />
<h2>5. 性能</h2>
<h3>性能指标需求</h3>
<h4>延迟、qps、tps</h4>
<ol>
<li>每日收盘后获取收盘高开低收量数据延迟;<=1min</li>
<li>实时1分钟k数据获取清洗延迟;<=3s</li>
<li>实时5分钟k数据获取清洗延迟;<=5s</li>
<li>实时tick数据获取清洗延迟;<=1s</li>
<li>交易下单接口耗时;<=3s</li>
<li>交易信息回调延迟;<=1s</li>
<li>交易信息回调处理及消息通知;<=1s
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/bfe9d3aac517fbb7ecde73c8524e3425?showdoc=.jpg" alt="" /></li>
</ol>
<hr />
<h2>6. 安全</h2>
<h3>接口安全</h3>
<ol>
<li>交易接口添加接口验签;</li>
</ol>
<h3>操作安全</h3>
<ol>
<li>交易后台:关键菜单的权限控制;</li>
<li>交易后台:交易下单、取消订单、删除操作都添加二次确认;</li>
<li>交易后台:关键流程或影响比较重大的流程,提供二方审核确认流程;</li>
</ol>
<hr />
<h2>7. 可维护性</h2>
<h3>线上问题排查</h3>
<hr />
<h2>8. 可靠性</h2>
<h3>行情数据源 999</h3>