赞,写得非常有趣!
学习内容:
学会使用for语句和list数据类型学会写多股票策略推荐阅读前文 十行代码带你量化交易入门
前文中,我们写的单股票的均线策略的策略内容是这样的:
若昨日收盘价高出过去20日平均价今天开盘买入股票
若昨日收盘价低于过去20日平均价今天开盘卖出股票
现在,我们想利用计算机强大的数据处理能力,同时监视市场上多只股票,如果满足条件就进行相应交易。简言之,对多个股票分别实行原本的单股票策略,策略内容应该是这样的:
若多只股票某只昨日收盘价高出过去20日平均价今天开盘买入该股票
若多只股票某只昨日收盘价低于过去20日平均价今天开盘卖出该股票
那怎么用代码说给计算机听呢?老办法,先想清楚人要做的话要怎么做,再一点点翻译成代码。
多股票究竟是都是哪些?即要确定股票的范围。接下来就按之前讲得基本框架的套路出牌就好了,即初始化加周期循环。
(计算姬:想要学习好,套路不能少~)
我们要确定股票的选择范围,此处举例就简单点只选两个了,比如 兔宝宝(002043) 和 好想你(002582)。代码如下:
对比下,单股票策略中初始化代码是这样的:
可以看到,多个股票代码之间用逗号隔开了,并且两侧被中括号包在了一起。这种被中括号包在一起的数据的类型叫做list。形如:
[x1,x2,x3,...,xn]
当多个股票代码被包在一起成为一个list后就是一个整体,我们就可以给他们一起命名(例如此处命名是g.security),就好像我们把多个股票代码包在一个盒子里,在盒子外面写上名字,如此以后你想让计算机把那些股票代码拿到哪里去计算,或是怎么样的时候,只要跟她讲g.security,她就知道是那个盒子了,而不必一一地把每个股票名字再交代一遍。
答疑与延伸:
关于list的详细介绍?:请看 Python入门(2)- 数据类型之列表初始化完成,开始周期循环的部分。
之前我们已经发现了,所谓的多股票策略,就是对多个股票逐个地实行单股票策略,所以对于所选股票只有两个的时候,只要把原本单股票策略对每个股票再写一遍就好了,比如这样:
(不是很重要,也避免代码太长,注释就省了)
基本上就是原来的单股票代码写两遍,两只股票写两遍,上千只股票的话还不写死。。。
所以我们要用到for,来告诉计算机,对多只股票都逐个进行相同的一系列的操作。
for的用法如下:
这段代码的含义可以理解成面试:
(x像一队的等待的面试者,i就是面试的房间,操作就是面试的过程)
取出x中的第一个数据放到i中,进行操作。
(排在最前面的人进去面试然后出来)
然后从x中再取出第二个数据覆盖掉i中原本的数据,进行操作。
(第二个人进去面试然后出来)
如此继续,直到x中最后一个数据取到并进行操作。
(直到最后一个人面试完)
答疑与延伸:
从x中取出的次序?:x的数据类型是list,list类型里面的数据是有次序的,所以从x中取出的次序就是x里自带的次序。如for i in [2,7,3]的取出次序就是,如所见到的从左到右2,7,3的次序。([2,7,3]是个list)关于for的更多内容?:请看文章 Python入门(5)- 条件与循环:if、while、for中关于for的部分。
for应用在我们的多股票策略中后,我们的策略就是这样的:
至此,已经是一个完整的可运行的策略了。
但是,我们应用原本单股票策略的买入卖出方法到多股票后,逻辑上会出现这样一种情况,只要多只股票中一只股票满足买入条件了,就用所有资金买入了,从而没有资金买别的股票了,即便余下的股票也有满足条件的,即策略一直最多持有一只股票。
当然,这种买入卖出逻辑并没什么错,但一般来说,多股票策略相比单股票的策略的优势,除了可以更大范围内的寻找机会外,能同时持有多只股票能帮助我们分散风险。
故,我们有必要继续研究下每次花多少钱去买股票,使策略可同时持有多只股票。
每次交易信号发生,不全额买卖,该买卖多少额度呢?这是个复杂的问题,每个人对于每个策略都可能有不同的看法,并无定法。此处只做简单的处理,即将资金按股票数量分配预留,哪只股票发出信号,就将该股票的那份资金全额交易。
详细表述与代码如下:
将资金平分成两份("兔宝宝"一份,"好想你"一份),每份资金量为per_cash.
答疑与延伸:
len(g.security)什么意思?:len()是用来求list长度,即list中包含多少个东西。本例中len(g.security)就是求g.security中的股票数,结果为2.
如果昨日收盘价高出二十日平均价, 则用per_cash的资金量买入的该股票;
否则卖出全部该股票。
翻译成代码:
把买入卖出的代码写好,策略就写完了,如下
现在,点击运行回测,如果你代码没有问题,就会顺利的进行回测,回测结果如下图:
至此,你就完成了一个简单策略的回测了。
答疑与延伸:代码编辑区上方的编译运行按钮是什么?:编译是简化版的回测,相比回测少做了很多统计工作,比如每日持仓,交易详情等,所以运行会快很多。所以策略前期需要反复调试的时候,点编译运行,而策略完善后需要生成详细的报告,就点运行回测。两个都试试就知道了。
到JoinQuant向作者提问:网页链接
赞,写得非常有趣!
写得很耐心 对新手来说是个不错的入门教程
感觉这个例子太没实用价值,不如找几个有用的策略来阐述
这个好,能用这些语句做小市值轮动么?
额,雪球对代码支持不太好啊。推荐到原文看。