上次简单介绍了回测之前的一些准备工作。这里,将进一步介绍如何对一个投资策略就行完整的回测。
杂言:人啊,还是要做自己喜欢做的事情。勇于尝试,是非常好的,当感觉不合适的时候,要尽早跳出。年轻人,还是不要太安逸,所以从财富跳到了私募。事情也是自己喜欢做的了。有时你会纠结,你是要一份体面的实习,或者工作,还是有挑战性的,喜欢做的。和别人交流时,说你在一个小私募,和说你在某某总部,完全是不一样的概念。结果,貌似自己把两个某某总部都拒了。年轻人,还是累点好,多闯闯,安逸什么的,不太合适哦。
回测一般分为两种:胜率的估算和收益风险比的估算。胜率,指的是一个策略运行固定的周期,在所有的交易次数中,盈利的次数所占的百分比。收益风险比的估算,指的是设定策略回测周期,给定初始资金,假定按完全按策略执行,结束时的收益风险比情况,包括收益率、最大回撤等。(就是通常意义上的回测,例如优矿、米匡和聚宽等给出的策略回测结果)。在进行回测时,必须合理的进行评估,如果对策略不是很确定,或者策略的一些参数还很模糊,可以先进行胜率的估算,查看其结果,以评估策略是否可能有效,再决定是否进行完整的回测。毕竟,相对而言,胜率的估算较为简单。
以双均线策略为例,简要说明如何搭建胜率估算的框架。所用工具:
-
anaconda 3.5(windows环境下搭建python环境)
-
python + eclipse + pydev(python编译环境)
-
wind资讯金融终端(应用量化接口,获取相应数据)
策略逻辑:
-
全市场选股,股本大于1亿,流通市值小于50亿
-
5日均线上穿10日均线,次日收盘买入,持有三天卖出
-
新股成立的两月内不做考虑
-
回测时间:2015.03.01 — 2015.08.05
回测过程中,大部分的时间往往消耗在与wind的通讯中,为节约时间,同时便于检测回测结果是否正确,一般尽可能的将可能重复利用的数据,以及重要数据保存到本地。
简单流程如下所示。主要分为四部分:
-
获取待选标的,这里待选标的为全市场股票
-
对标的进行基本面筛选,这里限制条件为股本和流通市值
-
下载行情数据到本地,这里下载的数据为【日期 股票代码 收盘价 ma5 ma10】
-
根据行情数据,确定每次的买点和卖点
-
估算胜率,将结果保存到本地,进行进一步的分析。
对于其他策略而言,无外乎这几大步骤,进行具体策略的估算时,对相应部分进行逻辑的重构即可。示例的胜率估算为44.88%。(最后给出示例代码)。
对于44.88%的胜率而言,则要具体问题具体分析了。记得参加宽客聚会时,一位大佬说过,商品期货的胜率可能连50都不到,这样的情况下,必须设置严格的止盈止损。设置点位可能为止损5%,止盈10%。也就是判断准确地时候,尽可能多赚点。所以,个人感觉,胜率要根据个人经验来看了,通过设置止盈止损,或者说严格的风险控制,可能胜率不高也可以接受哦。
附上拙略的代码吧,工程目录结构如下,主要应用函数式编程,尽可能将各功能模块分离,以期重复利用。
getStock.py(获取全市场股票):
selectStock.py(基本面筛选):
tradeStock.py(下载行情数据到本地):
tradeData.py(筛选买点和卖点):
calWin.py(估算胜率):
示例代码至此结束。结果就懒的贴出来了。上述代码,不仅对于估算胜率有用,在进行收益风险比的估算的时候,同样会用到。后续再搭建吧。