『壹』 做量化交易一般用什么软件
需要懂一些数学模型,比如统计分析、人工智能算法之类的,他的本质是利用数学模型分析数据潜在的规律寻找交易机会,并利用计算机程序来搜寻交易时机以及完成自动化交易。并没有现成的软件可以做这个,因为它需要一个搭建一个专业的平台,这不是一个人可以完成的。
国内有一些软件,比如大智慧提供数量分析,还有一些软件提供股票、期货的程序化交易。但是实际上这并不是真正意义上的量化交易。事实上,做一款纯粹的适合个人投资者的量化投资软件,难度是非常大的,因为量化策略并不想传统的基本面、技术面那样存在已有既定的必然规律。他需要跨越多学科,多领域去挖掘数据的规律,然后利用得出的规律进行交易。但是不同时间、空间的数据的潜在规律并不一致,所以对量化过程进行标准化是一件很难完成的事情。
如果是计算机或者数学专业的人士,可以考虑使用C、C++、SQL等语言,其他的可以使用MATLAB/SAS 等软件。不管是哪一种软件,要实现量化交易,肯定是需要一定的建模基础和编程基础的,其中最重要的东西是数学能力。
『贰』 什么是α,β收益,量化投资的策略创建与分析
α收益:一揽子可以自定义低估、同质化并且有波动的股票,不断买入更便宜的,卖出更贵的,从而获得的收益。
例如:几个跟着沪深300的ETF,你发现手中持有的沪深300ETF溢价2%了,而市场上同时存在一个折价1%的ETF,那么就卖出溢价高的沪深300ETF,去买折价的,这样虽然始终持有沪深300ETF,但获得了超越沪深300指数本身的收益,就是α收益。
解释一下同质化:明显所有的沪深300ETF是同质化的,也可以认为最小市值20个股票是同质化的,所有银行股是同质化的,分级A是同质化的。下文中有解释自定义低估。
β收益:基本面本身上涨是β收益。
例如,自定义最小市值的10个股票为一个指数,这些最小市值从5亿涨到20亿,这就是β收益。自定义最低股价10个为一个指数,从牛市的5元跌到2元,那么β收益就是负的
量化策略创建三个步骤:
策略的理论基础
历史回测
找到策略黑天鹅。
(一)策略的理论基础:(大致分为三类):
基本面理论
按基本面又可以分为:1.价值型;2.成长型;3.品质型;按中国特色A股基本面又可以添加;4.小市值型;5.股价型
技术面理论
按技术面又可以分为:1.趋势型,2.趋势反转型,3.缩量反弹,4.指数轮动,5.择时
风险套利
风险套利(或者称轮动):不断买入更便宜的,卖出更贵的。
注意:
有些理论基础并不牢固,并且不能很好解释(这也导致了各种投资流派互相不服)
有些量化跳过了理论基础,直接根据历史统计进行量化(本文不讨论),例如,统计两会前后涨跌,一季度历史表现最好板块
对策略理论的解释:
基本面策略可以定义什么是低估,比如低PE是低估,低市值是低估,低股价是低估,高ROE是低估,高成长是低估;也可以自定义低估,PB*PE是低估,总市值*流通市值小是低估
基本面理论提供了一揽子同质化并且有波动的股票。有些基本面策略的股票间波动较小,例如最低PE股,一段时期内总是那么几个银行股;有些波动较大,比如小市值型
技术面理论有些很难定义什么是低估,比如趋势型;有些则看似可以定义低估,例如,BIAS最小,20日跌幅最大,其实也不是
能自定义低估的策略是风险套利,不能自定义低估的策略是统计
基本面本身能上涨,就获得了β收益
我得出的结论是:风险套利策略的核心是对自定义低估的轮动,即不断获得α收益!!
如何获得α收益:大部分基本面策略的收益是因为风险套利获得的;也就是不断买入更低估的,卖出更贵的;也就是因为调仓周期内因不同股票的波动而产生收益,因此适当缩短周期有利于提高收益;所以在一年内交易次数越多,alpha收益越大(投资大师说的减少交易次数,并不适用于套利)
理论本身获得的β收益并不多,甚至为负(价值型由于近几年市场估值不断降低,不调仓的话,收益是负的)
我们应当寻找的是:基本面理论本身能上涨,且能提供同质化,波动较大的策略(即获得α,又获得β)
统计策略其内在逻辑说服力小,是过去的概率来预测未来
(二)历史回测:回测中最重要一点是:不要欺骗自己
历史回测中要用到一个哲学思想,叫做奥卡姆剃刀:较简单的理论比复杂的理论更好,因为它们更加可检验
改变测试起始时间。调仓周期超过2天的策略,应该试遍每个起始时间,取平均收益,这才最接近策略真实历史回测,因为理论上起始时间变化一两天对策略收益影响是不大的,如果变化很大就说明过度优化。
不要创建静态股票池。历史上每个阶段都有大牛股,完全可以收集大牛股作为股票池,算好调仓周期,每个阶段买最牛的,收益可以美到不敢想象
不要用PE.PB等指标精确逃顶抄底,最多用来确定一个大致范围。每次大顶点位都是不同的,这样的择时毫无意义。
先用25个以上股票测试,确定策略有效性,再减少数量做策略,如果25个测试无效,那么一两个即使收益很好,也该放弃。
改变条件权重。如果稍微改变权重,收益变化很大,那么就降低策略未来预期收益,别指望策略以后会表现这么好。
尽量从07年开始测试。除非你能确定每个时间市场的风格,显然这是不可能的。
同一套择时系统,如果用在策略1上回撤是30%,用在策略2上回撤是15%,你肯定会选择策略2,如果策略1和2本质上是差不多的策略,别太高兴,在未来,策略1和2表现谁好谁坏也是难说的
(三)找到黑天鹅:每个策略都有黑天鹅
价值型,成长型,品质型策略,黑天鹅是过一个季度,可能财务数据完全变了,因此持仓个数不能太少,行业要分开
小市值,低价,低交易额策略,黑天鹅是出现仙股
统计类,技术类策略,黑天鹅是理论本身就不完美
『叁』 制定了一个策略,比如5日线上穿10日线做多,反之卖出。那么怎么在同花顺或通达信软件上进行回测
股票操作还是以资金核心为主,无论市场消息满天飞,庄家机构一般都是提前就获知这些,对于我们散户而言不如直接了当的跟庄走,庄家资金怎么做我们怎么做,比如我个人使用的是恒阳财经网的恒阳证券行情软件机构版,我平时的选股卖股的过程是这样的:第一步,设定好庄家大资金抄底活动频繁的条件,自动筛选出符合这些资金条件股票,第二步,同时再设置好技术性支撑压力的条件,筛选出符合条件的股票,第三步,在最终两次筛选获得的即符合庄家资金抄底完毕,且技术形成支撑的股票,第四步,为数不多的这些筛选好的股票中,打开5分钟周期,看它们在5分钟周期内有没有庄大资金暗中抄底的股票,因为股票涨停或大涨之前比定在前3天内一般1天左右会有庄大资金暗中抄底,如果筛选的股票池中有符合5分钟周期出现庄大资金暗中抄底的股票,全部保留,第五步,在保留的股票中选择前期涨幅、振幅都比较活跃的,这样当天或次日买入以后的股票涨起来才稳才快,涨幅也大,这样虽然比较保守,但安全性相对更高一些,收益也相对更大一些。说白了,买股票就是另类投资,凡是投资就需要降低风险,增大收益性,上面的选股过程就是这个思路。个人意见仅供参考,希望对你有所帮助吧,如果有帮助就麻烦给分吧,谢谢!
『肆』 小妮选股股票池收 益好吗
小妮选股里面的小妮金股收益不错,出短期内具有爆发力的金股,回测稳定胜率>60%,周平均收益高达3%,在78个交易日内累计收益超过48%
『伍』 想问一下阿法的金融都有些什么业务呀
主要业务有三方面:智能预测—交易日实时预测大盘涨跌;智能选股—交易日实时推送短线股票池;定制量化选股策略,并支持策略的历史回测;智能搜索—搜索板块、股票及财经事件相关的股票。
『陆』 量化交易员是策略研发要求高还是交易要求高
在整个量化交易策略的研发流程当中,买和卖是最为基本的量化交易策略组成部分,而这个部分的设定主要与收益情况相关。这里所说的相关,具体分为两种不同的情形,一种是总体的关联性,即基于买点、卖点的选择,买卖策略应该得到一个正的整体收益。另一种则来自于对交易资产未来收益的判断、或者说预测,即判断交易资产的未来收益为正时,就买入资产;判断交易资产的未来收益为负时,则卖出或卖空资产。实际操作中,这两种关联关系的情况可能更为复杂一些。有的时候,买和卖的具体操作也可能受到风险方面设置的影响,例如为了限制单次交易的最大损失而采取止损之类的操作时,用于清仓的买卖设置就会相应的变动,这也是作者将风险和买卖用虚线相连的原因。不过在大部分情况下,买卖这一最为基本的组成部分还是与收益的关系最大,研究者也应该在研发这一个组成部分时,着重考虑收益情况的具体影响。
对量化交易策略风险的控制可能会影响到量化交易策略中的买卖设置,但是在更普遍的情况下,风险这一因素主要影响的是交易仓位的设置。当然,前提条件还是需要买卖策略的总体收益为正,在这样的条件下再结合仓位的设置,才能够在合适的风险水平下取得达到要求的收益。通过对交易资产具体仓位的调整,交易者可以比较直接的控制单次交易以及整个交易策略的风险水平。例如在满仓交易的情况下,定量的判断了当前交易的风险之后,觉得风险过大无法承受,那么最为直接的处理方法就是在满仓的基础上相应的降低仓位的大小。在仓位降低之后,对于整体资金而言风险也就随之降低了。由于仓位本身具有量化、直观的特性,因此当交易者希望将风险处理到一个特定的水平时,调整仓位是一个比较方便的手段。
需要说明的是,前面已经提到了买和卖是量化交易策略最为基本的组成部分,实际上仓位的设定是根据买卖决策和风险两个因素共同形成的,不建立在买卖之上的仓位选择是空洞没有意义的。此外还有一个更为极端的情况,仓位的正确设定有助于进一步优化策略的整体收益,之后要介绍的凯利公式的意义正在于此。在图1中由买卖到仓位的箭头,实际上可以看作是收益、买卖这一个整体部分指向仓位的箭头。不过在实际使用中,凯利公式所导出的仓位设定往往过于偏激,超过正常风险控制下的最高仓位值,因此仓位仍然与风险的关系更为紧密。
在图1这个较为松散的量化交易策略研发流程中,交易成本是和买卖以及仓位具有同等地位的组成部分。在实际操作中,就是首先基于对收益和风险的判断得出合适的买卖和仓位选择,然后在买卖和仓位共同组成的量化交易策略当中考虑交易成本,也就是在建立仓位和退出仓位等操作中扣除所需要承担的交易成本。随后再次判断该量化交易策略所代表的收益和风险情况,只有这两个因素仍然在接受范围之内,才能确认这是一个可行的量化交易策略。虽然最后用来执行的组成部分只有买卖和仓位,但是交易成本作为对量化交易策略的一个实际化修正,也是策略研发流程中一个不可或缺的组成部分。
上面提到的对量化交易策略收益和风险情况的判断,实际上是一个综合性的评价问题。一个最为重要的参考依据应该是策略在整个交易过程中的净值走势,通过对策略净值走势的分析,就可以建立起该量化交易策略运行情况的全面判断。但是净值走势本身由于细节过多,因此无法简单的用来进行策略之间的横向对比。这时就需要精炼净值走势中所包含的信息,选取合适的部分形成量化的评价指标,从而进行量化交易策略的进一步判定。就作者看来,评判一个策略的标准中最重要的仍然是策略在整个交易过程下的收益情况,一个负收益的量化交易策略根本无需考虑其风险即可排除。而当收益为正时,再结合风险的度量进行具体的取舍,就可以直观的给出量化交易策略是否合格的评判标准了。作者心目中最重要的风险指标是策略净值的回撤水平,在后面的案例分析中也会重点查看回撤的结果。
于此同时,一些量化交易策略在进行收益和风险情况的判断时,仅仅针对策略自身的净值走势进行研究是不够的,给出一个合理的基准来进行对比往往是更为有效的判别方法。例如后面的案例中会涉及到的量化选股策略,当交易选择仅限为对具体的股票进行持仓,而不考虑空仓或者卖空时,选取一个特定的基准进行对比就会是一个更为有效的判别方法。这主要是由于量化选股策略的仓位始终为多头,因此不论如何配置,策略所持仓位都含有资本资产定价模型中所提到的市场成分。而选股策略本身的意义在于选择更好的股票、不在于获取市场收益,因此将市场走势作为对比、或者在策略收益中剔除掉市场成分就是一个更合理的做法。
上述所有的操作,都需要建立在对历史数据的分析之上,在量化交易领域当中一般称之为回溯测试,或者简称回测。所谓回溯,也就是将交易的过程在历史数据上复现一遍,这里面包含了一个假设,即历史数据在量化交易策略中展现出的样本特征在未来的交易中依然存在,否则回溯测试就失去了意义。关于这一假设的分析其实在诸多技术分析著作中均有涉及,一般被称为“历史会重演”,这里不再继续展开。不同于传统技术分析的是,量化交易策略的研发过程更加深入具体,在涉及到策略的参数设定、模型设置等具体问题时,需要采用数量化的方法、也就是最优化等技术手段进行解决。例如如何设置买点和卖点可以使得相应的总体收益最大等等,都是很典型的最优化数学问题,那么找到合适的最优化技术和算法并加以应用,就能够确定量化交易策略的最终形式,用以进行实际交易。
图1中所展示的是一个较为松散的一般性框架,用来总领性的说明量化交易策略的基本研发流程。在具体的策略研发过程中,这个框架经常会因为具体研发设置和策略设置的不同而产生变化。例如当量化交易策略的主要作用不是在时间轴上选择具体的买卖时点,而是在同一个时间点上对多个资产进行选择和配置时,图1中的一些说明就显得有些含混不清。量化选股策略就是这一类策略中最为常见的形式,因此这里在整体框架不变动的情况下,针对图1进行了文字上的调整,用以说明量化选股策略的运行框架与研发流程。当然,使用选股策略的框架体系来处理多个资产甚至多个策略的挑选、配置也是可以的,在不复杂的情况下只需要稍作联想即可。
买卖和仓位虽然是更为通用的说法,但是更适合于描述择时策略,放在选股策略的研发框架中会显得比较突兀,因此图2将买卖换成了选股,仓位则换成了配比,这样更容易让读者领会该研发流程的含义。实际上,对于每一期的选股而言,如果选择了原先没有仓位的股票,那么对应的操作就是买入该股票,如果已经建仓的股票没有被选入这一期的股票池,那么对应的操作就是卖出该股票。而配比则是在买卖的基础上,通过仓位大小的变化来实现具体配置。因此,选股和配比实际上可以算作是买卖和仓位选择的特殊情况,只是这种说法更为贴合量化选股策略本身。
略有不同的,是风险在量化选股策略研发流程中的具体含义。由于选股策略的仓位操作涉及到多个股票之间的配比问题,因此这里的风险不仅包括单支股票的风险,也涉及到多支股票之间的风险程度,后一种风险一般采用股票收益之间的相关性来进行描述。例如在一般性的最优投资组合理论当中,经常使用协方差矩阵来刻画整个资产组合的风险水平。虽然从实际情况来看,相关性这一度量方式与风险的直观感受之间有一定的差距,但是在多资产环境下,一般都将资产间的相关性视为风险的来源之一,这是一个偏学术的、约定俗成的做法。
上面的例子是针对选股策略进行的文字上的变动,实际上量化交易策略研发流程的变化更多来自于各个研发组成部分不同的结合方式。而不同的结合方式,对应的是策略研发过程中不同的目标和需求。例如图1所介绍的松散的研发流程,是在确定好买卖行为和仓位设定之后,再针对实际交易中所产生的交易成本进行二次测试。这样的做法虽然简便易行,但是忽视了交易成本本身对于收益的影响,以及更进一步对于买点和卖点的影响。因此,在确定买卖设置的步骤中就考虑交易成本的影响,应该是一个更贴近于实际的研究框架。图3给出了相应的流程刻画,如图所示,在判断收益因素时,同时考虑交易成本对于收益的影响,从而优化出更为实际的买卖设置。再根据相应的风险控制,结合买卖点的选择,得出最后的仓位设置。在确定了买卖和仓位这两个部分之后,就获得了一个完整的量化交易策略。
图4给出了一个更紧凑、更贴合实际操作的量化交易策略研发流程。在该流程中,买卖和仓位的设置是同时作为参数进行优化的,优化的目标函数也进行了唯一化,即量化交易策略的风险调整后收益。而在确定需要优化的目标函数时,交易成本也如同上一个研发流程一样同时被考虑进去,从而保证买卖和仓位优化结果的准确性。毫无疑问,相较于上面所涉及到的研发流程、特别是图1中较为松散的研发流程,该量化交易策略研发流程的各个组成部分更为紧密,因此在优化过程中所产生的与实际操作的偏离也就越小,买卖和仓位设置的准确度也就更高。但是在实际工作中,如果想参照这一流程进行研发,那么就需要比较强的计算能力,数据量的大小也要达到一定要求,同时优化方法和目标函数的设定要能够同时覆盖买卖和仓位的所有参数,因此往往也只有极为简单的策略思路可以采用这样的流程框架进行研发。
在实际的量化交易策略相关工作中,研发只是整个工作流程的一部分,还有两个组成部分需要着重强调。基于此,图5在图1所示的研发流程的基础上给出了一个更为完整的工作流程。如图所示,需要增加的部分包括处于研发过程之前的数据准备工作以及处于研发过程之后的策略执行工作。这两项工作与前面所论述的研发流程具有很强的逻辑关联性与内在依赖性,三者结合起来形成的一个整体,基本上可以涵盖量化交易策略具体工作的绝大部分内容。
首先论述数据准备的工作,循着图5中的箭头可以看到,在量化交易策略的整体工作中,既要为研发过程准备相应的研究数据,也要为策略执行准备相应的实时数据。在研究数据方面,由于寻找合适的量化交易策略需要不断重复研发流程,因此对于数据的要求更偏重于准确性和覆盖能力。同时,对数据的清洗和转换也是一项重点工作,在大部分的数据科学研究、包括量化交易策略的研发当中,数据特征的合理抽取对于整体效果提升的重要性有时甚至要高于精巧的模型,当然很多时候数据的转换和模型的构造是相互融合的,针对具体情况应当采取具体的分析和处理。而在策略执行数据方面,则更应该关注于数据获取的及时性。至于数据的清洗和变换,只需要完全复制研发得到的量化交易策略下的数据准备工作即可。另外,为了保证数据的及时性,最终进行的数据清洗工作对时间消耗存在一定的要求。
然后讨论策略执行的工作。策略执行,是在量化交易策略研发完成之后,最终产出实际效能的组成部分。执行时应该遵循尽量贴近研发完成的量化交易策略的原则,与量化交易策略所确定的买卖、仓位等设置尽可能的保持一致,这样才能最真实的反映出前面量化交易策略的研发结果。同时,策略执行的结果也可以用来反向支持具体的研发流程,通过对策略执行所得到的收益、风险情况的判断,实时的重新进行研发,对量化交易策略进行修改,从而使得策略能够及时的得到现实的反馈,增强自身的稳健程度。值得一提的是,后面将要介绍的推进分析是一种模拟策略执行的回溯测试技术,读者可以在运行推进分析时有限度的了解到量化交易策略实际执行时的种种状态。
『柒』 股票如何做资金流模型
在市场中,经常存在交易性机会,这是指股价在短期内可能受到某些消息的影响,或者某些市场内在因素的改变从而产生剧烈波动带来的价差投资机会。其中,一个典型的交易性策略就是资金流模型,该模型使用资金流流向来判断股票在未来一段时间的涨跌情况,如果是资金流入的股票,则股价在未来一段时间将可能会上涨;如果是资金流出的股票,则股价在未来一段时间可能会下跌,那么,根据资金流向就可以构建相应的投资策略。
基本概念资金流是一种反映股票供求关系的指标。传统的量价无法区分市场微观结构中的流动性和私有信息对股价的影响,而根据委托测算的资金流,能够有效地观察微观市场交易者的真实意图及对股价造成的影响。资金流定义如下:证券价格在约定的时间段中处于上升状态时产生的成交额是推动指数上涨的力量,这部分成交额被定义为资金流入;证券价格在约定的时间段中下跌时的成交额是推动指数下跌的力量,这部分成交额被定义为资金流出;若证券价格在约定的时间段前后没有发生变化,则这段时间中的成交额不计入资金流量。策略模型1.逆向选择理论在非强势有效的A股市场,普遍存在信息不对称的问题。机构投资者与散户投资者在对同一信息的评估能力上存在差异。在大部分情况下,散户投资者缺乏专业的投资能力和精力,那么根据“搭便车”理论,希望借助机构投资者对股价的判断进行投资。一旦机构投资者率先对潜在市场信息做出反应,羊群效应的散户投资者则追涨杀跌,往往导致在很多情况下市场对潜在信息反应过度。这样根据逆向选择理论,能够准确评估信息价值的投资者便会对反应过度的股价做出交易,买入低估的、卖出高估的股票,从而纠正这种信息反应过度行为。根据市场对潜在信息反应过度的结论及市场投资者的行为特征,可以采取逆向选择模型理论来构建选股模型,即卖出前期资金流入、价格上涨的股票,买入前期资金流出、价格下跌的股票。按照这个思路,对一些指标参数进行回测分析,可以得到稳定的选股模型。2.策略模型根据资金流各种指标的特点,在选股模型中采用比较简单的方法,即以指标排序打分的方式来筛选股票。首先通过对各个资金流指标进行排序打分,然后将股票对各个指标的得分进行求和,最后以总得分值大小来筛选股票,具体步骤如下:(1)确定待选股票池。在选择组合构建时,剔除上市不满一个月的股票,剔除调仓期涨跌停及停牌的股票,防止因涨/跌停无法交易。剔除信息含量小于10%的股票,因为这部分股票信号不明显,无法取得有效信息。(2)构建股票组合。①指标打分:首先将待选股票池中的股票按照资金流指标进行排序,然后采用百分制整数打分法进行指标打分,即以股票在各个指标中所处位置的百分数作为股票对于该指标的得分,前1%得分为1,依次递减,最后1%得分为100。②求和排序:将股票相对于各个指标的得分进行求和,将和值从小到大排序,进行分组比较;另外,选择排名靠前的N只股票构建组合。③股票权重:采用等量权重。(3)组合定期调整,调整时间从1到3个月不等。持有到期后,利用更新后的指标数据重新确定待选股票池,重复步骤(2)打分求和过程,并将股票按照指标得分从小到大排序,将原来分组中跌出组合的股票剔除,调进新的股票,同时将新组合内样本股的权重调整到相等。(4)统计检验。分别计算各组合的收益率情况,考察组合的效果。
『捌』 如何用python实现Markowitz投资组合优化
多股票策略回测时常常遇到问题。
仓位如何分配?
你以为基金经理都是一拍脑袋就等分仓位了吗?
或者玩点玄乎的斐波拉契数列?
OMG,谁说的黄金比例,让我看到你的脑袋(不削才怪)!!
其实,这个问题,好多好多年前马科维茨(Markowitz)我喜爱的小马哥就给出答案——投资组合理论。
根据这个理论,我们可以对多资产的组合配置进行三方面的优化。
1.找到有效前沿。在既定的收益率下使组合的方差最小。
2.找到sharpe最优的组合(收益-风险均衡点)
3.找到风险最小的组合
跟着我,一步两步,轻松实现。
该理论基于用均值和方差来表述组合的优劣的前提。将选取几只股票,用蒙特卡洛模拟初步探究组合的有效前沿。
通过最大Sharpe和最小方差两种优化来找到最优的资产组合配置权重参数。
最后,刻画出可能的分布,两种最优以及组合的有效前沿。
注:
文中的数据API来自量化平台聚宽,在此表示感谢。
原文见【组合管理】——投资组合理论(有效前沿)(包含正态检验部分)
0.导入需要的包
import pandas as pd
import numpy as np
import statsmodels.api as sm #统计运算
import scipy.stats as scs #科学计算
import matplotlib.pyplot as plt #绘图
1.选取几只感兴趣的股票
000413 东旭光电,000063 中兴通讯,002007 华兰生物,000001 平安银行,000002 万科A
并比较一下数据(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = df['close']
#规范化后时序数据
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:
2.计算不同证券的均值、协方差
每年252个交易日,用每日收益得到年化收益。计算投资资产的协方差是构建资产组合过程的核心部分。运用pandas内置方法生产协方差矩阵。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:
000413.XSHE 0.184516
000063.XSHE 0.176790
002007.XSHE 0.309077
000001.XSHE -0.102059
000002.XSHE 0.547441
In [3]:
returns.cov()*252
Out[3]:
3.给不同资产随机分配初始权重
由于A股不允许建立空头头寸,所有的权重系数均在0-1之间
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:
array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])
4.计算预期组合年化收益、组合方差和组合标准差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:
0.21622558669017816
In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:
0.23595133640121463
In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:
0.4857482232609962
5.用蒙特卡洛模拟产生大量随机组合
进行到此,我们最想知道的是给定的一个股票池(证券组合)如何找到风险和收益平衡的位置。
下面通过一次蒙特卡洛模拟,产生大量随机的权重向量,并记录随机组合的预期收益和方差。
In [8]:
port_returns = []
port_variance = []
for p in range(4000):
weights = np.random.random(noa)
weights /=np.sum(weights)
port_returns.append(np.sum(returns.mean()*252*weights))
port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))
port_returns = np.array(port_returns)
port_variance = np.array(port_variance)
#无风险利率设定为4%
risk_free = 0.04
plt.figure(figsize = (8,4))
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')
plt.grid(True)
plt.xlabel('excepted volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[8]:
6.投资组合优化1——sharpe最大
建立statistics函数来记录重要的投资组合统计数据(收益,方差和夏普比)
通过对约束最优问题的求解,得到最优解。其中约束是权重总和为1。
In [9]:
def statistics(weights):
weights = np.array(weights)
port_returns = np.sum(returns.mean()*weights)*252
port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))
return np.array([port_returns, port_variance, port_returns/port_variance])
#最优化投资组合的推导是一个约束最优化问题
import scipy.optimize as sco
#最小化夏普指数的负值
def min_sharpe(weights):
return -statistics(weights)[2]
#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})
#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数
bnds = tuple((0,1) for x in range(noa))
#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)
opts
Out[9]:
status: 0
success: True
njev: 4
nfev: 28
fun: -1.1623048291871221
x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])
message: 'Optimization terminated successfully.'
jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])
nit: 4
得到的最优组合权重向量为:
In [10]:
opts['x'].round(3)
Out[10]:
array([-0. , 0. , 0.164, -0. , 0.836])
sharpe最大的组合3个统计数据分别为:
In [11]:
#预期收益率、预期波动率、最优夏普指数
statistics(opts['x']).round(3)
Out[11]:
array([ 0.508, 0.437, 1.162])
7.投资组合优化2——方差最小
接下来,我们通过方差最小来选出最优投资组合。
In [12]:
#但是我们定义一个函数对 方差进行最小化
def min_variance(weights):
return statistics(weights)[1]
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
optv
Out[12]:
status: 0
success: True
njev: 7
nfev: 50
fun: 0.38542969450547221
x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])
message: 'Optimization terminated successfully.'
jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])
nit: 7
方差最小的最优组合权重向量及组合的统计数据分别为:
In [13]:
optv['x'].round(3)
Out[13]:
array([ 0.115, 0. , 0.21 , 0.353, 0.322])
In [14]:
#得到的预期收益率、波动率和夏普指数
statistics(optv['x']).round(3)
Out[14]:
array([ 0.226, 0.385, 0.587])
8.组合的有效前沿
有效前沿有既定的目标收益率下方差最小的投资组合构成。
在最优化时采用两个约束,1.给定目标收益率,2.投资组合权重和为1。
In [15]:
def min_variance(weights):
return statistics(weights)[1]
#在不同目标收益率水平(target_returns)循环时,最小化的一个约束条件会变化。
target_returns = np.linspace(0.0,0.5,50)
target_variance = []
for tar in target_returns:
cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})
res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
target_variance.append(res['fun'])
target_variance = np.array(target_variance)
下面是最优化结果的展示。
叉号:构成的曲线是有效前沿(目标收益率下最优的投资组合)
红星:sharpe最大的投资组合
黄星:方差最小的投资组合
In [16]:
plt.figure(figsize = (8,4))
#圆圈:蒙特卡洛随机产生的组合分布
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')
#叉号:有效前沿
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')
#红星:标记最高sharpe组合
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)
#黄星:标记最小方差组合
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)
plt.grid(True)
plt.xlabel('expected volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[16]:
『玖』 光子量化的智能投资策略是怎样实现的
以下内容取自其官网 :
AI量化策略构建流程
类比挑瓜过程,我们可以对AI量化策略流程进行分解:
第一步:确定数据(如股票池),划分训练集、测试集
首先我们应明确我们构建何种AI量化策略,如A股、港股还是期货等,确定数据后,接着我们把历史数据按时间顺序切分为两部分,类比于分瓜任务中的两堆瓜。
训练集: 第一部分的数据用来训练模型,类比第一堆瓜;
验证集: 第二部分的数据用来验证模型效果,类比第二堆瓜;
第二步:定目标:数据标注
其次我们要明确我们模型的训练目标,是预测股票收益率高低还是波动率高低,就好比是预测西瓜好坏还是年份;
在样例模板中,我们用5日收益率高低来定义股票的走势好坏等级,并将每只对应等级标记在每只股票上,类比于上述切瓜后记录每个瓜的好坏。
AI量化策略的目标(Label):人为定义的模型预测目标,例如未来N日收益率、未来N日波动率、未来N日的收益率排序等统计量,平台AI量化策略默认使用股票收益率作为目标。
AI量化策略的标注: 我们计算训练集数据所在时间阶段的每日目标值,比如按每日的未来N日收益率高低来定义股票的走势好坏等级,计算出每只股票未来N日收益率的好坏等级并标记在每只股票上。
第三步:找因子
选择构建可能影响目标的特征(量化策略中可称为因子),如模板策略中的return_5(5日收益)、return_10(10日收益)等,类比于瓜的产地、大小等特征。
AI量化策略的特征(features): 反映事物在某方面的表现或性质的事项,在AI量化策略中,特征可以是换手率、市盈率、KDJ技术指标等等
第四步:数据连接+缺失数据处理
将上述每只股票的标注数据与特征数据注意链接,以便下一步模型的学习与使用,类比于上述将每个西瓜特征与好坏一一对应;
第五步:模型训练+股票预测
我们通过“好坏等级”对股票进行标注,贴上标签,连同其所对应的特征值一起来构建训练模型,类比于上述我们获取每个瓜的特征与其对应的好坏结果,通过归纳总结找到瓜的好坏与瓜的属性之间的关联,总结出瓜的分类经验;
用验证集数据来检验训练前面构建好的模型,即检验模型根据验证集的特征数据预测出的目标值(股票走势好坏等级)是否准确。这步类比于鉴瓜任务中根据第一堆瓜总结的鉴瓜经验用第二堆西瓜的大小、颜色等特征数据来判断预测瓜的好坏。
第六步:回测
将验证集的预测结果放入历史真实数据中检测,类比于鉴瓜过程中根据第二堆瓜预测出瓜的好坏最后进行切瓜验证。
『拾』 中国量化投资网这种模式在国外做的怎么样
作者:杨博理
在整个量化交易策略的研发流程当中,买和卖是最为基本的量化交易策略组成部分,而这个部分的设定主要与收益情况相关。这里所说的相关,具体分为两种不同的情形,一种是总体的关联性,即基于买点、卖点的选择,买卖策略应该得到一个正的整体收益。另一种则来自于对交易资产未来收益的判断、或者说预测,即判断交易资产的未来收益为正时,就买入资产;判断交易资产的未来收益为负时,则卖出或卖空资产。实际操作中,这两种关联关系的情况可能更为复杂一些。有的时候,买和卖的具体操作也可能受到风险方面设置的影响,例如为了限制单次交易的最大损失而采取止损之类的操作时,用于清仓的买卖设置就会相应的变动,这也是作者将风险和买卖用虚线相连的原因。不过在大部分情况下,买卖这一最为基本的组成部分还是与收益的关系最大,研究者也应该在研发这一个组成部分时,着重考虑收益情况的具体影响。
对量化交易策略风险的控制可能会影响到量化交易策略中的买卖设置,但是在更普遍的情况下,风险这一因素主要影响的是交易仓位的设置。当然,前提条件还是需要买卖策略的总体收益为正,在这样的条件下再结合仓位的设置,才能够在合适的风险水平下取得达到要求的收益。通过对交易资产具体仓位的调整,交易者可以比较直接的控制单次交易以及整个交易策略的风险水平。例如在满仓交易的情况下,定量的判断了当前交易的风险之后,觉得风险过大无法承受,那么最为直接的处理方法就是在满仓的基础上相应的降低仓位的大小。在仓位降低之后,对于整体资金而言风险也就随之降低了。由于仓位本身具有量化、直观的特性,因此当交易者希望将风险处理到一个特定的水平时,调整仓位是一个比较方便的手段。
需要说明的是,前面已经提到了买和卖是量化交易策略最为基本的组成部分,实际上仓位的设定是根据买卖决策和风险两个因素共同形成的,不建立在买卖之上的仓位选择是空洞没有意义的。此外还有一个更为极端的情况,仓位的正确设定有助于进一步优化策略的整体收益,之后要介绍的凯利公式的意义正在于此。在图1中由买卖到仓位的箭头,实际上可以看作是收益、买卖这一个整体部分指向仓位的箭头。不过在实际使用中,凯利公式所导出的仓位设定往往过于偏激,超过正常风险控制下的最高仓位值,因此仓位仍然与风险的关系更为紧密。
在图1这个较为松散的量化交易策略研发流程中,交易成本是和买卖以及仓位具有同等地位的组成部分。在实际操作中,就是首先基于对收益和风险的判断得出合适的买卖和仓位选择,然后在买卖和仓位共同组成的量化交易策略当中考虑交易成本,也就是在建立仓位和退出仓位等操作中扣除所需要承担的交易成本。随后再次判断该量化交易策略所代表的收益和风险情况,只有这两个因素仍然在接受范围之内,才能确认这是一个可行的量化交易策略。虽然最后用来执行的组成部分只有买卖和仓位,但是交易成本作为对量化交易策略的一个实际化修正,也是策略研发流程中一个不可或缺的组成部分。
上面提到的对量化交易策略收益和风险情况的判断,实际上是一个综合性的评价问题。一个最为重要的参考依据应该是策略在整个交易过程中的净值走势,通过对策略净值走势的分析,就可以建立起该量化交易策略运行情况的全面判断。但是净值走势本身由于细节过多,因此无法简单的用来进行策略之间的横向对比。这时就需要精炼净值走势中所包含的信息,选取合适的部分形成量化的评价指标,从而进行量化交易策略的进一步判定。就作者看来,评判一个策略的标准中最重要的仍然是策略在整个交易过程下的收益情况,一个负收益的量化交易策略根本无需考虑其风险即可排除。而当收益为正时,再结合风险的度量进行具体的取舍,就可以直观的给出量化交易策略是否合格的评判标准了。作者心目中最重要的风险指标是策略净值的回撤水平,在后面的案例分析中也会重点查看回撤的结果。
于此同时,一些量化交易策略在进行收益和风险情况的判断时,仅仅针对策略自身的净值走势进行研究是不够的,给出一个合理的基准来进行对比往往是更为有效的判别方法。例如后面的案例中会涉及到的量化选股策略,当交易选择仅限为对具体的股票进行持仓,而不考虑空仓或者卖空时,选取一个特定的基准进行对比就会是一个更为有效的判别方法。这主要是由于量化选股策略的仓位始终为多头,因此不论如何配置,策略所持仓位都含有资本资产定价模型中所提到的市场成分。而选股策略本身的意义在于选择更好的股票、不在于获取市场收益,因此将市场走势作为对比、或者在策略收益中剔除掉市场成分就是一个更合理的做法。
上述所有的操作,都需要建立在对历史数据的分析之上,在量化交易领域当中一般称之为回溯测试,或者简称回测。所谓回溯,也就是将交易的过程在历史数据上复现一遍,这里面包含了一个假设,即历史数据在量化交易策略中展现出的样本特征在未来的交易中依然存在,否则回溯测试就失去了意义。关于这一假设的分析其实在诸多技术分析著作中均有涉及,一般被称为“历史会重演”,这里不再继续展开。不同于传统技术分析的是,量化交易策略的研发过程更加深入具体,在涉及到策略的参数设定、模型设置等具体问题时,需要采用数量化的方法、也就是最优化等技术手段进行解决。例如如何设置买点和卖点可以使得相应的总体收益最大等等,都是很典型的最优化数学问题,那么找到合适的最优化技术和算法并加以应用,就能够确定量化交易策略的最终形式,用以进行实际交易。
图1中所展示的是一个较为松散的一般性框架,用来总领性的说明量化交易策略的基本研发流程。在具体的策略研发过程中,这个框架经常会因为具体研发设置和策略设置的不同而产生变化。例如当量化交易策略的主要作用不是在时间轴上选择具体的买卖时点,而是在同一个时间点上对多个资产进行选择和配置时,图1中的一些说明就显得有些含混不清。量化选股策略就是这一类策略中最为常见的形式,因此这里在整体框架不变动的情况下,针对图1进行了文字上的调整,用以说明量化选股策略的运行框架与研发流程。当然,使用选股策略的框架体系来处理多个资产甚至多个策略的挑选、配置也是可以的,在不复杂的情况下只需要稍作联想即可。
买卖和仓位虽然是更为通用的说法,但是更适合于描述择时策略,放在选股策略的研发框架中会显得比较突兀,因此图2将买卖换成了选股,仓位则换成了配比,这样更容易让读者领会该研发流程的含义。实际上,对于每一期的选股而言,如果选择了原先没有仓位的股票,那么对应的操作就是买入该股票,如果已经建仓的股票没有被选入这一期的股票池,那么对应的操作就是卖出该股票。而配比则是在买卖的基础上,通过仓位大小的变化来实现具体配置。因此,选股和配比实际上可以算作是买卖和仓位选择的特殊情况,只是这种说法更为贴合量化选股策略本身。
略有不同的,是风险在量化选股策略研发流程中的具体含义。由于选股策略的仓位操作涉及到多个股票之间的配比问题,因此这里的风险不仅包括单支股票的风险,也涉及到多支股票之间的风险程度,后一种风险一般采用股票收益之间的相关性来进行描述。例如在一般性的最优投资组合理论当中,经常使用协方差矩阵来刻画整个资产组合的风险水平。虽然从实际情况来看,相关性这一度量方式与风险的直观感受之间有一定的差距,但是在多资产环境下,一般都将资产间的相关性视为风险的来源之一,这是一个偏学术的、约定俗成的做法。
上面的例子是针对选股策略进行的文字上的变动,实际上量化交易策略研发流程的变化更多来自于各个研发组成部分不同的结合方式。而不同的结合方式,对应的是策略研发过程中不同的目标和需求。例如图1所介绍的松散的研发流程,是在确定好买卖行为和仓位设定之后,再针对实际交易中所产生的交易成本进行二次测试。这样的做法虽然简便易行,但是忽视了交易成本本身对于收益的影响,以及更进一步对于买点和卖点的影响。因此,在确定买卖设置的步骤中就考虑交易成本的影响,应该是一个更贴近于实际的研究框架。图3给出了相应的流程刻画,如图所示,在判断收益因素时,同时考虑交易成本对于收益的影响,从而优化出更为实际的买卖设置。再根据相应的风险控制,结合买卖点的选择,得出最后的仓位设置。在确定了买卖和仓位这两个部分之后,就获得了一个完整的量化交易策略。
图4给出了一个更紧凑、更贴合实际操作的量化交易策略研发流程。在该流程中,买卖和仓位的设置是同时作为参数进行优化的,优化的目标函数也进行了唯一化,即量化交易策略的风险调整后收益。而在确定需要优化的目标函数时,交易成本也如同上一个研发流程一样同时被考虑进去,从而保证买卖和仓位优化结果的准确性。毫无疑问,相较于上面所涉及到的研发流程、特别是图1中较为松散的研发流程,该量化交易策略研发流程的各个组成部分更为紧密,因此在优化过程中所产生的与实际操作的偏离也就越小,买卖和仓位设置的准确度也就更高。但是在实际工作中,如果想参照这一流程进行研发,那么就需要比较强的计算能力,数据量的大小也要达到一定要求,同时优化方法和目标函数的设定要能够同时覆盖买卖和仓位的所有参数,因此往往也只有极为简单的策略思路可以采用这样的流程框架进行研发。
在实际的量化交易策略相关工作中,研发只是整个工作流程的一部分,还有两个组成部分需要着重强调。基于此,图5在图1所示的研发流程的基础上给出了一个更为完整的工作流程。如图所示,需要增加的部分包括处于研发过程之前的数据准备工作以及处于研发过程之后的策略执行工作。这两项工作与前面所论述的研发流程具有很强的逻辑关联性与内在依赖性,三者结合起来形成的一个整体,基本上可以涵盖量化交易策略具体工作的绝大部分内容。
首先论述数据准备的工作,循着图5中的箭头可以看到,在量化交易策略的整体工作中,既要为研发过程准备相应的研究数据,也要为策略执行准备相应的实时数据。在研究数据方面,由于寻找合适的量化交易策略需要不断重复研发流程,因此对于数据的要求更偏重于准确性和覆盖能力。同时,对数据的清洗和转换也是一项重点工作,在大部分的数据科学研究、包括量化交易策略的研发当中,数据特征的合理抽取对于整体效果提升的重要性有时甚至要高于精巧的模型,当然很多时候数据的转换和模型的构造是相互融合的,针对具体情况应当采取具体的分析和处理。而在策略执行数据方面,则更应该关注于数据获取的及时性。至于数据的清洗和变换,只需要完全复制研发得到的量化交易策略下的数据准备工作即可。另外,为了保证数据的及时性,最终进行的数据清洗工作对时间消耗存在一定的要求。
然后讨论策略执行的工作。策略执行,是在量化交易策略研发完成之后,最终产出实际效能的组成部分。执行时应该遵循尽量贴近研发完成的量化交易策略的原则,与量化交易策略所确定的买卖、仓位等设置尽可能的保持一致,这样才能最真实的反映出前面量化交易策略的研发结果。同时,策略执行的结果也可以用来反向支持具体的研发流程,通过对策略执行所得到的收益、风险情况的判断,实时的重新进行研发,对量化交易策略进行修改,从而使得策略能够及时的得到现实的反馈,增强自身的稳健程度。值得一提的是,后面将要介绍的推进分析是一种模拟策略执行的回溯测试技术,读者可以在运行推进分析时有限度的了解到量化交易策略实际执行时的种种状态。