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

Этот пример показывает, как оптимизировать стратегию для одной акции путем минимизации торговых издержек с помощью анализа транзакционных издержек от 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);

Создайте объект анализа затрат на транзакцию Kissell Research Group k.

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.

Ссылки

[1] Кисселл, Роберт. «Алгоритмические торговые стратегии». Доктор философии. Дипломная работа. Фордемский университет, май 2006 года.

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

[3] Гланц, Мортон и Роберт Кисселл. Моделирование рисков для нескольких активов. Cambridge, MA: Elsevier/Academic Press, 2013.

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

См. также

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

Похожие темы