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

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

Смотрите также

|

Похожие темы