Оптимизируйте торговую торговую стратегию расписания

В этом примере показано, как оптимизировать стратегию одного запаса путем минимизации торговых издержек с помощью анализа операционных издержек от Kissell Research Group. Оптимизация минимизирует торговые издержки, сопоставленные с торговой торговой стратегией расписания и заданным параметром нерасположенности к риску Lambda. Минимизация торговых издержек описывается как

min[(MI+PA)+LambdaTR],

где торговые издержки являются влиянием на рынок MI, ценовая оценка PA, и синхронизирующий риск TR. Для получения дополнительной информации смотрите marketImpact, priceAppreciation, и timingRisk.

Этот пример требует лицензии Optimization Toolbox™. Для справочной информации см. Обзор Теории Оптимизации (Optimization Toolbox).

Здесь, можно оптимизировать торговую стратегию торговли расписанием. Оптимизация находит локальный минимум для этого выражения. Для способов искать глобальный минимум, смотрите Локальный по сравнению с Глобальными оптимумами (Optimization Toolbox). Чтобы оптимизировать процент объема и торговых стратегий времени, смотрите, Оптимизируют Процент Торговой стратегии Объема и Оптимизируют Торговую Торговую стратегию Времени.

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

Получите параметры влияния на рынок

Получите данные влияния на рынок от 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);

Создайте одни данные о запасе

Структура tradeData содержит данные для одного запаса. Используйте структуру или таблицу, чтобы задать эти данные. Поля:

  • Количество долей

  • Среднесуточный объем

  • Энергозависимость

  • Курс акций

  • Альфа-оценка

tradeData.Shares = 100000;
tradeData.ADV = 1000000;
tradeData.Volatility = 0.25;
tradeData.Price = 35;
tradeData.Alpha_bp = 50;

Задайте количество отраслей и объема на торговлю для первоначальной стратегии. Поля VolumeProfile и TradeSchedule задайте первоначальную торговую стратегию торговли расписанием.

numIntervals = 26;
tradeData.VolumeProfile = ones(1,numIntervals) * ...
    tradeData.ADV/numIntervals;
tradeData.TradeSchedule = ones(1,numIntervals) .* ...
    (tradeData.Shares./numIntervals);

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

Задайте уровень нерасположенности к риску Lambda. Установите Lambda от 0 до Inf.

Lambda = 1;

Задайте более низкий LB и верхний UB границы долей, проданных на интервал за оптимизацию.

LB = zeros(1,numIntervals);
UB = ones(1,numIntervals) .* tradeData.Shares;    

Задайте ограничения Aeq и Beq обозначить, что доли, проданные торговым расписанием, должны совпадать с общим количеством долей.

Aeq = ones(1,numIntervals);
Beq = tradeData.Shares;

Задайте максимальное количество вычислений функции и итераций для оптимизации. Установите 'MaxFunEvals' и 'MaxIter' к большим значениям так, чтобы оптимизация могла выполнить итерации много раз, чтобы найти локальный минимум.

options = optimoptions('fmincon','MaxFunEvals',100000,'MaxIter',100000);

Задайте указатель на функцию fun для целевой функции. Чтобы получить доступ к коду для этой функции, введите edit krgSingleStockOptimizer.m.

fun = @(tradeschedule)krgSingleStockOptimizer(tradeschedule,k, ...
    tradeData,Lambda);

Минимизируйте торговые издержки для торговой стратегии

Минимизируйте торговые издержки для торговой стратегии торговли расписанием. fmincon находит оптимальное значение для торговой стратегии торговли расписанием на основе значений нижней и верхней границы. Это делает это путем нахождения локального минимума для торговых издержек.

[tradeData.TradeSchedule,totalcost,exitflag] = fmincon(fun, ...
    tradeData.TradeSchedule,[],[],Aeq,Beq,LB,UB,[],options);

Проверять ли fmincon найденный локальным минимумом, отобразите причину почему остановленная функция.

exitflag
exitflag =

     1.00

fmincon возвращает 1 когда это находит локальный минимум. Для получения дополнительной информации смотрите exitflag (Optimization Toolbox).

Отобразите оптимизированную торговую стратегию tradeData.TradeSchedule.

tradeData.TradeSchedule
ans =

  Columns 1 through 5

      35563.33      18220.14      11688.59       8256.81       6057.39
  
  ...

Оцените торговые издержки для оптимизированной стратегии

Оцените торговые издержки tradeScheduleCosts использование оптимизированной торговой стратегии.

mi = marketImpact(k,tradeData);
pa = priceAppreciation(k,tradeData);
tr = timingRisk(k,tradeData);
tradeScheduleCosts = [totalcost mi pa tr];

Отобразите торговые издержки.

tradeScheduleCosts
tradeScheduleCosts =

         97.32         47.66          6.75         42.91

Торговые издержки:

  • Общая стоимость

  • Влияние на рынок

  • Ценовая оценка

  • Синхронизация риска

Для получения дополнительной информации о предыдущих вычислениях, свяжитесь с Kissell Research Group.

Ссылки

[1] Kissell, Роберт. “Алгоритмические торговые стратегии”. Ph.D. Тезис. Фордхемский университет, май 2006.

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

[3] Glantz, Мортон и Роберт Кисселл. Моделирование риска мультиактива. Кембридж, MA: нажатие Elsevier/Academic, 2013.

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

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

| | | | (Optimization Toolbox) | (Optimization Toolbox)

Похожие темы