Этот пример показывает, как оптимизировать стратегию для одной акции путем минимизации торговых издержек с помощью анализа транзакционных издержек от 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);
Создайте объект анализа затрат на транзакцию 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.
krg
| marketImpact
| priceAppreciation
| timingRisk
| fmincon
(Optimization Toolbox) | optimoptions
(Optimization Toolbox)