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