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

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

Загрузите 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 свободно варьироваться

Ограничения не значительно влияют на результаты оптимизации. Алгоритм оптимизации ищет по двумерному пространству параметров (nN) для настройки, дающей к максимальному возврату на торговле.

Обучение и данные о валидации

Машинное обучение требует подвыборки, на которой можно оценить 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 на учебной подвыборке, и затем торгующий во время оценки подвыборка (в реальном времени). Цель состоит в том, чтобы максимизировать прибыль или минимизировать отрицательные возвращенные наличные деньги по пробелу соответственно ограниченных настроек (nN). Эта цель является формирующей прототип "дорогой" целевой функцией. Байесова оптимизация является типом машинного обучения, подходящего для таких целевых функций. Одним из его принципиальных преимуществ является отсутствие дорогостоящих производных оценок. Чтобы реализовать Байесовую оптимизацию, используйте функцию 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 object. The axes object 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 object. The axes object 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, оптимальное использование стратегии (nN) = (3,24) возвращает 0,71$ за итоговые 20% торгового дня. Изменение объема торгов масштабирует возврат.

Другим оптимизатором, спроектированным для дорогих целей, является surrogateopt (Global Optimization Toolbox). Это использует различную поисковую стратегию и может определить местоположение optima более быстро, в зависимости от цели. Функция поддержки optimizeTrading2.m использование surrogateopt вместо bayesopt оптимизировать торговую стратегию в tradeOnQ.

rng(0) % For reproducibility
results2 = optimizeTrading2(TData,VData)

Figure Optimization Plot Function contains an axes object. The axes object 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] Бык, Адам Д. "Уровни сходимости эффективных глобальных алгоритмов оптимизации". Журнал исследования машинного обучения 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.

Похожие темы