В этом примере показано, как оптимизировать стратегию для одной акции путем минимизации торговых затрат с помощью анализа операционных затрат от Исследовательской группы Kissell. Оптимизация сводит к минимуму затраты на торговлю, связанные с торговой стратегией графика торговли и указанным параметром неприятия риска Lambda. Минимизация торговых затрат выражается как
+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.
krg | marketImpact | priceAppreciation | timingRisk | fmincon (Панель инструментов оптимизации) | optimoptions(Панель инструментов оптимизации)