从投资组合清算美元价值
此示例显示了如何从基督教研究小组的交易成本分析中最大程度地减少投资组合中的美元价值。此示例始终导致缩小大小的投资组合。市场影响最小化表示为
在哪里mi是交易股票的市场影响成本,X表示每个股票的最终权重。
This example requires an Optimization Toolbox™ license. For background information, see优化理论概述(Optimization Toolbox)。
优化发现了从投资组合清算价值的市场影响成本的本地最低限度。有关搜索全球最小值的方法,请参阅本地与全球最佳(Optimization Toolbox)。
要访问示例代码,请输入edit KRGLiquidityOptimizationExample.m
在命令行。
检索市场影响参数和负载数据
从Kissell Research Group FTP站点中检索市场影响数据。使用该网站连接到FTP网站ftp
使用用户名和密码函数。导航到mi_parameters
文件夹和检索市场影响数据mi_encrypted_parameters.csv
file.Midata
contains the encrypted market-impact date, code, and parameters.
f = ftp('ftp.kissellresearch.com',,,,'username',,,,'PWD');mget(f,'mi_encrypted_parameters.csv');close(f) miData = readtable('mi_encrypted_parameters.csv',,,,“定界符”,,,,...',',,,,“ readlownames',错误的,“ ReadVariablenames”,真的);
创建Kissell研究小组交易成本分析对象k
。指定日期,市场影响代码和交易日数的初始设置。
k = krg(Midata,DateTime(DateTime)('今天'),1,250);
加载示例数据TradeDataPortopt
和协方差数据协会塔塔
从文件krgexampledata.mat
,,,,which is included with the Datafeed Toolbox™. Limit the data set to the first 10 rows.
加载krgexampledata.matTradeDataPortopt协会塔塔n = 10;TRADEDATAPORTOPT = TRADEDATATAPORTOPT(1:n,:);协方差=协方差(1:n,1:n);c = table2array(协方差);
有关示例数据的描述,请参见Kissell研究小组数据集。
定义优化参数
将投资组合清算价值设置为$ 100,000,000。将投资组合风险边界设置为90%至110%。将最大市场影响总成本设置为50个基点。确定投资组合中的股票数量。检索每股清算股票的最大市场影响成本的上限约束。
PortLiquidationValue = 100000000;PortiskBounds = [0.9 1.10];maxtotalmi = 0.005;numportstocks =长度(交易dataportopt.symbol);MAXMI = TRADEDATAPORTOPT.UB_MAXMI;
Determine the target portfolio value投资组合核心值
组合清算价值减去摇来摇去m the total portfolio value.
portfoliovalue = sum(交易dataportopt.value);AbsportValue = ABS(TradeDataPortopt.Value);portfolioabsvalue = sum(AbsportValue);portfoliotargetValue = Portfoliovalue-Portliquidation Value;
确定当前的投资组合重量w
基于投资组合中每个股票的价值。
w = sign(交易dataportopt.shares)。
Specify constraintsAEQ
和beq
为了表明权重必须总和。初始化线性不等式约束一个
和b
。
AEQ =一个(1,numportstocks);beq = 1;a = [];b = [];
检索最终投资组合重量的下层和上限TradeDataPortopt
。
lb = tradeDataPortopt.lb_wt;ub = tradeDataPortopt.ub_wt;
使用示例数据集中的其他可选约束来确定最终投资组合中共享数量的下限和上限。
lbshares = max([tradeDataPortopt.lb_minshares,...TRADEDATAPORTOPT.LB_MINVALUE./TRADEDATAPORTOPT.PRICE,...TRADEDATAPORTOPT.LB_MINPCTADV。*TRADEDATAPORTOPT.ADV],[],2);ubshares = min([tradeDataPortopt.ub_maxshares,...TRADEDATAPORTOPT.UB_MAXVALUE./TRADEDATAPORTOPT.PRICE,...TradeDataPortopt.ub_maxpctadv。*TradeDataPortopt.Adv],[],2);
指定初始投资组合权重。
X0 = TradeDataPortopt.Value./Sum(TradedataPortopt.Value);x = x0;
定义优化选项。将优化算法设置为顺序二次编程。将终止公差设置在功能值和ON上X
。将公差设置在约束违规上。在PCG迭代中设置终止公差。设置最大数量的功能评估“ maxfunevals”
和iterations'Maxiter'
。选项“ maxfunevals”
和'Maxiter'
设置为较大的值,以便优化可以迭代多次找到局部最小值。设置有限差异变量的最小变化。
选项= optimoptions('fmincon',,,,'算法',,,,'SQP',,,,...'Tolfun',10e-8,'tolx',10E-16,'TolCon',10e-8,'tolpcg',10e-8,...“ maxfunevals”,50000,'Maxiter',50000,“ diffminchange',,,,10E-8);
最小化投资组合清算的市场影响成本
定义功能句柄Objectivesfun
对于样本目标函数Krgliquingfunction
。要访问此功能的代码,请输入编辑krgliquidityFunction.m
。定义功能句柄约束
对于样本函数克尔格LiquidityConstraint
这设置了其他约束。要访问此功能的代码,请输入编辑krgliquityconstraint.m
。
Objectivefun = @(x)krgliquidityFunction(x,TradeDataPortopt,...PortfoliotargetValue,K);ConstraintsFun = @(x)krgliquityconstraint(x,w,c,tradeDataPortopt,...PortfoliotargetValue,Portriskbounds,LBShares,Ubshares,Maxmi,Maxtotalmi,K);
最大程度地减少投资组合清算的市场影响成本。Fmincon
根据下限和上限值,找到每个股票的投资组合权重的最佳值。它是通过寻找市场影响成本的当地最低限度来做到这一点。
[x,〜,exitflag] = fmincon(Obsocepfun,X0,A,B,AEQ,BEQ,LB,UB,UB,...ConstraintsFun,选项);
检查是否Fmincon
找到局部最小值,显示该功能停止的原因。
出口
出口= 1.00
Fmincon
返回1
当它找到当地的最低限度时。有关详细信息,请参阅出口
(Optimization Toolbox)。
确定优化的重量值x1
投资组合中的每个股票的小数格式。
x1 = x。
确定优化的投资组合目标值目标价值
和股份数量Sharestotrade
对于投资组合中的每个股票。
targetshares = x*PortfoliotargetValue。/TradeDataPortopt.Price;ShareStotrade = TradeDataPortopt.Shares-TargetShares;targetValue = x*portfoliotargetValue;TradeDataPortopt.Shares = abs(Sharestotrade);
确定数量策略的优化百分比。
TRADEDATAPORTOPT.TRADETIME = TRADEDATAPORTOPT.TRADETIME...。TRADEDATAPORTOPT.POV = KRG.TRADETIME2POV(TRADEDATAPORTOPT.TRADETIME,...TradeDataPortopt.Shares);
估计市场影响成本mi
用于清算的股份数量。
Mi = MarketImpact(K,TradeDataPortopt)/10000;
要以十进制格式查看市场影响成本,请指定显示格式。显示投资组合中前三股的市场影响成本。
格式mi(1:3)
ANS = 1.0E-03 * 0.1477 0.1405 0.1405
要查看具有两个小数位置的目标股票数,请指定显示格式。显示投资组合中前三股股票的目标数量。
格式银行Targetshares(1:3)
ANS = -23640.11 -154656.73 -61193.04
负值表示投资组合的股票。
显示投资组合中前三股股票的交易价值。
TargetValue(1:3)
ANS = -968062.45 -1521760.41 -2448131.64
为了模拟在历史日期范围内交易目标数量的股票数量,您现在可以对优化投资组合进行压力测试。有关进行压力测试的详细信息,请参阅对投资组合进行压力测试。
References
[1]基尔,罗伯特。“创建动态的贸易模型:超越黑匣子。”交易杂志。卷。6,第4号,2011年秋季,第8-15页。
[2]基尔,罗伯特。“投资过程中的TCA:概述。”指数投资杂志。卷。2,第1号,2011年夏季,第60-64页。
[3]基尔,罗伯特。算法交易和投资组合管理科学。Cambridge, MA: Elsevier/Academic Press, 2013.
[4] Chung,Grace和Robert Kissell。“投资组合优化过程中的交易成本的应用。”交易杂志。卷。11,第2号,2016年春季,第11-20页。
也可以看看
克尔格
|市场影响力
|Fmincon
(Optimization Toolbox)|最佳选择
(Optimization Toolbox)