В этом примере показано, как определить дисбаланс между покупкой и продажей с помощью анализа операционных затрат Исследовательской группы Kissell. Дисбаланс - это разница между объемом, инициированным покупкой, и объемом, инициированным продажей, учитывая фактические рыночные условия в день и за указанный торговый период. Положительный дисбаланс указывает на давление покупки в акции, а отрицательный дисбаланс указывает на давление продажи. Индекс затрат помогает инвесторам понять, как среда торговых затрат влияет на поток заказов на рынке. Индекс может быть индексом на основе производительности, таким как S&P 500, который показывает движение рынка и стоимость, или индексом волатильности, который показывает неопределенность рынка.
Величина доли дисбаланса представляет собой значение x, такое, что
),
где
a2⋅σa3⋅Pricea5].
MI - это рыночная стоимость сделки с акциями. Расчетные торговые затраты представляют собой приращение изменения цен акций по отношению к движению цен базового индекса. Объем - это фактический дневной объем запаса в корзине. ADV - это среднесуточный объем акций в корзине. Цена - это цена акции в корзине. Другие переменные в уравнениях:
- Волатильность цен.
- Ценовая чувствительность к потоку заказов.
- Форма размера заказа.
- Форма волатильности.
- Процент формы объемной скорости.
- Форма цены.
b1 - Процентная доля постоянного воздействия на рынок. Постоянное воздействие - это неизбежная стоимость воздействия, возникающая из-за информационного содержания торговли.
- Процентная доля временного воздействия на рынок. Временное воздействие зависит от торговой стратегии. Временное воздействие происходит из-за требований инвестора к ликвидности.
где:
TotalCost - изменение средневзвешенной по объему цены по сравнению с открытой ценой для акций.
Бета - Бета.
IndexCost - изменение средневзвешенной по объему цены по сравнению с открытой ценой для индекса. Индексная стоимость корректирует цену для движения рынка с использованием базового индекса и бета-версии.
В этом примере можно выполнить этот код с использованием текущих или исторических данных. Текущие данные включают цены, начиная с открытого времени и заканчивая текущим временем. В исторических данных используются цены за весь день. В исторических затратах используются рыночные параметры для указанного региона и даты. Поэтому исторические затраты меняются от записи к записи.
Для текущего индекса затрат загружается таблица примеров. TradeDataCurrent из файла KRGExampleData.mat. Для индекса исторических затрат загружается таблица примеров. TradeDataHistorical из файла KRGExampleData.mat. В этом примере вычисляется текущий индекс затрат.
Для вызова кода примера введите edit KRGCostIndexExample.m в командной строке.
После запуска этого кода можно отправить заказ на выполнение, например, с помощью Bloomberg ®.
В этом примере требуется лицензия Optimization Toolbox™. Дополнительные сведения см. в разделе Обзор теории оптимизации (панель инструментов оптимизации).
Извлеките данные о влиянии на рынок с FTP-сайта Kissell Research Group. Подключитесь к FTP-сайту с помощью ftp с именем пользователя и паролем. Перейдите к MI_Parameters и получить данные о влиянии на рынок в MI_Encrypted_Parameters.csv файл. miData содержит зашифрованную дату влияния на рынок, код и параметры.
f = ftp('ftp.kissellresearch.com','username','pwd'); mget(f,'MI_Encrypted_Parameters.csv'); close(f) miData = readtable('MI_Encrypted_Parameters.csv','delimiter', ... ',','ReadRowNames',false,'ReadVariableNames',true);
Создание объекта анализа затрат транзакции Kissell Research Group k. Укажите начальные параметры для даты, кода влияния на рынок и количества торговых дней.
k = krg(miData,datetime('today'),1,250);Загрузка данных примера TradeDataCurrent, который входит в состав Toolbox™ Datafeed. Рассчитайте количество акций в портфеле.
load KRGExampleData.mat TradeDataCurrent TradeData = TradeDataCurrent; numStocks = height(TradeData);
Описание данных примера см. в разделе Наборы данных исследовательской группы Kissell.
Определите максимальное количество итераций функций для оптимизации. Набор 'MaxIterations' до большого значения, так что оптимизация может повторяться много раз для решения системы нелинейных уравнений.
options = optimoptions('fsolve','MaxIterations',4000);
Определите общую стоимость и стоимость бета-версии. Рассчитайте сторону первоначальной оценки влияния на рынок. Определение начального объема x0.
totalCost = TradeData.VWAP ./ TradeData.Open - 1;
indexCost = TradeData.Beta .* ...
(TradeData.IndexVWAP ./ TradeData.IndexOpen - 1);
miCost = totalCost - indexCost;
sideIndicator = sign(miCost);
x0 = 0.5 * TradeData.Volume;
Создайте таблицу, в которой хранятся все выходные данные. Сначала добавьте следующие переменные:
Symbol - Символ запаса
Date - Дата операции
Side - Сторона
TotalVolume - Объем операции
TotalCost - Общая стоимость операции
IndexCost - Индексная стоимость
costIndexTable = table; costIndexTable.Symbol = TradeData.Symbol; costIndexTable.Date = TradeData.Date; costIndexTable.Side = sideIndicator; costIndexTable.TotalVolume = TradeData.Volume; costIndexTable.TotalCost = totalCost; costIndexTable.IndexCost = indexCost;
Использовать for-контур для расчета индекса затрат для каждого запаса в портфеле. Каждая акция может иметь различные коды и даты влияния на рынок. Используйте costIndexExampleEq функция, содержащая нелинейное уравнение для решения. Доступ к коду для costIndexExampleEq функция, введите edit KRGCostIndexExample.m.
Добавьте в выходную таблицу следующие переменные:
Imbalance - Дисбаланс
ImbalancePctADV - Дисбаланс в процентах от среднесуточного объема
ImbalancePctDayVolume - Дисбаланс в процентах от ежедневного объема
BuyVolume - Объем покупки
SellVolume - Объем продаж
MI - Рыночные издержки
ExcessCost - Избыточные затраты
for i = 1:numStocks % Set the MiCode and MiDate of the object for each stock k.MiCode = TradeData.MICode(i); k.MiDate = TradeData.Date(i); % Solve for Shares for each stock that results in the target market % impact cost. % In this example, x is the number of shares (imbalance) that causes % the MI impact cost, the number of shares that result in a market % impact cost of MI. Here use abs(MI) since market-impact % cost is always positive. If the market-impact cost is 0.0050 then % fsolve tries to find the number of shares x so that the market % impact formula returns 0.0050. % Note that fsolve is using the cost in basis points. x = fsolve(@(x) costIndexExampleEq(x,miCost(i),TradeData(i,:),k), ... x0(i),options); % The imbalance must be between 0 and the actual traded volume. x = max(min(x,TradeData.Volume(i)),0); % Recalculate the percentage of volume and shares based on x. TradeData.POV(i) = x/TradeData.Volume(i); TradeData.Shares(i) = x; % Calculate the new cost as a decimal value. mi = marketImpact(k,TradeData(i,:))/10000; % imbalance is the share amount specified as buy or sell by the % sideIndicator. imbalance = sideIndicator(i) * x; % Calculate the buy and sell volumes. % Knowing that: % % Volume = buyVolume + sellVolume; % Imbalance = buyVolume - sellVolume; % % Solve for buyVolume and sellVolume buyVolume = (TradeData.Volume(i) + imbalance) / 2; sellVolume = (TradeData.Volume(i) - imbalance) / 2; % Fill output table costIndexTable.Imbalance(i,1) = imbalance; costIndexTable.ImbalancePctADV(i,1) = imbalance/TradeData.ADV(i); costIndexTable.ImbalancePctDayVolume(i,1) = imbalance/TradeData.Volume(i); costIndexTable.BuyVolume(i,1) = buyVolume; costIndexTable.SellVolume(i,1) = sellVolume; costIndexTable.MI(i,1) = mi * sideIndicator(i); costIndexTable.ExcessCost(i,1) = totalCost(i) - mi - indexCost(i); end
Просмотрите сумму дисбаланса для первого запаса в выходных данных.
costIndexTable.Imbalance(1)
ans = -8.7894e+04
Отрицательная сумма дисбаланса указывает на давление продаж. Решите, покупать, держать или продавать акции этой акции в портфеле.
За подробной информацией о предыдущих расчетах обращайтесь в исследовательскую группу Kissell.
[1] Кисселл, Роберт. Наука алгоритмической торговли и управления портфелем. Кембридж, Массачусетс: Elsevier/Академическая пресса, 2013.
[2] Маламут, Роберто. «Методы многопериодной оптимизации для планирования торговли». Выступление на Нью-Йоркской конференции QWAFAFEW, апрель 2002 года.
[3] Кисселл, Роберт и Мортон Гланц. Оптимальные торговые стратегии. Нью-Йорк, Нью-Йорк: AMACOM, Inc., 2003.
krg | marketImpact | fsolve (Панель инструментов оптимизации) | optimoptions(Панель инструментов оптимизации)