金融量化分析_2015_讲义_9_量化投资

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9量化投资

9.1如何利用多因子进行量化选股?

MATLAB能够为量化投资策略的研究、回测、模拟交易、实盘交易、数据处理、矩阵算法、优化、统计检验、金融建模、数据挖掘、机器学习等方面提供强大的支持,使得量化投资策略的构建与应用更加容易,并能够实现复杂的算法。量化选股是指利用数量方法选择投资组合成份股的过程,既可从股票的基本面因素(包括多因子、风格轮动、行业轮动、事件、新闻、统计指标等)来选股(简称基本面选股),也可从股票交易的市场行为来选股(技术面选股),具体方法包括资金流、动量反转、一致预期、趋势追踪和筹码等。

基于多因子的量化选股主要步骤包括:

第1步,选取候选因子。选择候选因子主要依赖于经济逻辑和市场经验。候选因子可以是一些反映基本面信息的因子,也可以是反映市场交易信息的因子,还可以是反映宏观经济、未来预期等其他方面信息的因子。因子类型主要包括规模、估值、成长、盈利、动量、市场、资本结构、新闻等。

第2步,筛选有效因子和剔除冗余因子。根据各因子与股票(组合)收益率之间的相关性程度(比如,筛选标准可为相关系数绝对值大于阀值)筛选出有效因子,根据各因子之间的相关性程度(比如,剔除准则为相关系数绝对值大于阀值,仅保留与其他因子相关性较小、有效性更强的因子)来剔除冗余因子。有效因子的筛选通常采用排序的方法,其具体思路为:每个月初依因子大小对样本股票进行排序(正向指标从小到大排序,反向指标从大到小排序)并划分成若干股票组合,每个月末计算出各个股票组合该月收益率(假定月初买入月末卖出),进而计算相对基准的超额收益以及赢家组合跑赢市场的概率和输家组合跑输市场的概率。若该因子有效,则各个股票组合收益率与组合排序之间存在较强的相关性,而且赢家组合的超额收益率大于0,而且比该组合的最小超额收益阀值大,具有较大的跑赢概率,而输家组合的超额收益率小于0,比该组合的最小超额收益阀值小,具有较大的跑输概率。

第3步,构建综合评分模型,计算股票综合得分。根据筛选出的多个因子构建综合评分模型,在每个月初根据正常交易股票的因子最新取值计算股票的综合得分并对股票进行从高分到低分排序,分值相同的按流通市值或PB排序,选择排序靠前的若干只股票。构建综合得分模型的常用方法有两种:一是打分法,首先对股票的各个因子进行打分(正向指标按从低到高排序,反向指标从高到低排序),然后按照一定的(静态或动态)权重加权得到一个总分,比如,同类因子相加,不同类因子相乘。该法比较稳健,

62

不易受到极端值的影响;二是回归法,根据过去股票收益率对多个因子建立线性回归模型,然后根据因子值预判未来股票收益,以此筛选股票。该方法较易受到极端值的影响,能较及时调整股票对各因子的敏感性。

第4步,评价选股绩效。按照股票综合得分划分若干个股票组合,计算每个月的收益率和年华复合收益,并计算每个组合的信息比率以及得分最高组合的跑赢市场的概率。

【示例9.1】(基于多因子的量化选股)

=================================================================================== %% 数据准备:

%从QIA下载价格和因子数据:

clc;clear;

Ticker= 'HS300'; TodayDate='2014-11-28'; YesterdayDate='2014-11-27'; BeforeDate='2014-10-28'; Frequency= TimeIntervals.DAY01; %起止日期和频率。

[PriceToday,~,~]=getDataByTime('CP',TodayDate,TodayDate,Ticker, Frequency);

[PriceYesterday,~,~]=getDataByTime('CP',YesterdayDate,YesterdayDate,Ticker, Frequency);

FactorFields={'QF_PE','QF_PS',... %估值因子。

'QF_NetProfitsGrowth',... %成长因子。

'QF_LbtToAssets', 'QF_TimesInterestEarned',... %偿债能力因子。

'QF_Momentum1M', 'QF_Momentum3M',... %动量因子。

'QF_ActIndicator', 'QF_AnalystConsistentF', 'QF_RiskPreference',... %行为因子。

'QF_PEF'}; %分析师预测因子。

for i=1:length(FactorFields)

[FactorToday(:,i),~,~]=...

getDataByTime(FactorFields{i}, TodayDate, TodayDate,Ticker, Frequency); %今日因子数据。

[FactorBefore(:,i),~,~]=...

getDataByTime(FactorFields{i}, BeforeDate, BeforeDate,Ticker, Frequency); %22日前因子数据。

end

%从Wind下载价格和因子数据:

clc;clear; w=windmatlab;

TodayDate='20141128'; YesterdayDate='20141127'; BeforeDate='20141028'; Frequency='Period=D'; %起止日期和数据频

率。

Tickers= w.wset('SectorConstituent', 'date', TodayDate, 'sector', '沪深300'); Tickers= Tickers(:,2); %成份股代码。PriceToday=w.wsd(Tickers, 'close', TodayDate, TodayDate, 'ruleType=2', Frequency); %今日收盘价数据。PriceYesterday=w.wsd(Tickers, 'close', YesterdayDate, YesterdayDate, 'ruleType=2', Frequency); %昨日收盘价数据。FactorFields={'pe','ps','growth_profit', 'debttoassets', 'ebittointerest', 'pe_est','wrating_targetprice','west_eps_FTM'}; FactorFieldsToday= FactorFields; FactorFieldsBefore=FactorFields; %市盈率、市销率、净利润增长率、资产负债率、

已获利息倍数、预测市盈率、一致预测目标价、一致预测每股收益。

FactorToday=NaN(length(Tickers), length(FactorFieldsToday)); NaNSignToday=zeros(1,length(FactorFieldsToday)); FactorBefore=NaN(length(Tickers), length(FactorFieldsBefore)); NaNSignBefore=zeros(1,length(FactorFieldsBefore));

for i=1:length(FactorFields)

FactorDataToday=w.wsd(Tickers, FactorFieldsToday{i}, TodayDate, TodayDate, 'ruleType=2',Frequency); %今日因子

数据。

if iscell(FactorDataToday)

FactorFieldsToday{i}=NaN; NaNSignToday(i)=1;

else

FactorToday(:,i)=FactorDataToday;

end

FactorDataBefore=w.wsd(Tickers, FactorFieldsBefore{i}, BeforeDate, BeforeDate, 'ruleType=2',Frequency); %22日前因子

数据。

if iscell(FactorDataBefore)

FactorFieldsBefore{i}=NaN; NaNSignBefore(i)=1;

else

FactorBefore(:,i)=FactorDataBefore;

end

end

63

相关文档
最新文档