此示例使用贝叶斯优化来优化算法交易模型中的超参数,并由日末收益监督。
加载预处理的LOB数据集LOBVars.mat
,来自NASDAQ证券INTC。
load LOBVars
数据集包含每个订单的以下信息:到达时间t
(从午夜开始的秒数),1级要价MOAsk
,1级出价MOBid
,中间价S
和失衡指数I
。
此示例包括几个支持函数,这些函数存储在中matlabroot/examples/finance/data/LOBSupportingFiles
。要查看它们,请更改您的工作文件夹。
cd(fullfile(matlabroot,'examples','finance','data','LOBSupportingFiles'));
交易策略
给定限价单(LOB)不平衡指数I
的当前和先前状态rho
,以及价格DS
中最新观察到的方向,交易矩阵Q
包含未来价格走势的概率。
查看支持函数 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,则卖出
在交易日结束时,该功能会立即平仓(liquidates the position at the touch)。
该策略要求Data
具有t
报价时间和相应的市场订单买入价MOBid
和卖出价MOAsk
。在实时交易中,数据由交易所提供。本示例通过将历史样本分为训练(校准)和验证子样本来评估策略。验证子样本可充当实时交易数据的代表。该策略取决于其本身的交易矩阵Q
,我们可以在做出许多超参数选择后进行估算。当优化策略时,输入n
和N
是要调整的超参数。
超参数
连续时间马尔可夫模型和所得的交易矩阵Q
取决于四个超参数的值:
lambda
—用于计算失衡指数I
的加权参数dI
— 平滑期间用于平均I
的反向刻度数