Этот пример использует байесовскую оптимизацию, чтобы настроить гиперпараметры в алгоритмической торговой модели, контролируемой возвратом в конце дня. Это часть серии связанных примеров машинного обучения для статистического арбитража (см. Приложения машинного обучения).
Загрузка LOBVars.mat
, предварительно обработанный набор данных LOB NASDAQ security INTC.
load LOBVars
Набор данных содержит следующую информацию для каждого порядка: время прибытия t
(секунды с полуночи), запрашиваемая цена уровня 1 MOAsk
, цена торгов уровня 1 MOBid
, midprice 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
Никаких существенных неоднородностей в данных с заданными установками гиперпараметров не появляется.
Серьезность протекания с допущением однородности априори не известна и может возникнуть только из более комплексного обратного тестирования. Доступны статистические тесты, как описано, например, в [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). Он использует другую стратегию поиска и может найти оптимум быстрее, в зависимости от цели. Вспомогательная функция 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] Bull, Adam D. «Скорости сходимости эффективных алгоритмов глобальной оптимизации». Journal of Машинное Обучение Research 12, (ноябрь 2011): 2879-904.
[2] Rubisov, Anton D. «Statistical Arbitrage Using Limit Order Book Imbalance». Магистерская диссертация, Университет Торонто, 2015.
[3] Snoek, Jasper, Hugo Larochelle, and Ryan P. Adams. Практическая байесовская оптимизация алгоритмов машинного обучения. В усовершенствования в системах обработки нейронной информации 25, Ф. Перейра и др. al. редактора, 2012.
[4] Tan, Барыш и Камиль Йылмаз. «Марковский тест цепи на зависимость во времени и однородность: аналитическая и эмпирическая оценка». Европейский журнал оперативных исследований 137, № 3 (март 2002): 524-43. https://doi.org/10.1016/S0377-2217 (01) 00081-9.
[5] Вайсбах, Рафаэль и Роня Вальтер. Тест коэффициента вероятности на стационарность рейтинговых переходов. Журнал эконометрики 155, № 2 (апрель 2010): 188-94. https://doi.org/10.1016/j.jeconom.2009.10.016.