exponenta event banner

Производительность брокера ранга

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

См. также

|

Связанные темы