Оцените эффективность брокера

В этом примере показано, как определить наиболее эффективные брокеры по транзакциям с помощью анализа транзакционных издержек от 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);

Оцените брокеры по среднему значению брокера Add

Рассчитать рейтинг брокеров можно используя размер транзакции от 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.

См. также

|

Похожие темы