В этом примере показано, как провести постторговый анализ с помощью транзакционного анализа затрат от Kissell Research Group. Постторговый анализ включает дефицит реализации, альфа-захват, контрольные затраты, добавленное значение брокера и Z-счет. Для получения дополнительной информации об этих метриках смотрите Определения метрик посттрейдового анализа. Для оценки возвратов и прибыли портфеля можно использовать постторговый анализ. Можно измерить эффективность брокеров и алгоритмов.
Для доступа к коду примера введите edit KRGPostTradeAnalysisExample.m
в командной строке.
Получите данные о влиянии рынка на FTP-сайт Kissell Research Group. Подключитесь к FTP-сайту с помощью ftp
функция с именем пользователя и паролем. Перейдите к MI_Parameters
папка и извлечение данных о влиянии рынка в MI_Encrypted_Parameters.csv
файл. miData
содержит зашифрованную дату влияния на рынок, код и параметры.
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);
Создайте объект анализа затрат на транзакцию Kissell Research Group k
.
k = krg(miData);
Загрузите пример данных PostTradeData
из файла KRGExampleData.mat
, который входит в комплект поставки Datafeed Toolbox™.
load KRGExampleData.mat PostTradeData
Описание примерных данных см. в разделе Наборы данных исследовательской группы Kissell.
Определите компоненты дефицита затрат на реализацию в базисных точках. Компоненты:
Система фиксированных ISFixed
Задержка ISDelayCost
Стоимость выполнения ISExecutionCost
Возможная стоимость ISOpportunityCost
Для получения дополнительной информации о компонентах затрат смотрите Определения метриков постторгового анализа.
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;
Определите общую стоимость дефицита реализации ISCost
.
PostTradeData.ISCost = PostTradeData.ISFixed + ... PostTradeData.ISDelayCost + PostTradeData.ISExecutionCost + ... PostTradeData.ISOpportunityCost;
Определите альфа-захват Alpha_CapturePct
. Разделите реализованную прибыль Alpha_Realized
по потенциальной прибыли 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
Определите контрольные затраты в базисных точках. Здесь базовые цены:
Цена закрытия предыдущего дня PrevClose_Cost
Открытые ценовые Open_Cost
Закройте ценовую Close_Cost
Стоимость прибытия Arrival_Cost
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;
Оценка влияния рынка на miCost
и временные tr
риска затраты.
PostTradeData.Size = PostTradeData.TradedShares ./ PostTradeData.ADV; PostTradeData.Price = PostTradeData.ArrivalPrice; PostTradeData.miCost = marketImpact(k,PostTradeData); PostTradeData.tr = timingRisk(k,PostTradeData);
Определите добавленное значение брокера, используя стоимость прибытия и влияние на рынок.
PostTradeData.ValueAdd = (PostTradeData.Arrival_Cost-PostTradeData.miCost) * -1;
Определите Z-счет с помощью риска добавления значения брокера и определения времени.
PostTradeData.zScore = PostTradeData.ValueAdd./PostTradeData.tr;
Для получения дополнительной информации о предыдущих расчетах обратитесь в исследовательскую группу Kissell.
krg
| marketImpact
| timingRisk