量化投资专家系统开发与策略实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 模块开发说明

产品原型是为了让研发人员知道我们要做什么,但是怎么做不是产品原型的事情,而是技术的事情,一般这个工作都是由架构师和核心开发人员共同决定的。为了条理清楚、主次分明,一般会按照几个大模块进行详细的划分,然后分别提出这几个模块的实现思路。另外,对于难以实现的小模块也要进行特殊说明,防止出现开发短板。

模块开发说明的范文如下。

量化投资专家系统核心模块开发说明

拟制人:王昭东

审核人:副总经理

批准人:总经理

2017年12月30日

一、模块开发说明

(一)模块

量化投资专家系统的9大模块如下。

1.后台管理员模块——后台

2.账户管理模块——账户

3.消息任务模块——消息

4.统计分析模块——分析

5.专家系统之知识库模块——知识库

6.专家系统之脑电模块——脑电

7.专家系统之模拟测试模块——模拟

8.专家系统之推理机模块——推理机

9.专家系统之解释器模块——解释器

(二)人员

核心开发人员有15人(计划时可能比这个人数还要多,本书出于实际考虑,人员上精简了很多),默认语言为PHP,使用B/S结构。

1.后台1人

2.账户、消息1人

3.分析、模拟2人

4.知识库、推理机3人

5.解释器1人

6.脑电(Arduino)2人

7.策略专家1人(兼职)

8.数学顾问1人(兼职)

9.设计师1人(兼职)

10.DBA 1人(兼职)

11.项目经理1人

二、模块开发情况表

(一)开发计划

为了能够尽快让项目上线,我们把整个专家系统分成了9个不同的模块,其中有些模块工作量比较大,需要多人参与,比如脑电模块;有些模块工作量比较小,比如消息模块,一个人就可以做几个这样的模块。

模块中的技术难点主要在推理机、知识库和脑电3个模块上,所以这3个模块的开发人员要有一定的开发经验和缜密的逻辑推理能力。

模拟和测试模块的工作人员及后台开发人员则需要具有较强的沟通能力。

同时,为了方便开发、测试和维护,需要制定一些基本的开发规范,让前后台程序员有法可依。开发规范应该遵循以下3点(特殊情况需要专门说明)。

(1)全部采用UTF-8编码,从而避免乱码现象。

(2)一定要添加注释,注释最起码包含说明和作者,方便维护。

(3)在命名环节尽量减少冗余,全部用英文,避免使用中文或拼音。

(二)PHP开发规范

为了追求开发速度,本系统采用自主开发框架,使用 MV(模型—视图)结构,遵循常规命名规范。

1.字符编码

所有程序均使用UTF-8编码,禁止使用GBK和GB2312编码。

2.目录和文件

目录使用小写字母加下画线。

类库、函数文件统一以.php为后缀。

类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在的路径一致。

类文件以驼峰法命名(首字母大写),其他文件以小写字母加下画线的方式命名。

类名和类文件名保持一致,统一以驼峰法命名(首字母大写)。

3.函数和类、属性命名

类的命名采用驼峰法(首字母大写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User。

函数的命名使用小写字母加下画线(小写字母开头)的方式,例如get_client_ip。

方法的命名使用驼峰法(首字母小写),例如 getUserName。

属性的命名使用驼峰法(首字母小写),例如 tableName、instance。

以双下画线“__”开头的函数或方法作为魔法方法,例如__call 和__autoload。

4.常量和配置

常量以大写字母加下画线的方式命名。

5.数据表和字段

数据表和字段采用小写字母加下画线的方式命名,注意字段名不要以下画线开头,例如ai_user表和user_name字段,不建议使用驼峰法和中文作为数据表字段的名称。

数据库默认编码为UTF-8。

(三)JavaScript开发规范

为了加快开发速度,本系统使用 jquery3.1和 echar.js 作为主要的JavaScript框架,其中jquery3.1用于客户端的交互,echar.js用于图形图像的绘制。

为了避免与原系统的函数冲突,自定义的函数和属性使用 d 加下画线作为前缀,如d_myFunction()。

字符编码为UTF-8格式。

(四)HTML_CSS开发规范

字符编码为UTF-8格式。

1.HTML代码分区

在页面的每一个功能分区前后加入注释标记,说明此区块的功能指向,例如:

<! --统一头开始/开始 -->

<! --统一头结束/结束 -->

2.关于拼音

可以使用拼音,但是要明确,要么统一为拼音,要么默认为英文。如果使用拼音,则要有对应的字典以方便查找。

3.文件名和目录

每个目录中都应该包含一个默认的 HTML 文件,文件名统一用index.html。

文件名称统一用小写的英文字母、数字和下画线的组合。

文件命名的指导思想是使得自己和工作组的每一个成员能够方便地理解每一个文件的意义。

4.图片的命名原则

(1)名称分为头尾两部分,用下画线隔开。

(2)头部表示此图片的大类,例如广告、标志、菜单和按钮等。

5.内部样式

所有样式均需要外部调用,禁止编写内部样式,特殊情况需要写日志备忘。

6.源码压缩

上线后才能对源文件进行压缩,开发期间的源码不允许压缩,统一使用DW的源码格式化。

三、系统主要模块

关于系统主要模块,我们主要给出一些流程图,不过此处所说的流程图并不是论文中的那种呆板的流程图,这里的流程图更多的是从企业实际应用角度考虑的“非正规”流程图。

(一)后台

管理员后台用例图如下图所示。

1.登录模块

登录模块流程图如下图所示。

2.权限菜单模块

根据角色权限调用用户的自定义菜单和快捷菜单,流程图如下图所示。

3.会员管理模块组

会员管理模块组主要包括员工、专家和交易员的管理模块,有添加、查询和编辑等子模块。其中,添加和编辑员工可能需要选择模板,如果不进行选择,则使用默认模板。

在员工管理中,可以使用搜索功能,默认按照添加时间倒序显示,也可以选中其中的某个员工,然后编辑其信息,注意用户ID和用户名不能变。

用户的权限设置其实是另一个模块,通过权限设置,按时间倒序显示员工,也可以选中该员工,赋值相应的角色(在数据库中要关联角色表)。

会员管理流程图如下图所示。

4.模块插件管理模块组

模块插入管理流程图如下图所示。

5.模板管理

模板管理主要是管理模板表中的data字段,data字段是一个二维数组,这个二维数组实际上就是一个不包含数据的表结构,同时对应这个表结构创建或修改一个数据库的表,类似一个简单的 MySQL 数据库的Web客户端。

6.数据维护

数据维护主要是数据库的连接、导入和导出,技术难度不大。

7.系统维护

系统维护主要是调用PHP的一些目录、文件大小等信息,也可以使用第三方软件。

(二)账户

账户管理的相关内容相对比较简单,一个高级程序员就能完成。

(三)消息

1.流程模块

动态流程模块以消息的形式通知任务接收人群,任务接收人群可以通过直属上级、直属下级、角色用户和指定员工的方式来设置。任务提示方式可以通过消息和邮件的方式进行通知,默认是消息(也就是站内信)。消息通知人发送的都是只读的内容,无特殊情况,默认是提交者提交的所有信息。接收者可以驳回和通过消息,如果通过,则表示任务完成;如果驳回,则增加驳回记录返回给提交者,任务重新开始。为了方便接收者查看,系统特地生成了一个中间任务表,包括用户提交的数据(JSON格式)和对应的URL。

为了方便子流程设置,每个流程都可以选择一个上级流程,但是上级流程必须结束才可以进入下一个子流程,这样流程就形成一个树形的结构了。不过为了简单起见,还是推荐单一线性的流程。

很多时候,用户为了方便,往往是通过职位进行设置的,使得流程模块和组织结构比较紧密地结合在一起,如下图所示为动态流程图。

2.站内信模块

站内信模块一共有3个版本。V1.0版本仅是一个消息的发送和回复,达到最小可用即可。

V2.0采用Socket编码,增加了历史记录表和表情包,主要满足办公的需求,算是一个公司内部的聊天工具。这个聊天工具与我们的工作任务连接紧密,同时也可以自定义一些快速的发起和回复,比如召开部门会议等。

V3.0是一款比较独立的聊天工具,虽然和V2.0使用几乎同样的数据库和服务器,但是它更加独立,是智能办公的一个最小切入点。V3.0不仅采用了NLP技术,对聊天内容进行分析,而且采用了视频对话和远程屏幕控制互动的技术,我们可以将其理解为一个基于办公的智能化聊天工具。

(四)统计分析模块

统计分析模块主要是数据库的查询并利用百度的echar.js进行显示,绝大部分视图在echar.js官方网站都有示例代码,稍加修改就可以使用,只是自定义视图的工作量比较大。

(五)专家系统之知识库模块

知识库比较简单,主要是一些专家提供的逻辑运算过程,这个逻辑运算过程需要利用解释器(解释器的作用是方便生成底层可运行的代码),然后结合推理机(推理机主要是一个流程图)验证逻辑过程(逻辑过程要结合底层语法),最后为了方便对逻辑过程进行有效的管理,增加用户体验,最好增加比较强大的逻辑验证功能。若没有逻辑验证功能,则要有不错的使用文档,第一期项目时间比较紧,可以适当降低要求。

一般来讲,如果时间允许,至少要开发出一部分可用的事实知识,该事实知识一般都是通过数据库接口实现的,默认为MySQL数据库(后期考虑使用NoSQL数据库,以提高性能),方便对事实数据库的调用。

同时,为了方便对新事实的追加,可以通过迭代的方式循环追加事实数据库。知识库模块流程图如下图所示。

(六)专家系统之脑电模块——脑电

略。

(七)专家系统之模拟测试模块——模拟

这里比较关键的是要接入一些证券公司的交易接口,由于国内A股市场不允许自动化交易,所以在模拟时行情和交易是分开的。开发时要注意一些交易规则,比如不能以涨停价买入、以跌停价卖出等,最好找一个有股票、期货交易经验的程序员来开发。

(八)专家系统之推理机模块

推理机模块是一个非常重要的核心模块,为了更好的用户体验,我们采用了可视化编程,这样做的好处是更加灵活。

推理机这个模块交给那些数学好、逻辑清晰,并对似然推理感兴趣的开发小组,该小组由数学顾问亲自领导。

1.可视化编辑器

推理的3种方式是正向推理、逆向推理和双向推理,属于模块的基本架构,这里没有做过多的说明,只是针对用户体验做了一些调整,该调整(其实就是一个简单的可视化编辑器)如下图所示。

2.决策树与分类树模块

关于决策树与分类树,这里主要是一些算法模型的“增删改查”。

(九)专家系统之解释器模块

解释器最好能够可视化操作,以图形化显示。这里更加偏重于前端开发,可交由JavaScript开发小组完成。

(十)任务轮询

为了保证系统后台能够不间断地执行任务,我们设置了任务轮询功能。任务轮询是一个循环系统,在没有新参数(如停止、开始、暂停)传入时,系统将不停地遍历所有开启的任务列表。为了简单起见,系统任务主要有图片的生成、任务的处理和日志的处理。

任务轮询流程图如下图所示。

(十一)图片生成模块

图片生成是数据模块的一个核心功能,主要是为了将已有的K线生成标准化的图片,然后用于机器学习。图片生成的时间可能较长,为了方便管理员实时了解图片生成的进度,我们将图片生成模块分成了三个部分,第一部分是添加生成图片任务的模块,第二部分是修改生成图片任务的模块,第三部分是图片生成中的模块,其中图片生成中的模块有一定的复杂度。图片生成模块如下图所示。

四、设计说明

略。

五、硬件部分

脑电测试是一个独立的开发小组,主要使用 OpenBCI 进行 Arduino编程开发,然后将检测到的结果输入到数据库中进行机器学习,参考文档有:《原理图》《PCB图》《BOM清单》《可编程器件及烧录进制文件》《必要测试点波形图或硬件指标详细说明》《原理详细说明》《与系统内其他部分接口软硬件详细说明》。

这些参考文档可以以附件的形式单独存放于一个文件夹内。

六、软件的设计结果

(一)自有PHP框架

在具体开发中,我们采用自己的一个小型PHP框架,框架虽然小,却是一个精简的MVC架构,非常方便系统的开发、测试和维护。这个框架统一采用URL传参的方式进行调用,默认用index.php作为框架的入口文件。

框架源码部分略。

(二)PHP机器学习框架

PHP-ML 是一款不错的机器学习框架,为了方便进行机器学习,在项目测试阶段主要使用该框架。

参考网址是https://www.oschina.net/p/php-ml/

(三)JavaScript框架

1.echarts.js

echarts.js 是百度公司提供的一款商业级数据图表统计软件,功能强大,也符合我国用户的使用习惯,适合进行基本的图表统计分析。

2.jquery.min.js

JQuery是一个快速、简捷的JavaScript框架,里面融合了很多功能,特别是在元素的选择和控制上非常灵活。很多常用的功能用一两个函数就可以轻松搞定,这里选用jquery.min.js作为JavaScript的基本框架,以提高开发效率。