Оптимизируйте торговую торговую стратегию расписания корзины

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

min[(MI+PA)+LambdaTR],

где торговые издержки являются влиянием на рынок MI, ценовая оценка PA, и синхронизирующий риск TR.

Чтобы получить доступ к примеру кода, введите edit KRGTradeOptimizationExample.m в командной строке. В этом примере можно запуститься, этот код с помощью торговли планируют торговую стратегию или процент торговой стратегии объема. Этот пример показывает, что торговля планирует торговую стратегию. Показательная функция определяет оптимальное торговое расписание.

После выполнения кода в этом примере можно представить порядок для выполнения с помощью Bloomberg®, например.

Этот пример требует лицензии Optimization Toolbox™. Для справочной информации см. Обзор Теории Оптимизации (Optimization Toolbox).

Получите параметры влияния на рынок и загрузите данные

Получите данные влияния на рынок от 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,datetime('today'),1,250);

Загрузите данные в качестве примера TradeDataTradeOpt и данные о ковариации CovarianceTradeOpt из файла KRGExampleData.mat, который включен с Datafeed Toolbox™.

load KRGExampleData TradeDataTradeOpt CovarianceTradeOpt

Для описания данных в качестве примера смотрите Наборы данных Kissell Research Group.

Задайте параметры оптимизации

Задайте начальные значения для риска, периодов торговли, стоимости портфеля и ковариационной матрицы. Преобразуйте в проблему только покупки. Установите первоначальное торговое расписание.

% Convert table to array
CovarianceTradeOpt = table2array(CovarianceTradeOpt);

% Use total trading time of 1 day with 13 trading periods 
totalDays = 1;
periodsPerDay = 13;

% Set risk aversion level
Lambda = 0.5;

% Set minimum and maximum percentage of volume
minPOV = 0.00;
maxPOV = 0.60;

% total number of trading periods
totalNumberPeriods = totalDays * periodsPerDay;

% Portfolio Value
PortfolioValue = TradeDataTradeOpt.Price'*TradeDataTradeOpt.Shares;

% Number of stocks
numberStocks = height(TradeDataTradeOpt);

% Covariance matrix is annualized covariance matrix in decimals.
% Convert to ($/Shares)^2 units for the trade period; this matrix is for a
% two-sided portfolio, buys and sells or long and short.
CC = diag(TradeDataTradeOpt.Price) * CovarianceTradeOpt * ...
    diag(TradeDataTradeOpt.Price);        

% Scale to one trading period
CC = CC / periodsPerDay / k.TradeDaysInYear;       

% Convert to buy-only problem (e.g., one-sided problem)
CC = TradeDataTradeOpt.SideIndicator * TradeDataTradeOpt.SideIndicator' .* CC;      

% Convert Alpha_bp from basis points per day to cents/share per period
TradeDataTradeOpt.Alpha_bp = TradeDataTradeOpt.Alpha_bp / 1000 .* ...
    TradeDataTradeOpt.Price / totalNumberPeriods;

% Set the initial trade schedule or POV values
theta0 = rand(numberStocks,1);

Задайте опции оптимизации с помощью optimset функция. Для получения дополнительной информации об этих опциях, смотрите Ссылку Опций Оптимизации (Optimization Toolbox).

optionsold = optimset;
options = optimset(optionsold,'LargeScale','on','GradObj','off', ...
    'DerivativeCheck','off','FinDiffType','central','FinDiffRelStep',1E-12, ...
    'TolFun',10E-5,'TolX',10E-12,'TolCon',10E-12,'TolPCG',10E-12, ...
    'MaxFunEvals',20000,'MaxIter',20000,'DiffMinChange',10E-04);

Задайте нижние и верхние границы долей, проданных на интервал за оптимизацию.

LB = zeros(numberStocks,1);
UB = 100 * ones(numberStocks,1);

Минимизируйте торговые издержки для торговой стратегии

Минимизируйте торговые издержки для торговой стратегии расписания. fmincon находит оптимальное значение для торговой стратегии торговли расписанием на основе значений нижней и верхней границы. Это делает это путем нахождения локального минимума для торговых издержек. Используйте целевую функцию optimizeTradingSchedule. Чтобы получить доступ к коду для этой функции, введите edit KRGTradeOptimizationExample.m.

[theta,fval,exitflag,output] = fmincon(@optimizeTradingSchedule,theta0,[], ...
    [],[],[],LB,UB,[],options,totalNumberPeriods,numberStocks,periodsPerDay, ...
    TradeDataTradeOpt,CC,Lambda,k); 

Проверять ли fmincon найденный локальным минимумом, отобразите причину почему остановленная функция.

exitflag
exitflag =

     1.00

fmincon возвращает 1 когда это находит локальный минимум. Для получения дополнительной информации смотрите exitflag (Optimization Toolbox).

Вычислите доли, чтобы торговать, остаточные доли, ценовая оценка, и синхронизирующий риск. Затем вычислите средний процент уровня объема и торговое время.

numPeriods = 1:totalNumberPeriods;
K_Matrix = repmat(numPeriods,numberStocks,1);
Theta_Matrix = repmat(theta,1,totalNumberPeriods);
Volume_Matrix = repmat(TradeDataTradeOpt.ADV/periodsPerDay,1, ...
    totalNumberPeriods);
TradeDataTradeOpt.VolumeProfile = Volume_Matrix;
Shares_Matrix = repmat(TradeDataTradeOpt.Shares,1,totalNumberPeriods);

% X = Shares to trade in period i
Xpct = (exp(-K_Matrix .* Theta_Matrix) .* (exp(Theta_Matrix)-1)) ./ ...
    (1 - exp(-totalNumberPeriods * Theta_Matrix));
X = repmat(TradeDataTradeOpt.Shares,1,totalNumberPeriods) .* Xpct;
TradeDataTradeOpt.TradeSchedule = X;
  
% R = Residual Shares at beginning of period i
Rpct = (exp(-(K_Matrix-1).*Theta_Matrix) - exp(-totalNumberPeriods.*Theta_Matrix)) ./ ...
    (1-exp(-totalNumberPeriods.*Theta_Matrix));
R = repmat(TradeDataTradeOpt.Shares,1,totalNumberPeriods) .* Rpct;

% Price Appreciations in Dollars
PA = sum(R,2) .* TradeDataTradeOpt.Alpha_bp;
  
% Market Impact in Dollars
MI = marketImpact(k,TradeDataTradeOpt) .* TradeDataTradeOpt.Shares .* ...
    TradeDataTradeOpt.Price ./10000;
  
% Timing Risk in Dollars
TR = sqrt(sum(R.^2,2) .* diag(CC));
TR_bp = TR ./ (TradeDataTradeOpt.Shares .* TradeDataTradeOpt.Price) * 10000;
    
% Avg POV Rate
kTR = ((TR_bp/10000*1./TradeDataTradeOpt.Volatility).^2).*(k.TradeDaysInYear*3 ./ ...
    (TradeDataTradeOpt.Shares./TradeDataTradeOpt.ADV));
POV = 1./(1+kTR);
POV = max(POV,TradeDataTradeOpt.Shares./(TradeDataTradeOpt.Shares+totalDays .* ...
    TradeDataTradeOpt.ADV));
    
% TradeTime
TradeDataTradeOpt.TradeTime = TradeDataTradeOpt.Shares./TradeDataTradeOpt.ADV .* ...
    (1-POV)./POV; 

Оцените общие торговые издержки с помощью оптимизированной торговой стратегии.

TotMI = sum(MI) / (TradeDataTradeOpt.Shares' * TradeDataTradeOpt.Price) ...
    .* 10000;       % bp
TotPA = sum(PA) / (TradeDataTradeOpt.Shares' * TradeDataTradeOpt.Price) ...
    .* 10000;       % bp
TotTR = sqrt(trace(R'*CC*R)) ./ (TradeDataTradeOpt.Shares' * ...
    TradeDataTradeOpt.Price) * 10000;  

Отобразите общую стоимость влияния на рынок, ценовую оценку, и синхронизирующий риск.

totalcosts = [TotMI TotPA TotTR]
totalcosts =

   38.2902         0   26.5900

Для получения дополнительной информации о предыдущих вычислениях, свяжитесь с Kissell Research Group.

Ссылки

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

[2] Malamut, Роберто. “Методы оптимизации мультипериода для торгового планирования”. Представление на нью-йоркской конференции QWAFAFEW, апрель 2002.

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

Смотрите также

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте