【全新量化入门系列8】综合之前所学写一个策略

发布于: 雪球转发:0回复:0喜欢:8

本文是量化交易零基础入门教程中的一篇,点击蓝字部分即可查看该系列详情。


摘要

· 灵感细化

· 逐步实现策略

· 调整与改进策略

· 自测与自学

前言


通过前文基础知识的学习,本文将引导读者运用所学写成一个策略。如果发现某些知识忘了很正常,回头再看就行,用到什么去学什么,学习的效率更高。


灵感细化

之前也提到过策略灵感的来源多种多样,可能是通过阅读、通过与人交流、或是通过自己感悟与研究等等。灵感最初可能只是模糊的感觉或疑问,比如“感觉低市盈率的股票好像长期收益更好”、“当股价一旦超过整百的时候会不会更容易继续涨一段”、“这个股票和那个股票的股价数据看起来好像符合某种统计规律”等等。


验证灵感的一个基本方法是把灵感细化,写成策略做回测。

现在你听说了这样一件事,小市值股票过去很长一段时间内收益特别好,但最近不太行了。你觉得这件事比较有价值,想要写成策略来回测验证下。


请思考下,应该写一个什么样的策略来验证这件事呢?

为了验证灵感,我们把灵感细化成内容如下的这样一个策略。

考虑到不一定要选10个股票,股票数量应该是个可以方便调节的变量,因此策略内容改成如下这样更好。

逐步实现

因为最终目的是要写成代码交给计算机回测,因此要逐步把文字的意思用代码实现,首先要把这个策略放到之前讲过的初始化与周期循环的策略框架中,如下:

接下来,你只需要逐步的把策略的全部内容用代码实现出来,技巧是把复杂的内容拆分成多个简单的内容,逐步实现,对于不确定的东西print打印出来看看。往下读之前,建议自己独立实现下试试,基本都是用讲过的内容。遇到困难可以看下我下面给出提示,所有提示后面会给出参考代码。


提示

代码1:设定好要交易的股票数量stocksnum。这句非常简单,需要注意的是要用到之前讲过的全局变量。

代码2:找出市值排名最小的前stocksnum只股票作为要买入的股票。首先使用获取指数成分股方法可以获取上证指数和深证综指的成分股,两者加起来就是当前全市场股票的股票列表,用加号可以连接两个list。然后,使用获取财务数据的方法找出当前全市场股票中市值最小的前stocksnum个的股票代码。

代码3:若已持有的股票的市值已经不够小而不在要买入的股票中,则卖出这些股票。使用context数据获取当前持仓情况,用for循环语句与if判断语句判断股票是否在当前持仓中,用in判断是否一个元素在某list中,用下单API实现卖出操作。

代码4:买入要买入的股票,买入金额为可用资金的stocksnum分之一。使用context数据获取当前可用资金总量,用for循环与下单API实现买入每个要买入的股票。

参考代码:

回测结果

策略初步写完,把g.period设为13,g.stocksnum设为7,初始资金设为100000,频率为天,回测起止日期为20150101-20180627,然后进行回测,回测结果如下:

可见15年到16年该策略表现确实不错,随后17年至今则表现平平。


自测与自学


自己实现下本文策略

在本文策略中加入止损或止盈

试着在本文策略中选股时排除st股票、停牌股票、与涨停股票。(这个问题可能会有些挑战,因为会涉及到简单但没讲过的内容,比较考察搜素与自学能力,但这是做投资交易最为重要的能力)

思考题:

g.period,g.stocksnum各自设为多少效果比较好?

虽然每次都等资金的买入,为何各股票的持仓价值还是不同, 而且可能越差越大?


特别提示:文章研究的代码可以在聚宽社区获取哦。

综合之前所学写一个策略 - JoinQuant-TWist - JoinQuant