Analyze Trading Execution Results
This example shows how to conduct post-trade analysis using transaction cost analysis from the Kissell Research Group. Post-trade analysis includes implementation shortfall, alpha capture, benchmark costs, broker value add, and Z-Score. For details about these metrics, see Post-Trade Analysis Metrics Definitions. You can use post-trade analysis to evaluate portfolio returns and profits. You can measure performance of brokers and algorithms.
To access the example code, enter edit
                    KRGPostTradeAnalysisExample.m at the command line.
Retrieve Market-Impact Parameters and Load Transaction Data
Retrieve the market-impact data from the Kissell Research Group FTP site.
                    Connect to the FTP site using the ftp function with a user
                    name and password. Navigate to the MI_Parameters folder and
                    retrieve the market-impact data in the
                        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','delimiter', ... ',','ReadRowNames',false,'ReadVariableNames',true);
Create a Kissell Research Group transaction cost analysis object
                        k.
k = krg(miData);
Load the example data PostTradeData from the file
                        KRGExampleData.mat, which is included with the
                        Datafeed Toolbox™.
load KRGExampleData.mat PostTradeData
For a description of the example data, see Interpret Variables in Kissell Research Group Data Sets.
Determine Implementation Shortfall Costs
Determine the components of the implementation shortfall costs in basis points. The components are:
- Fixed cost - ISFixed
- Delay cost - ISDelayCost
- Execution cost - ISExecutionCost
- Opportunity cost - ISOpportunityCost
For details about the cost components, see Post-Trade Analysis Metrics Definitions.
PostTradeData.ISDollars = ... PostTradeData.OrderShares .* PostTradeData.ISDecisionPrice; PostTradeData.ISFixed = ... PostTradeData.ISFixedDollars ./ PostTradeData.ISDollars*10000; PostTradeData.ISDelayCost = ... PostTradeData.OrderShares .* ... (PostTradeData.ISArrivalPrice-PostTradeData.ISDecisionPrice).* ... PostTradeData.SideIndicator ./ PostTradeData.ISDollars*1000; PostTradeData.ISExecutionCost = ... PostTradeData.TradedShares .* ... (PostTradeData.AvgExecPrice-PostTradeData.ISArrivalPrice).* ... PostTradeData.SideIndicator ./ PostTradeData.ISDollars*1000; PostTradeData.ISOpportunityCost = ... (PostTradeData.OrderShares-PostTradeData.TradedShares).* ... (PostTradeData.ISEndPrice-PostTradeData.ISArrivalPrice).* ... PostTradeData.SideIndicator ./ PostTradeData.ISDollars*1000;
Determine the total implementation shortfall cost
                    ISCost.
PostTradeData.ISCost = PostTradeData.ISFixed + ... PostTradeData.ISDelayCost + PostTradeData.ISExecutionCost + ... PostTradeData.ISOpportunityCost;
Determine Profit
Determine the alpha capture Alpha_CapturePct. Divide
                    realized profit Alpha_Realized by potential profit
                        Alpha_TotalPeriod.
PostTradeData.Alpha_Realized = ... (PostTradeData.ISEndPrice-PostTradeData.AvgExecPrice).* ... PostTradeData.TradedShares .* PostTradeData.SideIndicator ./ ... (PostTradeData.TradedShares .* PostTradeData.ISArrivalPrice)*10000; PostTradeData.Alpha_TotalPeriod = ... (PostTradeData.ISEndPrice-PostTradeData.ISArrivalPrice).* ... PostTradeData.TradedShares .* PostTradeData.SideIndicator ./ ... (PostTradeData.TradedShares .* PostTradeData.ISArrivalPrice)*10000; lenAlpha_Realized = length(PostTradeData.Alpha_Realized); PostTradeData.Alpha_CapturePct = zeros(lenAlpha_Realized,1); for ii = 1:lenAlpha_Realized if PostTradeData.Alpha_TotalPeriod(ii) > 0 PostTradeData.Alpha_CapturePct(ii) = ... PostTradeData.Alpha_Realized(ii) ./ ... PostTradeData.Alpha_TotalPeriod(ii); else PostTradeData.Alpha_CapturePct(ii) = ... -(PostTradeData.Alpha_Realized(ii) - ... PostTradeData.Alpha_TotalPeriod(ii)) ./ ... PostTradeData.Alpha_TotalPeriod(ii); end end
Determine Benchmark and Trading Costs
Determine benchmark costs in basis points. Here, the benchmark prices are:
- Close price of the previous day - PrevClose_Cost
- Open price - Open_Cost
- Close price - Close_Cost
- Arrival cost - Arrival_Cost
- Period VWAP - PeriodVWAP_Cost
PostTradeData.PrevClose_Cost = ... (PostTradeData.AvgExecPrice-PostTradeData.PrevClose).* ... PostTradeData.SideIndicator ./ PostTradeData.PrevClose*10000; PostTradeData.Open_Cost = ... (PostTradeData.AvgExecPrice-PostTradeData.Open).* ... PostTradeData.SideIndicator ./ PostTradeData.Open*10000; PostTradeData.Close_Cost = (PostTradeData.AvgExecPrice-PostTradeData.Close).* ... PostTradeData.SideIndicator ./ PostTradeData.Close*10000; PostTradeData.Arrival_Cost = (PostTradeData.AvgExecPrice- ... PostTradeData.ArrivalPrice).* ... PostTradeData.SideIndicator ./ PostTradeData.ArrivalPrice*10000; PostTradeData.PeriodVWAP_Cost = (PostTradeData.AvgExecPrice- ... PostTradeData.PeriodVWAP).* ... PostTradeData.SideIndicator ./ PostTradeData.PeriodVWAP*10000;
Estimate market-impact miCost and timing risk
                        tr costs.
PostTradeData.Size = PostTradeData.TradedShares ./ PostTradeData.ADV; PostTradeData.Price = PostTradeData.ArrivalPrice; PostTradeData.miCost = marketImpact(k,PostTradeData); PostTradeData.tr = timingRisk(k,PostTradeData);
Determine Broker Value Add and Z-Score
Determine the broker value add using the arrival cost and market impact.
PostTradeData.ValueAdd = (PostTradeData.Arrival_Cost-PostTradeData.miCost) * -1;
Determine the Z-Score using the broker value add and timing risk.
PostTradeData.zScore = PostTradeData.ValueAdd./PostTradeData.tr;
For details about the preceding calculations, contact the Kissell Research Group.
See Also
krg | marketImpact | timingRisk