这个例子展示了如何使用Kissell Research Group的交易成本分析来确定各个交易中表现最好的代理。你根据经纪人增值和到达成本对经纪人进行排名,然后确定哪些经纪人在哪种市场条件和交易特征下表现最好。正的增加值表明,在实际市场条件和交易特征下,经纪人的业绩超出预期,从而节省资金。负的增加值表明经纪人没有达到预期的业绩,这将导致基金的增量成本。
在本例中,通过比较到达成本和估计交易成本,您可以发现哪些经纪人表现好,哪些经纪人表现差。一个到达成本低于估计交易成本的经纪人表现优异,这使得基金节省资金。如果经纪人的到达成本大于估计的交易成本,则其表现不佳,这将导致基金产生增量成本。
本例还展示了如何根据经纪人估算成本,这需要为每个经纪人定制市场影响参数。
您可以使用类似于本例中的步骤对交易场所和算法进行排名。
要访问示例代码,请输入编辑KRGTradePerformanceRankingExample.m
在命令行。
在执行本例中的代码之后,您可以使用Bloomberg提交执行订单®例如。
从Kissell Research Group FTP站点检索市场影响数据。连接到FTP站点ftp
函数使用用户名和密码。导航到MI_Parameters
文件夹中带有经纪人代码的市场影响数据并检索MI_Broker.csv
文件。miData
包含加密的市场影响日期、代码和参数。
F = ftp(“ftp.kissellresearch.com”,“用户名”,“pwd”);mget (f,“MI_Broker.csv”);close(f) miData = readtable(“MI_Broker.csv”,“分隔符”,”、“,...“ReadRowNames”假的,“ReadVariableNames”,真正的);
创建Kissell Research Group交易成本分析对象k
.指定日期、市场影响代码和交易天数的初始设置。
k = krg(miData,datetime(“今天”), 1250);
加载示例数据TradeData
,篮子
,BrokerNames
,这是包括在交易工具箱™。
负载KRGExampleData.matTradeData篮子BrokerNames
有关示例数据的描述,请参见Kissell研究组数据集.
选择贸易类别。计算每个经纪人的平均到达成本、市场影响成本和经纪人增值。
TradeData。TradeSize = TradeData。Shares ./ TradeData.ADV;TradeData。ArrivalCost =贸易数据。SideIndicator。*...(TradeData。AvgExecPrice ./ tradedata . arrivalprice . 1) * 10000;TradeData。MI = marketImpact(k,TradeData);TradeData。ValueAdd = TradeData。MI - TradeData.ArrivalCost;
检索代理名称和代理数量。预分配输出数据变量。
uniqueBrokers = unique(TradeData.Broker);numBrokers = length(uniqueBrokers);avgCost = NaN(numBrokers,1);avgMI = NaN(numBrokers,1);avgValueAdd = NaN(numBrokers,1);
计算经纪人排名使用交易规模在平均每日交易量(ADV)的5%至10%之间。计算平均到货成本、平均市场影响成本和平均经纪人增值。
indBroker =(贸易数据。TradeSize >= 0.05) &(贸易数据。TradeSize <= 0.10);如果any(indBroker) TD = TradeData(indBroker,:);为i = 1:numBrokers j = strcmp(TD.Broker,uniqueBrokers(i));如果any(j) avgCost(i) = mean(TD.ArrivalCost(j));avgMI(i) = mean(TD.MI(j));avgValueAdd(i) = mean(TD.ValueAdd(j));结束结束结束获得有效的平均成本值(非NaN)indAvgCost = ~isnan(avgCost);
创建一个表来存储代理排名。按平均成本排序。
BrokerRankings = table(uniqueBrokers(indAvgCost),(1:sum(indAvgCost))',...avgCost (indAvgCost) avgMI (indAvgCost) avgValueAdd (indAvgCost),...“VariableNames”, {“代理”,“排名”,“AvgArrivalCost”,“AvgMI”,“AvgValueAdd”});BrokerRankings = sortrows(BrokerRankings,-5);BrokerRankings。Rank = (1:sum(indAvgCost))';重置等级
使用柱状图比较平均经纪人增值基点。
栏(BrokerRankings.AvgValueAdd)集(gca,“XTickLabel”BrokerRankings.Broker) ylabel (平均增加值(bp))标题(“经纪人平均增值”网格)
代理Broker2
over-performs而Broker3
跨事务执行不佳。决定使用Broker2
用于将来的交易。
使用指定的订单或交易列表估计每个经纪人的交易成本。
从交易列表表中获取订单数numOrders = size(Basket.Symbols,1);为每个经纪人计算每个订单的交易前成本BrokerPreTrade =零(numOrders,numBrokers);为i = 1:numBrokers经纪人的市场影响码对应于市场中的miccode%的影响数据,例如Broker1 = 1。k.MiCode = i;计算每个经纪人的市场影响成本。BrokerPreTrade(:,i) = marketImpact(k,Basket);结束将输出转换为使用作为行名的符号的表。BrokerPreTrade = array2table(BrokerPreTrade,“VariableNames”,...BrokerNames。经纪人,“RowNames”, Basket.Symbols);
一种股票美国广播公司
,用柱状图比较每家经纪商的市场影响成本(以基点为单位)。
为给定股票绘制最佳经纪人:栏(table2array (BrokerPreTrade(1)))集(gca,“XTickLabel”BrokerNames.Broker) ylabel (“市场影响成本(bp)”)标题(“股票经纪人的市场影响成本”...BrokerPreTrade.Properties.RowNames{1}])网格
代理Broker8
具有最高的市场影响成本和Broker1
有最低的一个。决定使用Broker1
使用股票执行交易美国广播公司
.
有关上述计算的详细信息,请联系Kissell Research Group。
罗伯特,基塞尔。算法交易和投资组合管理的科学.马萨诸塞州剑桥:爱思唯尔/学术出版社,2013年。
马拉玛特,罗伯托。交易调度的多周期优化技术2002年4月,在QWAFAFEW纽约会议上的演讲。
基塞尔,罗伯特和莫顿·格兰茨。最优交易策略.纽约,纽约州:AMACOM, Inc., 2003。