В этом примере показано, как определить лучших брокеров выполнения через транзакции с помощью анализа операционных издержек от Kissell Research Group. Вы занимаете место, брокеры на основе значения брокера добавляют и стоимость прибытия, и затем определяют, который брокеры выполняют лучше всего в который состояние рынка и торговые характеристики. Положительное значение добавляет, указывает, что брокер превышает ожидания эффективности, данные фактическое состояние рынка и торговые характеристики, который приводит к сбережениям фонда. Отрицательная величина добавляет, указывает, что брокер не оправдывал надежды эффективности, которые приводят к инкрементной стоимости для фонда.
В этом примере вы находите, от каких брокеров сверх - или отстают путем сравнения затрат на прибытие и оцененных торговых издержек. Брокер со стоимостью прибытия, которая меньше предполагаемых торговых издержек, сверхвыполняет, который заставляет фонд экономить деньги. Брокер со стоимостью прибытия, которая больше предполагаемых результатов ниже ожидаемого торговых издержек, который заставляет фонд нести инкрементные расходы.
Этот пример также показывает, как оценить затраты брокером, который требует пользовательских параметров влияния на рынок для каждого брокера.
Можно использовать подобные шаги, как в этом примере, чтобы оценить торговые места проведения и алгоритмы.
Чтобы получить доступ к примеру кода, введите edit KRGTradePerformanceRankingExample.m
в командной строке.
После выполнения кода в этом примере можно представить порядок для использования выполнения Bloomberg®, например.
Получите данные влияния на рынок от FTP-сайта Kissell Research Group. Соединитесь с FTP-сайтом с помощью ftp
функция с именем пользователя и паролем. Перейдите к MI_Parameters
папка и получает данные влияния на рынок с кодами брокера в MI_Broker.csv
файл. miData
содержит зашифрованную дату влияния на рынок, код и параметры.
f = ftp('ftp.kissellresearch.com','username','pwd'); mget(f,'MI_Broker.csv'); close(f) miData = readtable('MI_Broker.csv','delimiter',',', ... 'ReadRowNames',false,'ReadVariableNames',true);
Создайте аналитический объект k
операционных издержек Kissell Research Group. Задайте начальные установки для даты, кода влияния на рынок и номера торговых дней.
k = krg(miData,datetime('today'),1,250);
Загрузите данные в качестве примера TradeData
, Basket
, и BrokerNames
, который включен с Datafeed Toolbox™.
load KRGExampleData.mat TradeData Basket BrokerNames
Для описания данных в качестве примера смотрите Наборы данных Kissell Research Group.
Выберите торговые категории. Вычислите среднюю стоимость прибытия, стоимость влияния на рынок, и значение брокера добавляет для каждого брокера.
TradeData.TradeSize = TradeData.Shares ./ TradeData.ADV;
TradeData.ArrivalCost = TradeData.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);
Вычислите брокера, оценивающего использование суммы сделки между 5% и 10% среднесуточного объема (ADV). Вычислите среднюю стоимость прибытия, среднюю стоимость влияния на рынок, и среднее значение брокера добавляет.
indBroker = (TradeData.TradeSize >= 0.05) & (TradeData.TradeSize <= 0.10); if any(indBroker) TD = TradeData(indBroker,:); for i = 1:numBrokers j = strcmp(TD.Broker,uniqueBrokers(i)); if any(j) avgCost(i) = mean(TD.ArrivalCost(j)); avgMI(i) = mean(TD.MI(j)); avgValueAdd(i) = mean(TD.ValueAdd(j)); end end end % Get valid average cost values (non NaN's) indAvgCost = ~isnan(avgCost);
Составьте таблицу, чтобы сохранить брокера, занимающего место. Сортировка рейтинга средней стоимостью.
BrokerRankings = table(uniqueBrokers(indAvgCost),(1:sum(indAvgCost))', ... avgCost(indAvgCost),avgMI(indAvgCost),avgValueAdd(indAvgCost), ... 'VariableNames',{'Broker','Rank','AvgArrivalCost','AvgMI','AvgValueAdd'}); BrokerRankings = sortrows(BrokerRankings,-5); BrokerRankings.Rank = (1:sum(indAvgCost))'; % Reset rank
Сравните среднее значение брокера добавляют в пунктах с помощью столбчатого графика.
bar(BrokerRankings.AvgValueAdd) set(gca,'XTickLabel',BrokerRankings.Broker) ylabel('Average Value Add (bp)') title('Average Value Add by Broker') grid
Брокер Broker2
сверхвыполняет в то время как Broker3
результаты ниже ожидаемого через транзакции. Решите использовать Broker2
для будущих транзакций.
Оцените торговые издержки для каждого брокера, использующего заданный порядок или список торговли.
% Get the number of orders from the trade list table numOrders = size(Basket.Symbols,1); % Calculate pre-trade cost for each broker for each order BrokerPreTrade = zeros(numOrders,numBrokers); for i = 1:numBrokers % Market-impact code for broker corresponds to the MICode in the market % impact data, for example, Broker1 = 1. k.MiCode = i; % Calculate market-impact cost for each broker BrokerPreTrade(:,i) = marketImpact(k,Basket); end % Convert output to a table with the symbols used as the row names. BrokerPreTrade = array2table(BrokerPreTrade,'VariableNames', ... BrokerNames.Broker,'RowNames',Basket.Symbols);
Для одного запаса ABC
, сравните стоимость влияния на рынок в пунктах для каждого брокера, использующего столбчатый график.
% Plot best broker for given stock bar(table2array(BrokerPreTrade(1,:))) set(gca,'XTickLabel',BrokerNames.Broker) ylabel('Market-Impact Cost (bp)') title(['Market-Impact Cost by Broker for Symbol ' ... BrokerPreTrade.Properties.RowNames{1}]) grid
Брокер Broker8
стоили самого высокого влияния на рынок и Broker1
имеет самый низкий. Решите использовать Broker1
для выполнения транзакции с помощью запаса ABC
.
Для получения дополнительной информации о предыдущих вычислениях, свяжитесь с Kissell Research Group.
[1] Kissell, Роберт. Наука об алгоритмической торговле и управлении портфелем. Кембридж, MA: нажатие Elsevier/Academic, 2013.
[2] Malamut, Роберто. “Методы оптимизации мультипериода для торгового планирования”. Представление на нью-йоркской конференции QWAFAFEW, апрель 2002.
[3] Kissell, Роберт и Мортон Глэнц. Оптимальные торговые стратегии. Нью-Йорк, Нью-Йорк: AMACOM, Inc., 2003.