本示例创建了限价订单(LOB)动力学的连续时间马尔可夫模型,并根据数据中观察到的模式开发了用于算法交易的策略。它是有关用于统计套利的机器学习的一系列相关示例的一部分(请参阅机器学习应用程序)。

探索性数据分析

要预测系统的未来行为,您需要发现历史数据中的模式。纳斯达克等交易所提供的大量数据在提供统计机会的同时,也给计算带来了挑战。该示例遵循 [4]的方法,通过寻找价格动能指标来探索LOB数据。

原始数据

加载LOBVars.matNASDAQ证券INTC的LOB预处理数据集。

 load LOBVars

数据集包含每个订单的以下信息:到达时间t(从午夜开始的秒数),1级要价MOAsk,1级竞标价格MOBid,中间价 S和失衡指数I

创建一个图表,显示LOB不平衡指数I和中间价的日内演变S

 figure​t.Format = "hh:mm:ss";​yyaxis leftplot(t,I)ylabel("Imbalance Index")​yyaxis rightplot(t,S/10000,'LineWidth',2)ylabel("Midprice (Dollars)")​xlabel("Time")​title('Exchange Data: One Day')legend(["Imbalance","Midprice"],'Location','NE')grid on

在这种规模下,失衡指数无法表明中间价格的未来变化。

要查看更多详细信息,请将时间标度限制为一分钟。

 timeRange = seconds([36000 36060]); % One minute after 10 AM, when prices were climbingxlim(timeRange)legend('Location','SE')title("Exchange Data: One Minute")

在这种尺度下,失衡指数的急剧偏离与中间价格的相应偏离一致。如果这种关系是可预测的,则意味着一定规模的失衡可以预测未来的价格走势,那么对该关系进行量化可以提供统计套利机会。

在LOB中绘制间隔时间的直方图。

 DT = diff(t); % Interarrival TimesDT.Format = "s";​figurebinEdges = seconds(0.01:0.01:1);histogram(DT,binEdges)xlabel("Seconds")ylabel("Number of Orders")title("LOB Interarrival Times")

间隔时间遵循泊松过程的特征模式。

通过将指数分布拟合到间隔时间来计算订单之间的平均等待时间。

 DTAvg = expfit(DT)DTAvg = duration0.040273 sec

平滑数据

原始不平衡序列I不稳定。要识别最重要的动态变化,请引入平滑度dI,该平滑度是用于平均原始不平衡序列的后向标记的数量。

 dI = 10; % HyperparameterdTI = dI*DTAvgdTI = duration0.40273 sec

该设置对应于10个标记的间隔,或平均约0.4秒。在后续窗口中平滑不平衡指数。

 sI = smoothdata(I,'movmean',[dI 0]);

可视化平滑程度以评估丢失或保留的波动率。

 figurehold onplot(t,I)plot(t,sI,'c','LineWidth',2)hold off​xlabel("Time")xlim(timeRange)ylabel("Imbalance Index")title("Imbalance Data: One Minute")legend(["Raw","Smoothed"],'Location','SE')grid on

离散数据

要创建动力学的马尔可夫模型,请将平滑的不平衡指数收集sI放到分组中,将其离散化为有限的状态集合rhoρ)。分组数numBins是一个超参数。

 numBins = 3; % HyperparameterbinEdges = linspace(-1,1,numBins+1);rho = discretize(sI,binEdges);

要对预测效果进行建模,请在先导窗口中汇总价格。窗口中的间隔数dS是一个超参数。

 dS = 20; % HyperparameterdTS = dS*DTAvgdTS = duration0.80547 sec

该设置对应于20个间隔,或平均约0.8秒。将价格变动离散化为由远期价格变动的符号给出的三个状态DS(ΔS)。

 DS = NaN(size(S));shiftS = S(dS+1:end);DS(1:end-dS) = sign(shiftS-S(1:end-dS));

可视化离散化数据。

 figure​subplot(3,1,1)hold onplot(t,sI,'c','LineWidth',2)for i = 2:numBinsyline(binEdges(i),'b--');endhold offxlim(timeRange)ylim([-1 1])yticks(binEdges)title("Imbalance Index (Smoothed)")grid on​subplot(3,1,2)plot(t,rho,'co','MarkerSize',3)xlim(timeRange)ylim([1 numBins])yticks(1:numBins)ylabel("rho")title("Imbalance Index (Discretized)")grid on​subplot(3,1,3)plot(t,DS,'ro','MarkerSize',3)xlim(timeRange)ylim([-1 1])yticks([-1 0 1])ylabel("DeltaS")title("Price Movement")grid on

连续时间马尔可夫过程

总而言之,LOB不平衡指数的状态rhoρ)和远期价格走势的状态DS(ΔS)描述了二维连续时间马尔可夫链(CTMC)。该链由订单到达的泊松过程调制,该过程指示状态之间的任何转换。

为了简化说明,为二维CTMC提供一维编码成状态phiφ =(ρ ,ΔS))。

 numStates = 3*numBins; % numStates(DS)*numStates(rho)​phi = NaN(size(t));for i = 1:length(t)switch DS(i)case -1phi(i) = rho(i);case 0phi(i) = rho(i) + numBins;case 1phi(i) = rho(i) + 2*numBins;endend

连续状态 φ,以及组件状态 ρ 和 ΔS, 进行如下操作。

超参数dIdS确定表征动力学的滚动状态的大小。在时间 t,过程从 φ =(ρ**previousS**current)=iφ =(ρ**currentS**future)=j (如果 i = j,保持相同的状态)。

估计过程参数

在任何时间 t执行交易策略是基于 ΔS**future处于特定状态,以其他状态的当前值和先前值为条件。根据[3]和[4],确定经验转移概率,然后评估它们的预测能力。

 % Transition counts​C = zeros(numStates);for i = 1:length(phi)-dS-1  C(phi(i),phi(i+1)) = C(phi(i),phi(i+1))+1;end​% Holding times​H = diag(C);​% Transition rate matrix (infinitesimal generator)​G = C./H;v = sum(G,2);G = G + diag(-v);​% Transition probability matrix (stochastic for all dI)​P = expm(G*dI); % Matrix exponential

如文献 [4]所述,为了获得包含概率:

的交易矩阵呢 Q,应用贝叶斯法则:

分子是转移概率矩阵P。计算分母PCond.

 PCond = zeros(size(P));phiNums = 1:numStates;modNums = mod(phiNums,numBins);for i = phiNumsfor j = phiNumsidx = (modNums == modNums(j));PCond(i,j) = sum(P(i,idx));        end    end​Q = P./PCond;

Q在表格中显示。用复合状态φ=(ρS)标记行和列。

 binNames = string(1:numBins);stateNames = ["("+binNames+",-1)","("+binNames+",0)","("+binNames+",1)"];QTable = array2table(Q,'RowNames',stateNames,'VariableNames',stateNames)QTable=9×9 table(1,-1)      (2,-1)       (3,-1)       (1,0)      (2,0)      (3,0)       (1,1)        (2,1)       (3,1)  ________    _________    _________    _______    _______    _______    _________    _________    ________​(1,-1)     0.59952      0.30458      0.19165    0.39343    0.67723     0.7099    0.0070457     0.018196    0.098447(2,-1)     0.74092      0.58445      0.40023    0.25506    0.41003    0.56386    0.0040178    0.0055189    0.035914(3,-1)     0.79895      0.60866      0.55443    0.19814      0.385    0.42501    0.0029096    0.0063377    0.020554(1,0)     0.094173     0.036014     0.019107    0.88963    0.91688    0.75192     0.016195     0.047101     0.22897(2,0)      0.12325     0.017282     0.015453    0.86523    0.96939     0.9059     0.011525     0.013328    0.078648(3,0)       0.1773      0.02616     0.018494    0.81155    0.95359    0.92513     0.011154     0.020252    0.056377(1,1)     0.041132    0.0065127    0.0021313    0.59869    0.39374    0.21787      0.36017      0.59975        0.78(2,1)     0.059151    0.0053554    0.0027769    0.65672    0.42325    0.26478      0.28413       0.5714     0.73244(3,1)     0.095832     0.010519    0.0051565     0.7768     0.6944     0.3906      0.12736      0.29508     0.60424

 figureimagesc(Q)axis equal tighthCB = colorbar;hCB.Label.String = "Prob(DeltaS_{future} | rho_{previous},rho_{current},DeltaS_{current})";xticks(phiNums)xticklabels(stateNames)xlabel("(rho_{current},DeltaS_{future})")yticks(phiNums)yticklabels(stateNames)ylabel("(rho_{previous},DeltaS_{current})")title("Trading Matrix")

 trigger = 0.5;QPattern = (Q > trigger)QPattern = 9x9 logical array​1   0   0   0   1   1   0   0   01   1   0   0   0   1   0   0   01   1   1   0   0   0   0   0   00   0   0   1   1   1   0   0   00   0   0   1   1   1   0   0   00   0   0   1   1   1   0   0   00   0   0   1   0   0   0   1   10   0   0   1   0   0   0   1   10   0   0   1   1   0   0   0   1

是交易策略吗?

Q基于可用的交换数据和超参数设置构建。使用Q,以便让未来的交易决策取决于市场统计模式的连续型。市场在某些状态下是否表现出动力,是对弱形式的有效市场假说(EMH)的检验。对于大量交易的资产,例如本示例 (INTC)中使用的资产,EMH可能会长期持有,套利机会很快消失。但是,失效的EMH可能会在短时间内出现在某些资产中。使用最佳超参数设置和要进行交易的验证期,有效的交易策略将交易日的一部分(足够短以显示一定程度的统计平衡)划分为一个训练期,以进行估算Q

概要

本示例从LOB上的原始数据开始,然后将其转换为统计套利机会的概要矩阵Q。该分析使用连续时间马尔可夫链模型的数学方法,首先是识别LOB到达时间的泊松过程,然后将数据离散化为代表市场瞬时位置的二维状态。根据经验得出的状态转换的描述导致了算法交易策略的可能性。

参考文献

[1] Cartea, Álvaro, Sebastian Jaimungal, and Jason Ricci. "Buy Low, Sell High: A High-Frequency Trading Perspective." SIAM Journal on Financial Mathematics 5, no. 1 (January 2014): 415–44. https://doi.org/10.1137/130911196.

[2] Guilbaud, Fabien, and Huyen Pham. "Optimal High-Frequency Trading with Limit and Market Orders." Quantitative Finance 13, no. 1 (January 2013): 79–94. https://doi.org/10.1080/14697688.2012.708779.

[3] Norris, J. R. Markov Chains. Cambridge, UK: Cambridge University Press, 1997.

[4] Rubisov, Anton D. "Statistical Arbitrage Using Limit Order Book Imbalance." Master's thesis, University of Toronto, 2015.


注:本文根据MATLAB官网内容修改而成。

前往索引:

吃小羊:MATLAB金融工具箱:00:索引​zhuanlan.zhihu.com

我推荐给你以下的视频教程,特点是没有PPT,不掺水,直接编程环境下的实操课程: 用360分钟了解MATLAB编程《MATLAB编程360》视频课程:

MATLAB编程360 - 网易云课堂study.163.com​study.163.com

matlab工具箱设置学习率_MATLAB金融工具箱:06:统计套利的机器学习2:特征工程和模型开发...相关推荐

  1. matlab std函数_MATLAB金融工具箱:11:根据基准优化投资组合

    本示例说明如何使用金融工具箱中的Portfolio对象执行投资组合优化. 尤其是,该示例说明了如何优化投资组合以相对于市场基准最大化信息比率.具体而言,将table中包含的财务数据读入MATLAB并进 ...

  2. 初步了解MATLAB金融工具箱

    MATLAB和金融工具箱为金融分析和金融工程提供了一个完整的计算环境.并且金融工具箱提供了一切可帮助你完成金融数据的数学和统计分析的功能,并能将结果用高质量图像显示出来. 你可以:     计算和分析 ...

  3. 【Matlab】利用贝叶斯网络工具箱中的K2算法进行结构学习

    下面首先介绍一个结构学习方法,接着利用Matlab中的贝叶斯网络工具箱的K2算法学习该贝叶斯网络的结构.有关贝叶斯网络工具箱的使用,请看[Matlab]贝叶斯网络工具箱简介. 问题:服务器数据传送 现 ...

  4. 基于 MATLAB 、Simulink 仿真和 TrueTime 工具箱的网络控制系统的仿真方法 附完整代码

    通过动手实践了解网络控制系统的架构及运行控制原理 熟悉使用基于 MATLAB 平台.Simulink 仿真工具和 TrueTime 工具箱的网络控制系统的仿真方法 考察不同丢包率下网络控制系统状态.输 ...

  5. MATLAB时频工具箱函数说明(包含工具箱的下载,安装,使用)

    MATLAB时频工具箱函数说明(包含工具箱的下载,安装,使用) 信号产生函数 噪声产生函数 模糊函数 Affine类双核线性时频处理函数 Cohen类双核线性时频处理函数 其他处理函数 时频分析工具箱 ...

  6. android gl修改工具,gl工具箱(GLTools)软件下载-gl工具箱appv3.06 安卓版-腾牛安卓网...

    gl工具箱app英文名为GLTools,软件可以修改游戏数据,让玩家更轻松激情爽玩各种手游,软件还支持GPU.RAM信息模拟.处理器特效优化等,觉得不错的朋友欢迎前来下载使用. gl工具箱app介绍: ...

  7. matlab 判断元素索引_MATLAB图像处理:08:在交通视频中检测汽车

    本示例说明如何使用"图像处理工具箱"来可视化和分析视频或图像序列.本示例使用VideoReader(MATLAB),implay和其他图像处理工具箱功能来检测交通视频中的浅色汽车. ...

  8. matlab怎么设置参数设置,matlab设置参数

    matlab精度设置_计算机软件及应用_IT/计算机_专业资料.format 这个函数不是用于控制运算精度的,它只能控制结果显示类型.运 算的时候还是用 matlab 自己的精度,具体...... 参 ...

  9. TensorFlow中设置学习率的方式

    目录 1. 指数衰减 2. 分段常数衰减 3. 自然指数衰减 4. 多项式衰减 5. 倒数衰减 6. 余弦衰减 6.1 标准余弦衰减 6.2 重启余弦衰减 6.3 线性余弦噪声 6.4 噪声余弦衰减 ...

最新文章

  1. 陈天奇:我是如何从机器学习小白一步一步成长为你们心目中的大神的
  2. linux 禁止内部命令,Linux命令——文件内部命令
  3. linux shell 代码太长换行 续行
  4. [openstack]依赖提交
  5. RedLock 实现分布式锁
  6. textview加载html glide,TextView加载HTML,文字和图片
  7. 宝塔可以修改服务器内存限制吗,宝塔内存使用率很高的解决方法 cpu过高这样做!...
  8. 【java】java 并发编程 StampedLock 锁 【不重要】
  9. Java 之 注释介绍
  10. Boost.Asio的网络编程
  11. html css 银行卡,CSS
  12. javascript : spket 视频教程
  13. 爱快iKuai软路由系统远程升级(从2.5.10系统升级至3.X系列)教程(图文详解)
  14. 经典语录(个人喜欢)
  15. 用adb shell让APP获得Root权限 by SuperSU
  16. ABAP SPLITTER技术总结及使用技巧
  17. Java程序员未来职业应如何规划?
  18. 论文笔记-2019-ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy
  19. Python数据可视化的例子——箱线图(box)
  20. 基于TensorFlow Lite实现的Android花卉识别应用

热门文章

  1. 科研神器推荐之那些年你用过的工具
  2. 蒙特利尔大学发布2021年最新自监督小样本检测综述
  3. Swin Transformer 升级,Swin V2:向更大容量、更高分辨率的更大模型迈进
  4. vue.js框架原理浅析
  5. Linux系统编程之--守护进程的创建和详解【转】
  6. jquery easyui dataGrid动态改变排序字段名
  7. python 多版本管理
  8. mount: unknown filesystem type 'smbfs' 问题解决
  9. linux 字符驱动阻塞型 等待队列
  10. [笔记]使用shell命令(awk,sed,grep)处理几个特征字符串之间的文本