Этот пример использует байесовскую оптимизацию для настройки гиперпараметров в алгоритмической торговой модели, контролируемой доходностью на конец дня. Она является частью серии связанных примеров машинного обучения для статистического арбитража (см. Приложения машинного обучения).
Груз 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
В данных с заданными настройками гиперпараметра отсутствуют существенные неоднородности.
Тяжесть перехода к предположению однородности априори неизвестна и может возникнуть только в результате более полного обратного тестирования. Статистические тесты доступны, например, как описано в [4] и [5]. Во время торговли в реальном времени скользящее вычисление Q по сравнению с задними обучающими данными подходящего размера могут обеспечивать наиболее надежные сигналы. Такой подход признает присущую рынку нестационарность.
Машинное обучение относится к общему подходу эффективного выполнения задачи (например, торговля) автоматизированным способом путем обнаружения шаблонов (например, вычисления Q) и делать выводы на основе имеющихся данных. Часто данные динамичны и достаточно велики, чтобы требовать специализированных вычислительных методов. Процесс оценки - настройка гиперпараметров для описания данных и непосредственного выполнения задачи - продолжается.
В дополнение к проблемам работы с большими данными, процесс оценки сложных, иногда «черных ящиков», объективных функций также является сложным. Объективные функции контролируют оценку гиперпараметров. Торговая стратегия оценивает настройки гиперпараметров с помощью первых вычислений Q на учебной подгруппе, а затем торговля во время оценки (в реальном времени). Цель состоит в том, чтобы максимизировать прибыль или минимизировать отрицательный возврат денежных средств по пространству соответствующих ограниченных конфигураций (n,N). Эта цель является прототипной «дорогой» целевой функцией. Байесовская оптимизация - это тип машинного обучения, подходящий для таких объективных функций. Одним из его принципиальных преимуществ является отсутствие дорогостоящих оценок производных. Для реализации байесовской оптимизации используйте функцию 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(Панель инструментов глобальной оптимизации). Он использует другую стратегию поиска и может быстрее найти оптимум в зависимости от цели. Вспомогательная функция 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] Снук, Джаспер, Уго Ларошель и Райан П. Адамс. «Практическая байесовская оптимизация алгоритмов машинного обучения». In Advances in Neural Information Processing Systems 25, F. Pereira et al. al. редакторы, 2012.
[4] Тан, Барыш и Камиль Йылмаз. «Тест цепи Маркова на зависимость от времени и однородность: аналитическая и эмпирическая оценка». Европейский журнал оперативных исследований 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.