ai量化系统架构的思考
ai量化系统架构的思考
背景
现在很多群体,尤其是有点金融背景或兴趣的程序员群体,“大量”进入量化交易这个领域。
以quantopian为蓝本,做出to c的quant平台。这个前文说过,受众肯定是非常窄的。有能力的人,不需要平台;编码对于大多数人也是一个门槛。
另外,即便像果仁或ricequant也出了向导式写策略,门槛降下来不少。但还是不对。用户还只能从经验出发,或者去试。
回测只是一个结果,本质是构建策略思路的过程。比如盈利目标,短线的话,看基本面意义不在,一个季度基本面都不会变的(变了你也不知道)。中线做波段,说实话与基本面关系也不大。看基本面,至少半年以上。
从第一性原理出发,买什么,何时买。如果是短线,那买什么以及何时买。就是在买点上,认为1个月内,会有较大概率上涨至自己的期望,比如5%。这里选股与择时就合一了。
或者做组合,就小市值轮动。这里择时与选股也合一了。
所以,回测本身不那么关键,重点是如何辅助发现策略。就是投研。
另外加一个维度,就是智能投研这个方向。投资也好,投机也罢,站上今天的视角上,回看过去,去估计未来。
那这样一个系统如何搭建,就是如何基于信息去寻找alpha。
因子是无穷多的,策略也是无穷多的。你可以认为星期几,天气,温度,甚至日月星辰的方位。回测看看,没准也很好看。
自动发现因子,自动构建投资组合,才是关键吧。
比如,我们大概知道,要找好公司,要找好公司里便宜的公司。在大环境不好的时候要轻仓,要适度分散,要考虑对冲...这里已经有一堆超参数了,有些可能还会相互冲突。人工是不可能优化得了的。
这些因子,我们可以告诉模型,然后让模型去最优选择,而且这个过程还不能是静态的,是需要根据环境,用户偏好,群体行为变化,还去动态调整。
也是强化学习这个框架是一种选择。
强化学习
强化学习是控制论的一个分支。可以认为是一个框架。整合深度学习变成能量更大的深度强化学习。
做股票投资的人大多会为自己设定一个目标。有的人敢打敢拼,追求最大的年化收益;有的人性格沉稳,追求较低的风险。而大部分的投资者都试图在收益与风险中寻找一个平衡点,因此夏普比率成了人们考量投资结果好坏的一个重要度量。
投资单个股票的时候,投资者有3种选择,做多、做空,和不投资。我们用1, -1, 和0分别表示这三种行为,那么action space=
在每一个时间点,我们都需要决定选择什么样的投资行为。
明天继续。
关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。
- 谈谈基于SQL Server 的Exception Handling[中篇]
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
- 如何仅使用TensorFlow C+来训练深度神经网络
- 捕获silverlight滚轮事件
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(28)-系统小结
- 用谷歌浏览器来当手机模拟器
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
- 体验vs11 Beta
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(25)-权限管理系统-系统管理员(附生成器)
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(24)-权限管理系统-将权限授权给角色
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu中终端命令提示符太长的修改方法汇总
- CentOS 6.5 环境实现本地局域网搭建YUM的方法【基于FTP】
- iPhone手机越狱-逆向砸壳-代码注入
- Flutter基础widgets教程-SizedBox篇
- 详解linux 看门狗驱动编写
- CentOS 6.5平台本地YUM配置的方法
- Linux环境(CentOS6.7 64位)下安装subversion1.9.5的方法
- CentOS 6.5平台实现快速部署FTP的方法
- Linux系统中sudo命令的十个技巧总结
- 详解linux电源管理驱动编写
- CentOS6.5系统简单安装与配置Nginx服务器的方法
- 详解linux 摄像头驱动编写
- Ubuntu16.04搭建NFS 文件共享服务器的方法
- 详解linux pwm驱动编写
- Ubuntu 16.04 LTS系统里中文txt文件打开的问题解决