JoinQuant量化课堂 发布于2016-05-21
回复 251
浏览 126022
466
**导语:** 双均线策略,通过建立m天移动平均线,n天移动平均线,则两条均线必有交点。若m>n,n天平均线“上穿越”m天均线则为买入点,反之为卖出点。该策略基于不同天数均线的交叉点,抓住股票的强势和弱势时刻,进行交易。
```
规范源码已更新!请大家克隆研究。
本文由JoinQuant量化课堂推出 。难度标签为进阶上,理解深度标签:level-0
作者: 导数君
编辑: 宏观经济算命师
```
$ $
#### **均线嘛,都是均线**
对于每一个交易日,都可以计算出前N天的移动平均值,然后把这些移动平均值连起来,成为一条线,就叫做N日移动平均线。
比如前5个交易日的收盘价分别为10,9,9,10,11元,那么,5日的移动平均股价为9.8元。同理,如果下一个交易日的收盘价为12,那么在下一次计算移动平均值的时候,需要计算9,9,10,11,12元的平均值,也就是10.2元。
将这平均值连起来,就是均线。
如下图所示,收盘价是蓝线,橙色的线表示5日的移动平均线。
![1.png][1]
可以看到股票价格的波动比5天均线的波动要大,这是因为5天均线取的是前5个交易日的均值,相当于做了一个平滑。
$ $
####**双均线**
顾名思义就是两条天数不同的移动平均线,比如说,一条是5天的移动平均线,另一条是10天的移动平均线。如图,蓝色的是5天均线,黄色的是10天均线。
![2.png][2]
$ $
####**金叉和死叉**
由时间短的均线(如上图蓝色的线)在下方向上穿越时间长一点的均线(如上图黄色的线),为“金叉”,反之为“死叉”。
好了,现在可以构建一个简单的策略:我们认为,双均线金叉的时候,表明股票很强势,反之很弱势,我们就在强势的时候买一个好了,弱势的时候卖掉好了。
说了这么多,下面我们开始实战!
首先,我们可以看一下API中的策略示例里面的双均线策略(详见https://www.joinquant.com/api#双均线策略 )直接复制粘贴就能运行,是不是很简单呢?
老师,可以了嘛?
当然不行,有时候我们也许会根据自己的需要对一些现有的策略进行改造,比如说,我想对均线进行加权呢?我想改造一个指数均线呢?
那我们得自己实现一下均线函数。方法不难,获得前N天的收盘价,然后计算一个算术平均数就可以了,各位读者可以先自己进行尝试,也可以参考回测代码块5(里面有代码和注释)
接下来,如果你想挑战更高难度,可以试一下计算指数移动平均的函数。
指数移动平均和算术平均或者加权平均的主要区别在于指数移动平均需要进行一个迭代,因此这可能是个有点挑战的地方:
![3.png][3]
其中pi表示前一天的收盘价,且
$$\alpha = \frac{N-1}{N+1}$$
写出来没?如果没写出来的话可以参考回测代码块3和4(里面有代码和注释)
怎么样?是不是有点挑战性?如果写出这样的子函数,那么在主程序里面只要改一下函数输入参数,就可以轻松的在不同的参数之间来回切换,比较收益。
$ $
####**多股票**
除了改为指数移动平均线以外,小编还加入多股票实现方法。
在交易日前,同时对多个股票进行判断,哪只金叉了就买入,死叉了就卖出,按日进行判断和交易。最大可以同时持有N只股票,用于实现这个策略的主函数可以参考回测代码块1和2。
好啦,看看小编选了5个股票的回测结果吧。从2005开始回测至今,你会发现在大部分时间里面,策略的收益比基准收益高,是不是很棒?各位读者可以自己尝试修改参数,看看参数应该如何选取。在这里,小编提供一个同时持有股票书N的选择的小tips,如果风险承受能力强的话可以少选一点,如果想分散风险,可以多选一些股票,但是,分到每个股票的资金最好不要少于两万,因为手续费是有最低限制的。
![5.png][4]
####**小结**
我们这里是量化课堂的第三部分,主要给大家提供几个大范围的量化思路。本篇为第一讲,举了一个技术指标的例子。比较简单。有关技术指标的文章,百度上一搜一大把,我们平台里也有很多相关的帖子,python公开库ta-lib里也收录了很多指标,大家想进一步研究可以实现一下。也可以结合其他选股策略,或者根据需要制订资金等分的份数或者控制仓位等方法提高策略的收益。
好了,今天对双均线多股票选股策略的介绍就到这里了。
$ $
![双均线策略_函数说明.png][5]
```
本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。
文章更迭记录:
v2.0,2016-07-16,更新为规范源码,添加“函数说明书”
v1.1,2016-07-04,添加“导语”
v1.0,2016-05-21,文章上线
```
[1]: https://image.joinquant.com/21363eef74c75794bb2e6c5b9987ebca
[2]: https://image.joinquant.com/360a8d28c7ffab857582107a4f21abc3
[3]: https://image.joinquant.com/2d6eb1d7b941056134d913ad484116a7
[4]: https://image.joinquant.com/8b859805850cd64d37b1b2911580762b
[5]: https://image.joinquant.com/41a4f64bb93b4ad7778e06cf351c31ad
评论
谢谢, 刚开始学习, 到处搜集策略源码中。。。
2016-05-22
EMA部分的公式看不懂,代码不好理解,看看这个文章吧
http://zhishi.southmoney.com/zhibiao/EXPMA/345.html
2016-05-22
文章中```# 获得前一天的EMA(这个是保存下来的了)
pre=g.emas[key]
```
这个前一天的EMA是如何来的
2016-05-23
@条条大路通罗马 这个函数每天都在运行,保存到全局变量里面,如果前一天数据还没有,则为nan,当数据够了,就用普通平均作为第一天的EMA
2016-05-23
@导数君 哦哦哦。。。后面有写~
2016-05-23
@导数君 问题是第一天的EMA=后面N天的MA这个和EMA的定义公式有点不同
2016-05-23
@条条大路通罗马 不等啊,EMA每天更新的
2016-05-23
@导数君 源码的72行写着的是不是在赋值第一个EMA啊?
2016-05-23
@条条大路通罗马 对,第一个EMA用MA代替,后面的才更新。
2016-05-23
谢谢,很好的教程。请问学习量化策略的编写应该怎样学比较好?我之前学了一段时间Python,太枯燥了,有点学不下去。但是又担心直接从策略学起的话根基不够牢固,只能依样画葫芦。
2016-05-23
@司马罡 一边看API一边写策略,然后不懂的地方查API/查百度/查Python包的官方说明/查Python教程。。
2016-05-23
试着对比了下5日10日均线和EMA均线的收益率,在不同股票下的表现差异好大。。。
越来越觉得好玩了
2016-05-28
@三和大神 你好,record画图的问题解决了吗
2016-05-31
@朱铭 你好,我想获取最近100天,或者说是最近(X)天上市的股票池,需要怎么写,求指导,
2016-06-02
@哥布林 查api 有个函数能取出所有股票列表,取出一个dataframe;你自己写代码 按照上市日期排序,然后截取最近X天的
2016-06-02
@宏观经济占卜师 get_security_info,start_date # 上市日期, datetime.date 类型
2016-06-02
@宏观经济占卜师 不懂怎么用,请你再说说
2016-06-02
@哥布林 你需要学习编程 别人教这个太复杂了。相当于知识体系。
2016-06-02