策略的完整开发流程是怎样的?

某一天的早晨,你从床上醒来,突然想到“我是不是可以根据换手率的变化率来判断买入点?是不是可以根据不同换手率下的当日收益率来判断走势?”,你马上起床去找一个本子,胡乱写下几条交易规则,这就是实打实的策略了,但关键赚不赚钱这另说。

问题来了,怎么证明一个策略赚不赚钱?难道听了某位“民间股神”的绝招,自己就屁颠儿屁颠儿地跑去实盘交易,然后就等着日进斗金了吗?

当然不是这样子的,至少在量化投资领域不是!

在量化界,证实一个投资策略在过去历史中是否有效的过程就是回测(Backtest),也就是说,你构建了一个投资模型,将其放到历史数据当中“跑一跑”,看看盈亏情况如何。

如果回测的净值曲线一直“萎靡不振”或“狂泻不止”,而且程序里面没检查出啥错误,那这个投资策略就很有可能就是无效的(至少在历史当中)。一般情况下,回测的效果要比实盘效果好一些,回测效果都不好的情况下,那实盘效果更加堪忧。

如果回测的净值曲线坚挺向上,稳稳的四十五度角,那也不要高兴的太早哦,那可能是“未来函数”或“过度拟合”在作祟,只有在排除这两者和程序错误之后,才有上模拟盘和实盘的意义。

那一个典型完整的策略开发流程是怎么样的呢?

策略的完整开发流程是怎样的?-CycleGen
1  策略构思
要写一个策略,首先你得有一个策略idea,也就是一个策略想法,一般一个策略至少要包含这几个方面:交易品种、进场点、出场点、仓位/资金管理等。那量化的初学者可能要说:我还没有交易过,实在没有策略想法,怎么破?

作为过来人,给大家分享几个快速获取策略想法的途径:

1)大神分享的策略。除了策略想法,还可能有实现的高清源码哦,许多量化平台上都会有许多大神用户分享策略和源码,股票多因子和期货CTA都有。

2)券商的金融工程/量化研报。许多券商的研究团队都会对外分享关于量化的研究报告,里面一般会有详细的实现途径和测试结果供你参考。

3)金融交易书籍。有许多金融交易书籍里面会提到可量化的投资策略,比如说著名的《海龟策略》等。

2 编程实现
有了完整详细的策略想法后,需要将其付诸于实现,一般来说都需要编程或借助其他量化平台实现,不过,你也可以依靠人工观察和纸笔记录买卖信号实现,只要你不觉得看近4千只股票会太累。要做策略回测,一般需要依靠量化平台,这个平台可以是自己搭建的,也可以是直接借助第三方的,如果害怕自己的策略放在别人的平台上会泄露出去的话,可以基于开源的平台进行二次开发,既做到了保密,也兼顾了效率。

做量化一般使用到的编程语言是Python、C++和其他量化平台独有的语言。Python是开发策略的效率非常高,几十行代码就可以实现一个策略,但是程序的执行速度相对C++来说会比较慢,但只要不是做高频交易,速度还可以接受。

由于C++的周边资源没有Python那么丰富,开发一个量化策略着实让人抓狂,计算一个简单20日移动均线值都得自己一一实现,总体来说,实现同一个策略的代码量,C++一般是Python的三倍以上。

有的量化基金为了同时兼得“鱼和熊掌”,往往是用Python快速验证策略的有效性,然后采用C++重新实现策略,提高执行速度。如果你是量化初学者,Python会更“平易近人”一些。

为大家推荐几个宽客常用的第三方量化平台:

股票聚宽(JoinQuant)、优矿(Uqer)、米筐(RiceQuant),这三个平台皆是使用Python编程语言,都可以免费注册和使用。对了,还有可以无需编程实现股票策略的果仁网(guorn)哦。

期货CTA交易开拓者(TradeBlazer)、文华、金字塔(weistock)、MultiCharts(MC),这四个平台基本都是使用自家的编程语言,不过新版交易开拓者(TBQuant)和金字塔支持使用Python。

以上这些平台都可以通过平台的中文名称或者英文名称在度娘里搜索到。

3 策略回测
无论是自建量化平台,还是使用第三方平台,在策略实现以后便可以开始回测了。回测的原理就是,把策略模型放到历史数据当中,模型会不断发出买卖信号,量化平台当中会维护一个虚拟账户,账户里的钱会买入证券,证券卖出后钱会回来账户,记录下每一日的账户资金和持仓的证券市值,形成一条以时间为横坐标的资金曲线,为了好看,也可以转化为起始净值为1.0的净值曲线(将起始虚拟账户转化为1块钱),进而统计出年化收益率、最大回撤、夏普率等收益风险指标。

在策略回测和策略实现中最需要回避的就是未来函数的问题。

未来函数就是在策略中使用了未来的信息。由于证券价格都属于时间序列,站在历史中某个时点是看不到其后的数据的,但是在回测中我们是可以提前获取全部历史数据,由于人为失误在历史某个节点调用了未来的数据,获取了属于未来的信息。

举个例子,有人开发了这么一个低买高卖的策略:每日尾盘买入股票A,在第二日最高价的时候卖出。净值曲线非常完美,收益率高回撤小,但是明显犯了未来函数的错误,因为在第二日的时候,只要该日行情未走完就无法确定该日的最高价,他按照最高价卖出,就相当于使用了未来信息。

典型的未来函数错误还有:在当前年度调用当前的年度的财报数据,使用前复权数据做策略回测,不完整周期调用完整周期数据……

4 策略优化
在策略回测后,策略收益和风险指标不理想,千万不要灰心,很可能只是策略参数没有选好。因为不同的股票、不同的期货品种,它们都有各自的特性,不能“一视同仁”,可能要加以“特殊对待”,为不同类型的证券选用不同的参数。

比如说,开发一个股票动量策略,当个股在一定期限内(例如20个交易日)上涨幅度达到某个阈值,便买入,对于小盘股和银行股来说,这个上涨幅度的阈值明显是不一样的,小盘股的波动率比较高,一个月涨20%都很正常,但是对于银行股来说,一般行情下一个月上涨20%的概率就小的多,因此做不同板块的股票所设置的参数可能就会不太相同,需要参数优化。

但是也不能矫枉过正哦,这样就会引发“过度拟合”或“过度优化”问题。

过度拟合,顾名思义,就是拟合得太过分了,专门针对样本内的数据进行优化,为了获得好看的回测曲线,全然不顾这个策略的通用性能否推广到样本外的数据上。

做一个类比,就跟男生追女孩儿一样,一哥们儿追过两三个文科女生,写朦胧情诗、下川菜馆子、送动漫周边等,基本都成功了,然后就写了一本《泡*妞*秘*籍》自诩天下无敌,那可能别人拿去追理工科女生就可能只收到“好人卡”了。要考虑行情的多样性,就像要考虑女生类型的多样性一样

策略的完整开发流程是怎样的?-CycleGen
解决过度拟合的问题可以采用增加样本数据,或者参数敏感性测试,让策略参数不要陷于“参数孤岛”,这个放到以后的章节里面详细讲述。是不是觉得很疑惑呢?让你优化,又让你“不优化”,其实这不难理解,换个说法你就明白了,对凡人来说,饭菜是好东西,不能不吃,也不能多吃。
5 模拟交易
当策略产生符合心意的净值曲线之后,是不是马上就要上实盘赚大钱呢?官人,别心急嘛!还记得以前的求学时期吗,我们学完所有相应的课程之后,不是马上去中考高考的,而是先要模拟考,而且还不止一两次,可能还会有周考月考。

模拟考最大的目的就是帮助我们查漏补缺,因为策略开发当中考虑得再细致,也可能忽略了现实当中的一些细节,需要在模拟盘中跟实时行情对接后才能发现。就跟军事模拟演习一样,平时多流汗,战场少流血,实际投资交易当中就会减少很多真金白银的损失。

模拟交易就是将策略跟实际实时行情进行对接,但不是采用真金白银进行交易,而是使用模拟账号进行模拟,若策略在模拟盘中稳定盈利,则可以上实盘赚真金白银了。

现在做策略模拟都非常方便了,在“编程实现”小节中推荐介绍得那些量化平台基本都有这个功能,也就是设置几下的问题。

对于量化初学者来说,模拟盘中一般来说需要考虑以下几点:

1)在策略开发实现当中没有考虑到品种的流动性问题,导致模拟盘无法成交;

2)对于短线策略,模拟盘实际成交滑点过大,策略出现亏损;

3)实时行情不像清洗整理好的历史数据那么“干净”,可能出现噪音数据、数据延迟和无数据,若策略中没有完善的数据确认和对齐机制,可能会出现“频繁发单”和“乱发单”等问题。

4)自建或第三方量化平台系统或行情不稳定,无法正常运行交易。

6 实盘交易
恭喜大侠,你来到了最后一关“实盘交易”,能来到这一关的,模拟盘肯定是表现不俗。其实模拟交易跟实盘交易在很多方便上已经非常相似了,模拟考考的好的学霸,中考高考成绩也差不到哪里去。

如果让我挑两者之间最大的差别,那肯定不是技术层面的,而是人的心态,就是历经历史数据和实时数据重重考验的策略在实盘交易中出现较大回撤之后,你还能不能坚持让策略跑下去。

模拟盘中也会出现回撤,但亏的不是真金白银,因此自己表现的云淡风轻,但实盘亏损的可是真金白银,那就真真让人肉疼了。

因为没有100%完美的量化策略,能适应所有的行情,特别是对于低胜率高赔率的趋势策略,两三单亏损之后就不敢再开仓了,立马把策略程序停掉,想不到的却是后来净值默默创了新高。

那可能有人要问了,难道坚持任由策略亏损下去?

虽然我劝诸位坚持,但我可没说过这话,在实际操作当中,最简单的原则就是,如果实盘交易中最大回撤是历史回撤的1.5~2倍,那这个策略可能就要停下来的,反思一下是需要调整策略参数,还是市场逻辑已经发生了根本性变化。

本文系作者 @ 原创发布在 CycleGen。未经许可,禁止转载。

喜欢()
评论 (0)
    热门搜索
    173 文章
    1 评论
    47 喜欢
    Top