Main Content

Conduct Stress Test on Portfolio

该示例显示了如何使用Kissell研究小组的交易成本分析对一组股票进行压力测试。

  • 估计指定日期范围的历史市场影响成本和相应的美元价值。

  • 使用交易成本来筛选投资组合中的股票,并估算清算或购买指定数量的股份的成本。

  • 分析在波动期间的交易成本,例如金融危机,闪存崩溃或债务危机。

要访问示例代码,请输入编辑KrgStress -StestingExample.m在命令行。

Retrieve Market-Impact Parameters and Load Historical Data

从Kissell Research Group FTP站点中检索市场影响数据。使用该网站连接到FTP网站ftpfunction with a user name and password. Navigate to themi_parameters文件夹和检索市场影响数据mi_encrypted_pa​​rameters.csvfile.Midatacontains the encrypted market-impact date, code, and parameters.

f = ftp('ftp.kissellresearch.com',,,,'username',,,,'pwd');mget(f,'mi_encrypted_pa​​rameters.csv');close(f) miData = readtable('mi_encrypted_pa​​rameters.csv',,,,'delimiter',,,,...',',,,,“ readlownames',,,,false,“ ReadVariablenames”,真的);

加载示例数据TradeDataStressStestfrom the fileKRGExampleData.mat,它包含在Trading Toolbox™中。

加载KRGExampleDataTradeDataStressStest

For a description of the example data, seeKissell Research Group Data Sets

Create a Kissell Research Group transaction cost analysis objectk。指定日期,市场影响代码和交易日数的初始设置。

k = krg(Midata,DateTime(DateTime)('今天​​'),1,250);

Prepare Data for Stress Testing

指定从2015年5月1日至2015年7月31日的日期范围。

startDate ='5/1/2015';endDate ='7/31/2015';

Determine the number of stocks数字在投资组合中。创建一个日期范围日期范围from the specified dates. Find the number of daysnumDates在日期范围内。

numStocks =长度(交易EdataStressTest.Symbol);deitange =(datenum(startDate):datenum(endDate))';numdates =长度(depaterange);

在输出数据表上进行预先分配o

outLength = numStocks * numDates;符号= TradeDataStressTest.Symbol(:,ones(1,numDates)); sides = TradeDataStressTest.Side(:,ones(1,numDates)); dates = dateRange(:,ones(1,numStocks))'; o = table(symbols(:),sides(:),dates(:),NaN(outLength,1),NaN(outLength,1),...'variablenames',,,,{'Symbol',,,,'边',,,,'日期',,,,'mi',,,,'});

Ensure that the number of shares is a positive value using the腹肌功能。

TradeDataStressTest.shares = abs(TradataStresstest.shares);

将贸易时间贸易策略转换为数量贸易策略的百分比。

TradeDataStressTest.TradeTime = TradeDataStressTest.TradeTime...。* TradeDataStressTest.ADV; TradeDataStressTest.POV = krg.tradetime2pov(TradeDataStressTest.TradeTime,...TradeDataStressTest.Shares);

通过估计历史市场影响成本来进行压力测试

估计投资组合中每股股票在日期范围内的历史市场影响成本市场影响力。Convert market-impact cost from decimal into local dollars. Retrieve the resulting data in the output data tableo

kk = 1;为了ii = dateRange(1):dateRange(end)为了jj = 1:numstocks k.micode = tradeDataStressTest.micode(JJ);k.midate = ii;o.mi(kk)= marketImpact(k,tradeDataStresstest(JJ,:));O.Midollar(KK)=(TradeDataStressTest.Shares(JJ)...* TradeDataStressTest.Price(jj))...* o.MI(kk) /10000 * TradeDataStressTest.FXRate(jj); kk = kk + 1;结尾结尾

Display the first three rows of output data.

o(1:3,:)
ans = Symbol Side Date MI MIDollar ______ ____ _________ _____ ________ 'A' 1.00 736085.00 3.84 384.31 'B' 1.00 736085.00 11.43 14292.24 'C' 1.00 736085.00 32.69 20430.65

输出数据包含这些变量:

  • Stock symbol

  • Side

  • 历史贸易日期

  • 历史市场上的成本在基点

  • 历史市场影响本地美元的价值

检索日常市场影响成本每日代价。确定天数numdays在输出数据中。通过数据循环并概括每天单个股票的市场影响成本。

numdays= length(o.Date)/numStocks; idx = 1;为了i = 1:numdays dailycost.date(i)= o.date(idx);dailycost.dailymicost(i)= sum(o.mi(idx:idx+(numStocks-1)));idx = idx+numstocks;结尾

显示指定日期范围内的每日市场影响成本。该数字展示了市场影响成本如何随着时间而变化。

情节(b.date,b.dailymicost)ylabel({{'Daily Cost',,,,'(bps)'}) 标题('Daily Market-Impact Cost Stress Test') xlabel('日期') gridonxData = linspace(b.Date(1),b.Date(92),11); a = gca; a.XAxis.TickLabels = datestr(xData,'mm/dd/yyyy');A. Xticklabelrotation = 45;

References

[1]基尔,罗伯特。“创建动态的贸易模型:超越黑匣子。”交易杂志。卷。6, Number 4, Fall 2011, pp. 8–15.

[2]基尔,罗伯特。“投资过程中的TCA:概述。”指数投资杂志。卷。2,第1号,2011年夏季,第60-64页。

[3]基尔,罗伯特。The Science of Algorithmic Trading and Portfolio Management。Cambridge, MA: Elsevier/Academic Press, 2013.

[4] Chung,Grace和Robert Kissell。“投资组合优化过程中的交易成本的应用。”交易杂志。卷。11,第2号,2016年春季,第11-20页。

也可以看看

|

Related Topics