量化交易笔记(1)

目前对于股票投资,我目前为止已经是一个股龄超过十几年的深度患者,虽然不应该对股票投资的规律性报有太大的希望,但仍然免不了对规律探索的欲望。量化是一个将规律程序化,减少主观判断的方式。

在建设和使用量化的环境时,也是一个不断学习和沉淀的过程,也发现有很多需要注意的点,现在网上的信息虽然多,但是很多细节没有,以及很多知识没有串在一起,自己建设量化环境还是有比较高的成本,这里把已经沉淀和之后沉淀的经验逐渐记录分享。

概要

关注量化交易的人,对量化交易的思路就不陌生了,Quantitative Trading,完全基于数据分析,利用程序化按照既定的策略做交易。核心的价值在于尽量将投资剥离掉人的主观偏见,因为有很多研究都表明,人要自己来选股就无法摆脱自己的主观偏见,从而导致平均投资收益受损,比如很多人计划买一只股票,往往是因为自己看到了某个新闻或者数据,或者某个信任的朋友提起,这些本质都是局部因素,而且股价的变化领先于普通人能够看到的信息,所以这种情况下买股票,本身是主观被影响。

那回到量化交易本身,关注量化交易的人,多少是认为量化交易有价值。但是要构建一整套量化交易的工具,其实没有那么容易,从我观察统计到的自己构建量化交易的,往往都是程序员,有编码能力的人,也爱琢磨。不具备自己构建量化交易环境的人,往往会利用一些已经成熟的平台,收费的、免费的、公司内部的,不同情况有不同的平台,不如国内有不少可以免费使用部分功能的Quant平台,增值功能要收费。这些平台基本上满足了大部分的功能,比如JoinQuant(www.joinquant.com),集成了运行环境、数据、回测功能、图形化展示、社交,甚至继承了实时交易(需要在指定的券商)。因为量化交易最后还是要涉及到交易,把钱给到一些没有足够保障的平台,自己之前吃过不小的亏,所以秉着钻研技术的态度,外加上有更加自由的使用,开始自己搭建量化平台。

量化平台简单全貌

我认为最核心的一共分为四个部分:

  1. 数据。数据基本是量化的基础,包括股票交易历史数据、财报数据、资金流动数据、新闻数据等,依靠这些数据来设计交易策略;
  2. 策略设计。选股策略、组合策略、买入时机策略、卖出实际策略等,都涉及到选用什么逻辑;
  3. 回测工具。设计到的策略不会直接用于交易,需要做策略的验证,那么就涉及到利用历史数据做回测,而回测涉及到一系列的工具和环境;
  4. 交易工具。虽然将设计的策略用手工交易的方式来落实在投资上,但一旦人介入首先效率比较低,其次增加了主观影响的概率,还有就是基本实现不了实时的交易策略计算。所以交易工具一般是指自动化交易工具。

后续基本上也是围绕这几个部分,伴随逐渐深入的学习,对一些实用的技巧、系统性的方法做总结。这次简单总结一下概要。

回测

网上有不少现成的回测工具。我使用的zipline v1.3.0,虽然有说zipline运行比较慢,但是我目前使用起来,还没有感觉到慢有很大的影响。

搭建zipline也有不少注意的地方,我是在我的windows电脑上,基于Anaconda3的环境搭建zipline。Anaconda可以认为一套python以及python库的集合,可以免去自己逐个下载,以及库之间版本的问题。

Anaconda的各个版本可以在下面链接下载

https://repo.anaconda.com/archive/

也可以通过清华的镜像

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

我使用的是Anaconda3 v4.2.0版本,没有使用最新的。主要原因是,zipline目前只支持python3.5,而最新的Anaconda版本包含的是python3.7。python3.7在安装zipline的时候会有各种问题,后来就索性使用Anaconda3 v4.2.0,后面环境的部署就顺利很多。

在Anaconda3 v4.2.0安装完成之后,就自带集成安装了conda工具(类似于pip),然后使用

conda install -c Quantopian zipline

完成安装。这里面的Quantopian,也是一套库,因为zipline目前是由Quantopian这个团队维护,zipline里面继承了一些功能,比如一些数据接口,就是利用Quantopian。但后面其实Quantopian的数据基本上也用不上,之后可以再分享如何解决A股、H股和美股的数据问题。

数据

要把整个量化的流程打通,最基本的数据就是历史交易数据。zipline里面默认集成了quant的数据bundle(数据bundle的问题,也需要后面展开讲,也有很多需要注意的问题)。但是quant的数据更新已经停留在了2018年3月,而且都是美股的数据。如果这个数据还想使用,可以运行

zipline ingest -b quant

会进行下载数据,但因为数据接口不一定稳定,我自己下载了3次才最后成功了1次,而且下载时间很长,基本上用了3个小时。成功后使用

zipline bundles

可以看到有quant的bundles。但如果想要最新的数据,或者A股、H股,或者其它商品期货的数据,那么需要知道如何制作bundle,这些后续再展开。

交易

在A股上自动化交易其实对于个人投资者而言,是一个比较难的事情。我有很多尝试量化的朋友,我了解的,目前主要两种方式:

  1. 利用PC上的交易客户端,然后用一些自动化控制界面操作的方式,比如模拟点击之类的,来自动化操作客户端;
  2. 反编译和破解个别券商的交易终端,拿到TCP层级的协议,之后利用这些协议做交易;

但也可能是我了解的比较少,真正做好自动化交易的,也不愿意分享出来。我也知道一种比较直接的方式,其实也不愿意公开的方式全部分享出来,这些信息的价值非常高,有私心也正常。简单说的话,我的方式,是基于海外券商,海外券商在量化交易上比较成熟,而中国各种政策的管控导致这部分的技术和市场没有那么开放。这样利用海外券商的交易接口,不仅可以实现自动化交易,而且还可以作为历史数据的来源之一。只是要交易A股,那么可能需要利用A股通之类的交易通道。

策略

策略是最后大家在平台打通之后,一直要挖掘的部分。大家对策略都很保密,毕竟自己认为可以赚钱的方法,也都不太愿意告诉别人,同时也不想承担什么责任。对于策略而言,网上有很多各种量化策略,可以逐渐积累学习,但我个人认为,没有完美的策略,市场其实不断变化,举一个简单的例子,如果大家都觉得明天股价会上升,那么大家今天就会开始买股票,导致今天的股价就上升。但如果大家都因此认为今天股价会上升,那么昨天的估计就因为大家买入股票已经上升了。所以股价的波动性是一个很动态博弈的问题。这些后面也会逐渐分享一些我积累的知识,以及以往的投资经验。