动量反转策略_第1页
动量反转策略_第2页
动量反转策略_第3页
动量反转策略_第4页
动量反转策略_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

策略背景3绩效分析4策略开发2第1页量化投资策略开发实例历史回验策略背景市场情况量化投资策略开发第

2页

实例上各种资产价格总是在波动中前进,久涨必跌,久跌必涨策略背景

策略原理,判断它将出,判断它将出现反转策略就是寻找前期强势的现逆转后做空;前期弱势的

逆转后做多。本策略对所有收益率和国泰安风险数据库里的所有风险因子进行多元回归,利用风险因子无法解释的残差序列进行排序,对前百分之十买空,后百分之十买多。量化投资策略开发实例第3页策略背景

策略流程量化数据提取收益率和风控从数据库中订阅30天的所有因子数据建立反转依据多元回归,提取残差矩阵对各股残差向量进行求和排序,建立反转依据设置开仓依据对

前10%

做空,后10%

做多投资策略开发实例第4页策略配置StrategyCfg.xmlStkcd.xml编写主程序momentumRversal.m回验配置BackTestCfg.xml绩效分析对策略函数的名称、参数、时间、交易标的及所需数据的配置策略流程的实现对策略回验参数、交易品种交易费用、绩效指标的数据参数的配置第5页量化投资策略开发实例命令窗口运行界面工具运行Stkcd.xml配置<Strategy><code

ContractMultiplier="300"

Currency="CNY"

MarginLevel="0.12"

MaxShare="30"exchangeType="ExchangeType.CFFEX"

id="IF1303"

/></Strategy>每个code

下,ContractMultiplier、Currency、MarginLevel、MaxShare、为实时交易部分配置,历史回验设置无效。ContractMultiplier:合约乘数Currency:货币种类MarginLevel:交易保证金比例MaxShare:当前合约的最大持仓量exchangeType

表示市场类型枚举id:交易标的代码市场类型枚举SZSE交易所SSE交易所HKEX联合交易所CFFEX中国金融

交易所ZCE郑州

交易所DCE大连

交易所SHFE交易所策略开发交易标的配置%Stkcd.xml名字可更换第

页StrategyCfg.xml配置<?xml

version="1.0"

encoding="utf-8"?><Strategy><strategyFunction

name=“momentumRversal”/><strategyArguments

rebalanceCycle="1"

returnCalFrequency="TimeIntervals.DAY01"/><FactorD fg

da

istType="Da istType.Trading"

localPath=“pwd\CacheData"periodType="PeriodType.IFTradingPeriod"

tickerList="AllAStock"/><data

decisionDataLength="30"

fieldname="RF_tradingreturn"frequency="TimeIntervals.DAY01"/><data

decisionDataLength="30"

fieldname="RF_growth“frequency="TimeIntervals.DAY01"/>……<data

decisionDataLength="30"

fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>策略运行配置全景展示第

页策略开发函数名称及调仓配置StrategyCfg.xml配置<?xml

version="1.0"

encoding="utf-8"?><Strategy><strategyFunction

name=“momentumRversal”/><strategyArguments

rebalanceCycle="1“returnCalFrequency="TimeIntervals.DAY01"/>strategyFunction(用途:用户编写的策略函数名称):name填入策略函数名。strategyArguments(用途:策略的参数配置):rebalanceCycle:重平衡周期,策略回验时,每过rebalanceCycle根bar将进行一次投资决策,计算目标目标持仓。Bar的大小取决于returnCalFrequency;returnCalFrequency:计算收益率的频率第6页量化投资策略开发实例%StrategyCfg.xml名字可更换策略数据及缓存配置StrategyCfg.xml配置<FactorDfg

da

istType="Da istType.Trading"

localPath=“pwd\CacheData"periodType="PeriodType.IFTradingPeriod"

tickerList="AllAStock"/>FactorD

fg(用途:策略的时间及标的配置)da

istType:表示日期类型:Trading,交易日;Working,工作日;localPath:本地Mat缓存文件的

路径(绝对路径),

中,pwd表示当前的工作空间路径;periodType:交易时间配置信息;tickerList:表示

代码列表,可以是定义交易标的的xml文件路径名称,也可以是板块,支持的板块列表有:(’AllAStock,’SHA’,’SZA’,’AllBStock’,’SHB’,’SZB’,’HS300’)第6页量化投资策略开发实例%StrategyCfg.xml名字可更换<data

decisionDataLength="30"

fieldname="RF_tradingreturn"frequency="TimeIntervals.DAY01"/><data

decisionDataLength="30"

fieldname="RF_growth“frequency="TimeIntervals.DAY01"/>……<data

decisionDataLength="30"

fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>data(用途:策略决策所需数据配置)策略决策时每需要一种数据,则需要配置一个datadecisionDataLength:每次策略函数计算目标持仓权重时所需的改数据长度,必须为大于等于1的整数;fieldname:数据的字段名;frequency:数据的频率,有SEC01(1秒),SEC05(5秒),SEC15(15秒),SEC30(30秒),MIN01(1分),MIN05(5分),MIN15(15分),DAY01(1天);策略开发

策略数据配置第

页StrategyCfg.xml配置<?xml

version="1.0"

encoding="utf-8"?><Strategy><strategyFunction

name=“momentumRversal”/><strategyArguments

rebalanceCycle="1"

returnCalFrequency="TimeIntervals.DAY01"/><FactorD fg

da

istType="Da istType.Trading"

localPath=“pwd\CacheData"periodType="PeriodType.IFTradingPeriod"

tickerList="AllAStock"/><data

decisionDataLength="30"

fieldname="RF_tradingreturn"frequency="TimeIntervals.DAY01"/><data

decisionDataLength="30"

fieldname="RF_growth“frequency="TimeIntervals.DAY01"/>……<data

decisionDataLength="30"

fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>策略运行配置全景展示第

页主程序function

[portfolio,

newStateMatirx

]

=

momentumRversal(

decisionData,

stateMatirx

)输入:1、decisionData:

结构体, 策略决策所需数据;decisionData.time:策略决策的时间decisionData.varList:策略决策所需数据的名称列表;decisionData.factorN_frequency:策略决策所需数据结构体decisionData.factorN_frequency.data:策略决策所需数据矩阵;decisionData.factorN_frequency.timeList:矩阵的列索引,表示矩阵中每列代表的时间点;decisionData.factorN_frequency.tickerList:矩阵的行索引,表示矩阵中每列代表的交易标的;2、

stateMatrix:

策略函数上次

的状态信息;输出:1、

portfolio:

策略函数经过运算后得到的,目标投资组合 权重序列,维度必须和订阅的交易标的数目相同;量化投资策略开发实例第7

页数据提取开发实例第8

页%变量赋值rate

=

0.1;variableList

=

...%风险因子名称{'tradingreturn',

'growth',

'relativity',

'value','leverage',

'size',

'volatility',

'liquidity',

'volumevolatility','momentum',

'COMH',

'COALMI',

'SF',

'OM',

'OGI','RUMA',

'DR',

'ECO',

'BI',

'FRI',

'ATI',

'MET','MINS','NFMETAL',

'BMTVI',

'RI',

'TCI',

'RER'...'PUB',

'SSI',

'SI',

'MMF',

'TLI',

'CEMR'};%从策略决策所需数据中取出风险因子数据for

i

=

1:length(variableList)

eval([variableList{i},'=','decisionData.RF_',

variableList{i},'_DAY01.data;']);end%从策略决策所需数据中取出收益率数据Rtn=decisionData.Rtn_DAY01.data;量化投资策略建立反转依据%初始化%对此时间点向后追溯30期的数据,以收益率为因变量,以34个风控因子为自变量进行回归,得到30维的残差矩阵if

isempty(stateMatirx)residul

=

NaN(size(Rtn));for

i

=

1:30Y

=

Rtn(:,i);RF

=

NaN(size(Rtn,1),

34);for

j

=

1:length(variableList)x

=

eval(variableList{j});

RF(:,

j)

=

x(:,

i);end[~,~,r] =

regress(Y,RF);residul(:,

i)

=

r;endelse%以后只计算当日的残差向量,对stateMatirx最后一列刷新residul

=

stateMatirx.residul;Y

=

Rtn(:,

end);RF

=

NaN(size(Rtn,1),

34);for

j

=

1:length(variableList)x

=

eval(variableList{j});

RF(:,

j)

=

x(:,

end);end[~,~,r] =

regress(Y,

RF);residul(:,

1:end-1)

=

residul(:,

2:end);residul(:,

end) =r;end%交易规则设置准备momentum=nansum(residul,

2);

%计算30日动量indexobjectobjectobject=

(1:size(momentum,

1))';=

[momentum,

index];=

object(~isnan(momentum),

:);=

sortrows(object);量化投资策略开发实例第9

页设置开仓依据%%%对每只标的等权重分配totalN

=

size(object,

1);n =

fix(totalN*rate);weight

=

1/n;%%%动量前n的 做空,后n的 做空portfolio

=

zeros(size(Rtn,

1),

1);portfolio(object(1:n,

2)) =

weight;portfolio(object(end-n+1:end,

2))

=

-weight;%新状态矩阵赋值newStateMatirx.residul

=

residul;量化投资策略开发实例end第10

页主程序整体展示function

[portfolio,

newStateMatirx

]

=

momentumRversal(

decisionData,

stateMatirx

)%根据30日的风险因子对收益率进行回归所得残差计算得到的动量,构建反转策略%变量赋值rate=0.1;variableList=...

%风险因子名称{'tradingreturn',

'growth',

'relativity',

'value',

'leverage',

'size',

'volatility',

'liquidity',

'volumevolatility',

'momentum','COMH',

'COALMI',

'SF',

'OM',

'OGI',

'RUMA',

'DR',

'ECO',

'BI',

'FRI','ATI',

'MET','MINS',

'NFMETAL',

'BMTVI',

'RI',

'TCI',

'RER'...'PUB',

'SSI',

'SI',

'MMF',

'TLI',

'CEMR'};%从策略决策所需数据中取出风险因子数据for

i

=

1:length(variableList)

eval([variableList{i},'=','decisionData.RF_',

variableList{i},'_DAY01.data;']);end%从策略决策所需数据中取出收益率数据Rtn=decisionData.Rtn_DAY01.data;%初始化%对此时间点向后追溯30期的数据, 以收益率为因变量,以34个风控因子为自变量进行回归,得到30维的残差矩阵if

isempty(stateMatirx)residul

=

NaN(size(Rtn));for

i

=

1:30Y

=

Rtn(:,

i);RF

=

NaN(size(Rtn,

1),

34);for

j

=

1:length(variableList)x

=

eval(variableList{j});RF(:,

j)

=

x(:,

i);end[~,~,r] =

regress(Y,RF);residul(:,

i)

=

r;end第11页else%以后只计算当日的残差向量,对stateMatirx最后一列刷新residul=stateMatirx.residul;Y

=

Rtn(:,

end);RF

=

NaN(size(Rtn,

1),

34);for

j

=

1:length(variableList)x

=

eval(variableList{j});RF(:,

j)

=

x(:,

end);end[~,~,r] =

regress(Y,

RF);residul(:,

1:end-1)

=

residul(:,

2:end);residul(:,

end) =

r;end%交易规则设置准备momentum=nansum(residul,2);

%计算30日动量indexobjectobjectobject=

(1:size(momentum,

1))';=

[momentum,

index];=

object(~isnan(momentum),

:);=

sortrows(object);%%%对每只标的等权重分配totalN

=

size(object,

1);

n =

fix(totalN*rate);weight

=

1/n;%%%动量前n的 做空,后n的 做空portfolio

=

zeros(size(Rtn,

1),

1);portfolio(object(1:n,

2)) =

weight;portfolio(object(end-n+1:end,

2))

=

-weight;%新状态矩阵赋值newStateMatirx.residul

=

residul;end量化投资策略开发实例回验配置全景展示BackTestCfg.xml配置<?xmlversion="1.0"

encoding="utf-8"?><BackTest><backtestArguments

actionDelay="1"

idMode="all"

repoFrequency="DAY01"reportDisplay="On"

resultSave="On"/><transactionCost

buy="0.00005"

securityType="SecurityType.StockA"

sell="0.00005"/><transactionCost

buy="0.00005"

securityType="SecurityType.StockB"

sell="0.00005"/>……ysisD

ode=""

funName="modifiedSharpRatio"

name="alpha"ysisD

ode="000300"

funName="CorrWithMarket"

name="CSI300Rtn"ysisFun

dispName="日平均收益率"funName="averageSimpleRateOfReturn"/>ysisFun

dispName="累积简单收益率"funName="cumsumSimpleReturn"/><performancevalue="0.05"/><performancevalue=""/><performance<performance……<performanceysisFun

dispName="修正的夏普比率"funName="modifiedSharpRatio"/><ben ark

code="000300"

name="ben

ark"/></BackTest>第

页BackTestCfg.xml配置<?xmlversion="1.0"

encoding="utf-8"?><BackTest>idMode="all"

repoFrequency="DAY01"<backtestArguments

actionDelay="1"reportDisplay="On"

resultSave="On"/>backtestArguments(用途:策略回验的参数配置)actionDelay:交易延迟,策略从投资决策到通过交易生成持仓的延迟。必须为非负整数。比如actionDelay为2,returnCalFrequency为1,returnCalFrequency为TimeIntervals.SEC05,将会以决策时点2*5=10秒后的价格成交;idMode:由交易代码转为

id的模式。(注意:对于

而言,同一交易代码可能由于借壳上市等原因,随着时间区间不同,其意义会发生变化,系统

会将交易代码转为

id——对

而言,以公司作为

关联对象的唯

。)对

而言,如果用户输入all,系统将会订阅回验区间内使用过该交易代码的所有行情,通过

id进行区分,同样,通过

id区分策略函数返回的持仓权重序列;如果用户输入latest,则系统会订阅

使用该交易代码的行情,同样通过

id区分。如果交易代码列表中不存在

标的,则不用考虑该属性;量化投资策略开发实例第12页<?xmlversion="1.0"

encoding="utf-8"?><BackTest>idMode="all"

repoFrequency="DAY01"<backtestArguments

actionDelay="1"reportDisplay="On"

resultSave="On"/>backtestArguments(用途:策略回验的参数配置)repoFrequency:债券的回购频率。支持DAY01(

回购)和DAY07(每七日回购)两个枚举。系统将会据此获取债券的杠杆费用。注意:当交易代码列表不存在债券标的时,则不用考虑该属性;reportDisplay:excel绩效报表展示开关,当设为On的时候,策略回验结束后会显示策略绩效的excel绩效报告;设为其他值时则不会打印;resultSave:excel绩效报表保存开关,当设为On的时候,策略回验结束后会被保存;设为其他值时则不会打印;量化投资策略开发实例第12页品种的枚举类型securityTypeStockAStockBB股Index指数Fund基金Bond债券CommodityFuture商品IndexFuture指数<transactionCost

buy="0.00005"

securityType="SecurityType.StockA"

sell="0.00005"/><transactionCost

buy="0.00005"

securityType="SecurityType.StockB"

sell="0.00005"/>transactionCost(用途:按品种配置交易费用),需要按买入和卖出每配置一个品种需要增加一个

分别配置交易费用。

buy:该品种买入的交易费用比例;securityType:品种的枚举类型;sell:该品种卖出的交易费用比例;第

页<performanceysisDode=""

funName="modifiedSharpRatio"

name="alpha"

value="0.05"/><performanceysisDode="000300"

funName="CorrWithMarket"

name="CSI300Rtn"

value=""/>performance

ysisData(用途:策略绩效指标的数据参数配置)计算绩效指标所需数据目前只支持指数收益率,且策略的简单收益率序列不需要配置,系统会自动传入到每个绩效评价函数中。code:如果评价指标计算需要指数收益率,属性值为指数代码,比如计算特雷诺指数需要沪深300收益率,则填写000300;如果填’’,认为该

描述的是评价指标的参数,value的值不能为空;funName:计算绩效指标的函数名称,必须和performance

ysisFun

中的函数名相对应;name:指标名称,绩效评价函数以此作为

解析数据;value:如果该

描述的是绩效函数的参数,则code

为’’,而value不能为空。第

页<performanceysisFun

dispName="日平均收益率"funName="averageSimpleRateOfReturn"/><performanceysisFun

dispName="累积简单收益率"funName="cumsumSimpleReturn"/>……<performanceysisFun

dispName="修正的夏普比率"funName="modifiedSharpRatio"/><ben ark

code="000300"

name="ben

ark"/></BackTest>performance

ysisFun(用途:策略绩效指标)dispName:策略绩效函数显示在excel绩效报告中的名称;

funName:策略绩效函数名称,系统将会寻找同名的函数计算策略绩效并生成报表。ben

ark(用途:excel报表中的基准收益率)code:指数的代码。第

页回验配置全景展示BackTestCfg.xml配置<?xmlversion="1.0"

encoding="utf-8"?><BackTest><backtestArguments

actionDelay="1"

idMode="all"

repoFrequency="DAY01"reportDisplay="On"

resultSave="On"/><transactionCost

buy="0.00005"

securityType="SecurityType.StockA"

sell="0.00005"/><transactionCost

buy="0.00005"

securityType="SecurityType.StockB"

sell="0.00005"/>……ysisD

ode=""

funName="modifiedSharpRatio"

name="alpha"ysisD

ode="000300"

funName="CorrWithMarket"

name="CSI300Rtn"ysisFun

dispName="日平均收益率"funName="averageSimpleRateOfReturn"/>ysisFun

dispName="累积简单收益率"funName="cumsumSimpleReturn"/><performancevalue="0.05"/><performancevalue=""/><performance<performance……<performanceysisFun

dispName="修正的夏普比率"funName="modifiedSharpRatio"/><ben ark

code="000300"

name="ben

ark"/></BackTest>第

页历史回验启动第23页量化投资策略开发实例界面工具运行命令窗momentumRversal.m2013-3-12013-4-10第14页量化投资策略开发实例指标名称英文名称公式基本指标率年化夏普比率SharpeRatio𝐸

𝑟

−𝑟𝑓SR

=𝜎[𝑟]最大回撤umDrawdown日HitRate日平均收益率AverageSimpleRateOfReturn𝑟1

+

+

𝑟𝑇𝐸

𝑟

=𝑇盈利能力指标一阶上偏矩HigherPartialMoments𝑇1HPM1𝑖

τ

=

𝑇

max[𝛾𝑖𝑡

𝜏,

0]𝑡=1累积简单收益率Cumsu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论