В этом примере показано, как определить наиболее эффективных брокеров по транзакциям с помощью анализа затрат на транзакции от исследовательской группы Kissell. Вы ранжируете брокеров на основе добавленной стоимости брокера и стоимости поступления, а затем определяете, какие брокеры работают лучше всего, в каких рыночных условиях и торговых характеристиках. Положительная добавленная стоимость указывает на то, что брокер превышает ожидания в отношении эффективности с учетом фактических рыночных условий и торговых характеристик, что приводит к экономии средств. Отрицательная добавленная стоимость указывает на то, что брокер не оправдал ожиданий в отношении эффективности, что приводит к дополнительным расходам для фонда.
В этом примере можно определить, какие брокеры выполняют сверх- или недоработку, сравнивая затраты на прибытие и предполагаемые торговые затраты. Брокер со стоимостью прибытия, которая меньше, чем предполагаемая стоимость торгов, перевыполняет, что заставляет фонд экономить деньги. Брокер со стоимостью прибытия, которая больше, чем предполагаемая стоимость торговли, недоработанной, что приводит к тому, что фонд несет дополнительные расходы.
В этом примере также показано, как оценить затраты брокера, что требует пользовательских параметров влияния на рынок для каждого брокера.
Для ранжирования торговых площадок и алгоритмов можно использовать шаги, аналогичные приведенным в этом примере.
Для вызова кода примера введите 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, который входит в состав Toolbox™ Datafeed.
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 перевыполняет во время 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] Кисселл, Роберт. Наука алгоритмической торговли и управления портфелем. Кембридж, Массачусетс: Elsevier/Академическая пресса, 2013.
[2] Маламут, Роберто. «Методы многопериодной оптимизации для планирования торговли». Выступление на Нью-Йоркской конференции QWAFAFEW, апрель 2002 года.
[3] Кисселл, Роберт и Мортон Гланц. Оптимальные торговые стратегии. Нью-Йорк, Нью-Йорк: AMACOM, Inc., 2003.