Определите покупают - продают неустойчивость Используя индекс стоимости

В этом примере показано, как определить, покупают - продают неустойчивость с помощью анализа операционных издержек от Kissell Research Group. Неустойчивость является различием между инициируемым в покупку, и продайте - инициировал объем, данный фактическое состояние рынка в день и по заданному периоду торговли. Положительная неустойчивость указывает на давление покупки в запасе, и отрицательная неустойчивость указывает на наплыв предложений на продажу. Индекс стоимости помогает инвесторам изучить, как среда торговых издержек влияет на поток порядка на рынке. Индекс может быть основанным на эффективности индексом, таким как S&P 500, который показывает движение рынка и значение или индекс волатильности, который показывает неопределенность рынка.

Количество доли неустойчивости является значением x, таким образом что

0=|MICost|10000MI(x),

где

MI(x)=[b1(xVolume)a4+(1b1)][a1(xADV)a2σa3Pricea5].

MI является влиянием на рынок, стоившим за транзакцию запаса. Предполагаемые торговые издержки представляют инкрементную динамику цен запаса относительно базовой динамики цен индекса. Volume является фактическим ежедневным объемом запаса в корзине. ADV является среднесуточным объемом запаса в корзине. Price является ценой запаса в корзине. Другие переменные в уравнениях:

  • σ — Волатильность цен.

  • a1 — Ценовая чувствительность, чтобы заказать поток.

  • a2 — Закажите форму размера.

  • a3 — Форма энергозависимости.

  • a4 — Процент формы уровня объема.

  • a5 — Ценовая форма.

  • 1b1 — Процент постоянного влияния на рынок. Постоянный удар является неизбежной стоимостью удара, которая происходит из-за информационного содержимого торговли.

  • b1 — Процент временного влияния на рынок. Временный удар зависит от торговой стратегии. Временный удар происходит из-за требований ликвидности инвестора.

  • MICost=TotalCostBetaIndexCost, где:

    • TotalCost — Изменитесь в средневзвешенной объемом цене по сравнению с ценой открытия за запасы.

    • \beta \beta.

    • IndexCost — Изменитесь в средневзвешенной объемом цене по сравнению с ценой открытия за индекс. Стоимость индекса настраивает цену за движение рынка с помощью базового индекса и беты.

В этом примере можно запустить этот код с помощью текущих или исторических данных. Текущие данные включают цены, запускающиеся с открытого времени до текущего времени. Исторические данные используют цены за целый день. Исторические затраты используют параметры влияния на рынок для заданной области и даты. Поэтому исторические затраты изменяются от записи до записи.

Для текущего индекса стоимости вы загружаете таблицу TradeDataCurrent в качестве примера из файла KRGExampleData.mat. Для исторического индекса стоимости вы загружаете таблицу TradeDataHistorical в качестве примера из файла KRGExampleData.mat. Этот пример вычисляет текущий индекс стоимости.

Чтобы получить доступ к примеру кода, введите edit KRGCostIndexExample.m в командной строке.

После выполнения этого кода можно представить порядок для использования выполнения Bloomberg®, например.

Этот пример требует лицензии Optimization Toolbox™. Для справочной информации см. Обзор Теории Оптимизации (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);

Создайте аналитический объект k операционных издержек Kissell Research Group. Задайте начальные установки для даты, кода влияния на рынок и номера торговых дней.

k = krg(miData,datetime('today'),1,250);

Загрузите данные в качестве примера TradeDataCurrent, который включен с Datafeed Toolbox™. Вычислите количество запасов в портфеле.

load KRGExampleData.mat TradeDataCurrent
TradeData = TradeDataCurrent;

numStocks = height(TradeData);

Для описания данных в качестве примера смотрите Наборы данных Kissell Research Group.

Задайте параметры оптимизации

Задайте максимальное количество функциональных итераций для оптимизации. Установите '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 Research Group.

Ссылки

[1] Kissell, Роберт. Наука об алгоритмической торговле и управлении портфелем. Кембридж, MA: нажатие Elsevier/Academic, 2013.

[2] Malamut, Роберто. “Методы оптимизации мультипериода для торгового планирования”. Представление на нью-йоркской конференции QWAFAFEW, апрель 2002.

[3] Kissell, Роберт и Мортон Глэнц. Оптимальные торговые стратегии. Нью-Йорк, Нью-Йорк: AMACOM, Inc., 2003.

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

| | (Optimization Toolbox) | (Optimization Toolbox)

Похожие темы