В этом примере показано, как определить наиболее эффективные брокеры по транзакциям с помощью анализа транзакционных издержек от 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);
Создайте объект анализа затрат на транзакцию Kissell Research Group k
. Укажите начальные настройки для даты, кода влияния на рынок и количества торговых дней.
k = krg(miData,datetime('today'),1,250);
Загрузите пример данных TradeData
, Basket
, и BrokerNames
, который входит в комплект поставки Datafeed Toolbox™.
load KRGExampleData.mat TradeData Basket BrokerNames
Описание примерных данных см. в разделе Наборы данных исследовательской группы Kissell.
Выберите торговые категории. Вычислите среднюю стоимость прибытия, рыночную стоимость и добавленное значение брокера для каждого брокера.
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
over-выполняет во время 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.
[1] Кисселл, Роберт. Наука об алгоритмической торговле и управлении портфелем. Cambridge, MA: Elsevier/Academic Press, 2013.
[2] Маламут, Роберто. «Многопериодические методы оптимизации для планирования торговли». Презентация на Нью-Йоркской конференции КВАФАФЬЮ, апрель 2002 года.
[3] Кисселл, Роберт и Мортон Гланц. Оптимальные торговые стратегии. Нью-Йорк, Нью-Йорк: AMACOM, Inc., 2003.