Этот пример использует Байесовую оптимизацию, чтобы настроить гиперпараметры в алгоритмической торговой модели, контролируемой к концу возврата. Это - часть серии связанных примеров на машинном обучении для статистического арбитража (см. Приложения Машинного обучения).
Загрузите LOBVars.mat
, предварительно обработанный набор данных LOB безопасности NASDAQ INTC.
load LOBVars
Набор данных содержит следующую информацию для каждого порядка: время поступления t
(секунды с полуночи), запрашиваемая цена уровня 1 MOAsk
, уровень 1, предлагающий цену MOBid
, недорогой S
, и неустойчивость индексирует I
.
Этот пример включает несколько функций поддержки, которые хранятся в matlabroot/examples/finance/data/LOBSupportingFiles
. Чтобы просмотреть их, измените свою рабочую папку.
cd(fullfile(matlabroot,'examples','finance','data','LOBSupportingFiles'));
Торговый матричный Q
содержит вероятности будущей динамики цен, учитывая текущие и предыдущие состояния rho
из книги лимитного приказа (LOB) неустойчивость индексируют I
и последнее наблюдаемое направление в ценах DS
.
Просмотрите функцию поддержки tradeOnQ.m
, который реализует простую торговую стратегию на основе шаблона в Q
.
function cash = tradeOnQ(Data,Q,n,N) % Reference: Machine Learning for Statistical Arbitrage % Part II: Feature Engineering and Model Development % Data t = Data.t; MOBid = Data.MOBid; MOAsk = Data.MOAsk; % States [rho,DS] = getStates(Data,n,N); % Start of trading cash = 0; assets = 0; % Active trading T = length(t); for tt = 2:T-N % Trading ticks % Get Q row, column indices of current state row = rho(tt-1)+n*(DS(tt-1)+1); downColumn = rho(tt); upColumn = rho(tt) + 2*n; % If predicting downward price move if Q(row,downColumn) > 0.5 cash = cash + MOBid(tt); % Sell assets = assets - 1; % If predicting upward price move elseif Q(row,upColumn) > 0.5 cash = cash - MOAsk(tt); % Buy assets = assets + 1; end end % End of trading (liquidate position) if assets > 0 cash = cash + assets*MOBid(T); % Sell off elseif assets < 0 cash = cash + assets*MOAsk(T); % Buy back end
Алгоритм использует предсказания от Q
принять решения относительно торговли в каждой метке деления. Это иллюстрирует общий механизм любого оптимизированного алгоритма машинного обучения.
Эта стратегия стремится получить прибыль от ожидаемых изменений цен с помощью порядков рынка (наилучшее предложение при касании) одной доли в каждой метке деления, если арбитражная возможность возникает. Стратегия может быть увеличена к большим объемам торгов. Используя условные вероятности, полученные из Q
, tradeOnQ
функционируйте принимает одни из этих мер:
Выполняет покупку, если вероятность восходящего изменения форвардной цены больше 0.5.
Выполняет продавание, если вероятность нисходящего изменения форвардной цены больше 0.5.
В конце торгового дня функция ликвидирует положение при касании.
Стратегия требует Data
с временами метки деления t
и соответствующий рынок заказывает разнице между курсами продавца и покупателя MOBid
и MOAsk
, соответственно. В режиме реального времени торговля, данные обеспечиваются обменом. Этот пример оценивает стратегию путем деления исторической выборки на обучение подвыборки валидации и (калибровка). Подвыборка валидации служит прокси для торговых данных в реальном времени. Стратегия зависит от Q
, сама торговая матрица, которую вы оцениваете после того, как вы сделаете много выбора гиперпараметра. Входные параметры n
и N
гиперпараметры должны настроиться, когда вы оптимизируете стратегию.
Непрерывное время модель Маркова и получившийся торговый матричный Q
зависьте от значений четырех гиперпараметров:
lambda
— Весовой коэффициент использовался для расчета индекса неустойчивости I
dI
— Количество обратных меток деления раньше составляло в среднем I
во время сглаживания
numBins
— Количество интервалов раньше делило сглаживавший I
для дискретизации
dS
— Количество прямых меток деления раньше преобразовывало цены S
к дискретному DS
В общем случае все четыре гиперпараметра являются настраиваемыми. Однако, чтобы упростить визуализацию, пример сокращает количество размерностей путем настройки только numBins
и N
. Пример:
Фиксирует lambda
Листы numBins
= n
, где n
свободно варьироваться
Компенсирует длины окна dI
= dS
= N
, где N
свободно варьироваться
Ограничения не значительно влияют на результаты оптимизации. Алгоритм оптимизации ищет по двумерному пространству параметров (n
N
) для настройки, дающей к максимальному возврату на торговле.
Машинное обучение требует подвыборки, на которой можно оценить Q
и другая подвыборка, на которой можно оценить выборы гиперпараметра.
Задайте точку останова, чтобы разделить данные на подвыборки обучения и валидации. Точка останова влияет на оценку целевой функции и является по существу другим гиперпараметром. Однако, потому что вы не настраиваете точку останова, это является внешним к процессу оптимизации.
bp = round((0.80)*length(t)); % Use 80% of data for training
Соберите данные в расписании, чтобы передать tradeOnQ
.
Data = timetable(t,S,I,MOBid,MOAsk); TData = Data(1:bp,:); % Training data VData = Data(bp+1:end,:); % Validation data
Перекрестная проверка описывает множество методов, чтобы оценить, как обучение заканчивается (здесь, расчет Q
) сделайте вывод, с прогнозирующей надежностью, к независимым данным о валидации (здесь, прибыльная торговля). Цель перекрестной проверки состоит в том, чтобы отметить проблемы в учебных результатах, как смещение и сверхподбор кривой. В контексте торговой стратегии сверхподбор кривой относится к временной зависимости или нестационарности, Q
. Как Q
изменения в зависимости от времени, это становится менее эффективным при предсказании будущей динамики цен. Ключевой диагностической проблемой является степень к который Q
изменения, и в какой уровень, по ограниченному торговому горизонту.
С данными об обучении и валидации на месте, задайте гиперпараметры и сравните Q
в этих двух подвыборках. Функция поддержки makeQ.m
обеспечивает шаги для того, чтобы сделать Q
.
% Set specific hyperparameters n = 3; % Number of bins for I N = 20; % Window lengths % Compare Qs QT = makeQ(TData,n,N); QV = makeQ(VData,n,N); QTVDiff = QT - QV
QTVDiff = 9×9
0.0070 0.0182 0.1198 -0.0103 -0.0175 -0.0348 0.0034 -0.0007 -0.0851
-0.0009 0.0176 0.2535 -0.0010 -0.0233 -0.2430 0.0019 0.0058 -0.0106
0.0184 0.0948 0.0835 -0.0195 -0.1021 -0.1004 0.0011 0.0073 0.0168
0.0462 0.0180 0.0254 -0.0512 -0.0172 0.0417 0.0050 -0.0009 -0.0671
0.0543 0.0089 0.0219 -0.0556 -0.0169 -0.0331 0.0013 0.0080 0.0112
0.1037 0.0221 0.0184 -0.1043 -0.0401 -0.0479 0.0006 0.0180 0.0295
0.0266 0.0066 0.0054 -0.0821 -0.0143 -0.0116 0.0555 0.0077 0.0062
0.0615 0.0050 0.0060 -0.0189 -0.0207 -0.0262 -0.0426 0.0157 0.0203
0.0735 0.0103 0.0090 -0.0788 -0.1216 -0.0453 0.0053 0.1113 0.0362
Различия между QT
и QV
кажитесь незначительными, несмотря на то, что они варьируются на основе их положения по матрице. Идентифицируйте торговую неэффективность, которая следует из индексов (состояния рынка), где одна матрица дает торговый сигнал (значение вероятности> 0.5), и другой не делает.
Inhomogeneity = (QT > 0.5 & QV < 0.5 ) | (QT < 0.5 & QV > 0.5 )
Inhomogeneity = 9x9 logical array
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Никакая значительная неоднородность не появляется в данных с данными установками гиперпараметров.
Серьезность продолжения предположения однородности не известна априорно и может появиться только из более всестороннего backtesting. Статистические тесты доступны, как описано в [4] и [5], например. Во время торговли в реальном времени, прокручивающегося расчета Q
по запаздывающим обучающим данным подходящего размера может предоставить самые надежные сигналы. Такой подход подтверждает свойственную нестационарность на рынке.
Машинное обучение относится к общему подходу эффективного выполнения задачи (например, торгуя) автоматизированным способом путем выявления закономерности (например, вычисляя Q
) и создание выводов на основе доступных данных. Часто, данные являются динамическими и достаточно большими, чтобы потребовать специализированных вычислительных методов. Процесс оценки — настраивающиеся гиперпараметры, чтобы описать данные и прямую эффективность задачи — продолжаются.
В дополнение к проблемам работы с большими данными процесс оценки объединяет, иногда черный ящик, целевые функции также сложны. Целевые функции контролируют оценку гиперпараметра. Торговая стратегия оценивает настройки гиперпараметра первым вычислительным Q
на учебной подвыборке, и затем торгующий во время оценки подвыборка (в реальном времени). Цель состоит в том, чтобы максимизировать прибыль или минимизировать отрицательные возвращенные наличные деньги по пробелу соответственно ограниченных настроек (n
N
). Эта цель является формирующей прототип "дорогой" целевой функцией. Байесова оптимизация является типом машинного обучения, подходящего для таких целевых функций. Одним из его принципиальных преимуществ является отсутствие дорогостоящих производных оценок. Чтобы реализовать Байесовую оптимизацию, используйте функцию Statistics and Machine Learning Toolbox™ bayesopt
.
Функция поддержки optimizeTrading.m
использование bayesopt
оптимизировать торговую стратегию в tradeOnQ
.
function results = optimizeTrading(TData,VData) % Optimization variables n = optimizableVariable('numBins',[1 10],'Type','integer'); N = optimizableVariable('numTicks',[1 50],'Type','integer'); % Objective function handle f = @(x)negativeCash(x,TData,VData); % Optimize results = bayesopt(f,[n,N],... 'IsObjectiveDeterministic',true,... 'AcquisitionFunctionName','expected-improvement-plus',... 'MaxObjectiveEvaluations',25,... 'ExplorationRatio',2,... 'Verbose',0); end % optimizeTrading % Objective (local) function loss = negativeCash(x,TData,VData) n = x.numBins; N = x.numTicks; % Make trading matrix Q Q = makeQ(TData,n,N); % Trade on Q cash = tradeOnQ(VData,Q,n,N); % Objective value loss = -cash; end % negativeCash
Оптимизируйте торговую стратегию путем передачи данных об обучении и валидации optimizeTrading
.
rng(0) % For reproducibility
results = optimizeTrading(TData,VData);
Предполагаемая минимальная цель совпадает с минимальной наблюдаемой целью (поиск является монотонным). В отличие от основанных на производной алгоритмов, bayesopt
не сходится. Когда это пытается найти глобальный минимум, bayesopt
продолжает исследовать, пока это не достигает конкретного количества итераций (25
).
Получите лучшую настройку путем передачи results
к bestPoint
.
[Calibration,negReturn] = bestPoint(results,'Criterion','min-observed')
Calibration=1×2 table
numBins numTicks
_______ ________
3 24
negReturn = -7100
Торговля одной долей на метку деления, как направлено Q
, оптимальное использование стратегии (n
N
) = (3,24) возвращает 0,71$ за итоговые 20% торгового дня. Изменение объема торгов масштабирует возврат.
Другим оптимизатором, спроектированным для дорогих целей, является surrogateopt
(Global Optimization Toolbox). Это использует различную поисковую стратегию и может определить местоположение optima более быстро, в зависимости от цели. Функция поддержки optimizeTrading2.m
использование surrogateopt
вместо bayesopt
оптимизировать торговую стратегию в tradeOnQ
.
rng(0) % For reproducibility
results2 = optimizeTrading2(TData,VData)
results2 = 1×2
3 24
Результаты получены с surrogateopt
совпадают с bayesopt
результаты. График содержит информацию о прогрессе поиска, который характерен для surrogateopt
алгоритм.
Вычислите Q
путем передачи оптимальных гиперпараметров и целого набора данных к makeQ
.
bestQ = makeQ(Data,3,24)
bestQ = 9×9
0.3933 0.1868 0.1268 0.5887 0.7722 0.6665 0.0180 0.0410 0.2068
0.5430 0.3490 0.2716 0.4447 0.6379 0.6518 0.0123 0.0131 0.0766
0.6197 0.3897 0.3090 0.3705 0.5954 0.6363 0.0098 0.0150 0.0547
0.1509 0.0440 0.0261 0.8217 0.8960 0.6908 0.0273 0.0601 0.2831
0.1900 0.0328 0.0280 0.7862 0.9415 0.8316 0.0238 0.0257 0.1404
0.2370 0.0441 0.0329 0.7391 0.9221 0.8745 0.0239 0.0338 0.0925
0.1306 0.0234 0.0101 0.7861 0.6566 0.4168 0.0833 0.3200 0.5731
0.1276 0.0169 0.0118 0.7242 0.6505 0.4712 0.1482 0.3326 0.5171
0.1766 0.0282 0.0186 0.7216 0.7696 0.6185 0.1018 0.2023 0.3629
Торговый матричный bestQ
может использоваться в качестве начальной точки в течение следующего торгового дня.
Этот пример реализует оптимизированную торговую стратегию, разработанную в первых двух связанных примерах. Доступные данные разделяются в подвыборки обучения и валидации и используются, соответственно, чтобы вычислить торговый матричный Q
и выполните получившийся торговый алгоритм. Процесс повторяется по пробелу установок гиперпараметров с помощью глобальных оптимизаторов bayesopt
и surrogateopt
, оба из которых идентифицируют оптимальную стратегию, дающую к положительному возврату. Подход имеет много опций для дальнейшей индивидуальной настройки.
[1] Бык, Адам Д. "Уровни сходимости эффективных глобальных алгоритмов оптимизации". Журнал исследования машинного обучения 12, (ноябрь 2011): 2879–904.
[2] Рубисов, Антон Д. "Статистический Арбитраж Используя Книжную Неустойчивость Лимитного приказа". Магистерская диссертация, Университет Торонто, 2015.
[3] Snoek, Джаспер, Хьюго Лэрочелл и Райан П. Адамс. "Практическая Байесова Оптимизация Алгоритмов Машинного обучения". В Усовершенствованиях в Нейронных Системах обработки информации 25, Ф. Перейра и. редакторы al., 2012.
[4] Tan, Barış и Камил Yılmaz. “Тест Цепи Маркова для Временной зависимости и Однородности: Аналитическая и Эмпирическая Оценка”. Европейский Журнал Исследования операций 137, № 3 (март 2002): 524–43. https://doi.org/10.1016/S0377-2217 (01) 00081-9.
[5] Weißbach, Рафаэль и Ронджа Уолтер. “Тест Отношения правдоподобия для Стационарности Оценки Переходов”. Журнал Эконометрики 155, № 2 (апрель 2010): 188–94. https://doi.org/10.1016/j.jeconom.2009.10.016.