exponenta event banner

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

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

min [(MI + PA) +Lambda⋅TR],

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

В этом примере требуется лицензия 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(Панель инструментов оптимизации).

Просмотр оптимизированной торговой стратегии 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] Кисселл, Роберт. Наука алгоритмической торговли и управления портфелем. Кембридж, Массачусетс: Elsevier/Академическая пресса, 2013.

[3] Гланц, Мортон и Роберт Кисселл. Моделирование рисков для нескольких активов. Кембридж, Массачусетс: Elsevier/Академическая пресса, 2013.

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

См. также

| | | | (Панель инструментов оптимизации) | (Панель инструментов оптимизации)

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