Машинное обучение для статистического арбитража III: обучение, настройка и предсказание

Этот пример использует байесовскую оптимизацию, чтобы настроить гиперпараметры в алгоритмической торговой модели, контролируемой возвратом в конце дня. Это часть серии связанных примеров машинного обучения для статистического арбитража (см. Приложения машинного обучения).

Загрузка 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); 

Figure contains an axes. The axes with title Objective function model contains 5 objects of type line, surface, contour. These objects represent Observed points, Model mean, Next point, Model minimum feasible.

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Предполагаемая минимальная цель совпадает с минимальной наблюдаемой целью (поиск монотонен). В отличие от алгоритмов, основанных на производной, 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)

Figure Optimization Plot Function contains an axes. The axes with title Best: -7100 Incumbent: -7100 Current: -4400 contains 4 objects of type line. These objects represent Best, Incumbent, Random Samples, Adaptive Samples.

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.

Похожие темы