: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

卡尔曼g-h-k滤波系统(The Kalman g-h-k Filter System)

卡尔曼g-h-k滤波系统(The Kalman g-h-k Filter System)

卡尔曼g-h-k滤波系统(The Kalman g-h-k Filter System)

卡尔曼g-h-k滤波系统描述

卡尔曼g-h-k滤波器是一个三态过程。这意味着在任何瞬间,被测量的过程(在我们的例子中是价格系列)由一个噪声位置(价格)、一个噪声速度(每条的价格变化)和一个噪声加速度(每条的速度变化)测量组成。

代表n+1时间的真实价格(没有添加噪音的价格)。让代表在时间n+1的价格序列的估计预测价格,基于到时间n为止(包括时间n)的测量。卡尔曼解决的问题是找到最佳估计,使以下的均方误差(MSE)最小


卡尔曼发现,最佳的过滤器是由方程式给出的:



一般来说,gn、hn和k在每次测量时都会根据价格、速度和加速度的预测值和实际值之间的误差来更新。然而,在稳定状态下,也就是在滤波器估计了一段时间后,我们将使用所谓的Benedict-Bordner g-h-k滤波器,它可以使加速度的瞬时误差最小。Benedict-Bordner gn, hn和k的系数由以下关系给出:



gn = 是将通过优化找到的系统参数之一。

一旦找到gn,为了计算明天的估计价格,我们所需要的就是昨天的价格估计,明天的速度估计,明天的加速度估计和今天的价格。

卡尔曼g-h-k滤波器系统的定义。         人们可以用许多方法从上述卡尔曼-g-h-k 滤波器中构建一个系统。在这里,与卡尔曼g-h-k滤波器一样,我们将使用估计的卡尔曼速度来构建我们的系统,以做出我们的买入和卖出决策。卖的决定。在卡尔曼g-h-k滤波器中加入加速度后,对速度的估计应该更加准确。

在五年的测试数据窗口中,可交易的价格可以有相当大的波动幅度。价格幅度的大幅波动会导致优化程序中发现的参数在样本外测试中无法使用。为了避免这个问题,我们应该把价格的速度(也叫每条价格的变化)表示为价格的百分比。因此,让我们把归一化的卡尔曼估计速度定义为:



也就是说,dxnorm是通过将明天的卡尔曼价格速度估计值除以今天的价格,然后乘以100而产生的。

一般来说,我们要做的是跟随dxnorm的绘图曲线。当dxnorm曲线从dxnorm的前期低点上升到一定程度时,我们将做多。当dxnorm曲线从dxnorm曲线的前期高点下降到deldn时,我们将做空。

买入规则:
如果dxnorm从dxnorm的最低低点上升的幅度超过了做空时记录的delup量,那么在明天开盘时买入。

卖出规则:
如果dxnorm从dxnorm中记录的最高点向下移动的幅度超过deldn,则在明天开盘时卖出。

使用标准普尔连续期货合约的前行优化

用卡尔曼g-h-k过滤器系统对标普500指数连续期货合约进行了前行优化。

标准普尔期货于1982年开始交易。然而,在本报告中,我们的研究将限于89年1月1日至今的价格历史。最初的实验发现,三年的测试段对于标普走势测试是最好的。

前行程序将被应用如下。从数据的开始,1989年1月1日到1991年12月31日,选择了3年的时间,通过对这个每日数据段的优化找到系统参数值。然后将找到的参数值应用于测试段后一年的样本外数据,在本例中是1992年。然后对1992年的样本外结果进行制表和保存。

接下来,数据测试窗口向前移动一年,从1990年1月1日到1992年12月31日,并找到新的最佳参数值。新的最佳参数被应用于1993年的样本外结果,并将1993年的样本外结果列表。

移动数据测试窗口每次向前走一年,为每个3年的窗口数据段创造最佳值。从这些窗口得出的最佳参数被应用于测试数据窗口以外的年份。最后,所有列表中的一年的样本外结果被合并,形成一个大的样本外结果段。这种计算密集型方法背后的理论是,可用于建模和寻找参数的价格动态会随着时间缓慢变化。假设在事情发生变化和模型崩溃之前,有足够的数据可以预测未来很短的时间。事件和技术需要时间来改变事物,所以假设使用基于前三年的最佳值将足以在未来一年使用。

系统输入参数和定义
Mark=0,Mark=0意味着该头寸在最后一个条形图上没有被标记到市场。Mark=1意味着它是。
gn = 0.12, 卡尔曼g-h-k过滤器最佳衰减常数。
dxup = 99, dxnorm必须高于这个数字才能发出买入指令。dxdn = 99, dxnorm必须低于减去这个数字才能发出卖出。delup =0.025,dxnorm必须比先前的低点dxnorm增加的数量。
deldn = 0.150 dxnorm从先前的dxnorm的高点必须减少的数量。

为优化运行而检查的参数范围

gn = 0.05至0.12,步长为0.005
dxup = 99
dxdn = 99
delup = 0.02 to 0.15,步长为0.005。
deldn = 0.02至0.15,步长为0.005。

卡尔曼g-h过滤器系统的前行性能总结 01/01/89-12/31/97



注#1 1993年使用了5年的测试期,因为1991年、1992年和1993年是没有趋势的年份,而且有许多鞭打的现象。为了准确衡量价格动态,1989年和1990年这两个有趋势的年份必须被包括在内。

注#2 在我完成这项研究的过程中,很明显,对标准普尔指数进行为期三年的测试窗口,至少应该每三个月进行一次走势测试。

其中:
TNPft = 3年优化测试部分的总净利润。
%P = 优化测试部分的盈利百分比。
MaxDD = 优化测试部分的最大日内跌幅。
LBgLTd = 优化测试部分的最大亏损交易长线。
SBgLTd = 优化测试部分的最大亏损交易的空头。
1YrOpt = 曲线拟合时间段的一年的美元利润,由该时间段的最佳参数生成。这是3年时间段中最后一年的曲线拟合利润。
1YrOOS = 由前一个时间段的最佳参数产生的一年的美元利润或损失。这是该年的样本外利润。
OOS=样本外的结果。

设置

按照本手册中 "如何用数据系列设置新的工作区 "一节所述,设置工作区。该系统被命名为#KalmanGHK,指标被命名为#KalmanGHK Prc和#KalmanGHK dxnorm。        #KalmanGHK Prc绘制了卡尔曼g-h-k估计价格,#KalmanGHK dxnorm绘制了dxnorm变量。打开为该系统和指标设置的工作区。点击菜单栏上的 "插入"。在弹出的菜单中点击分析技术。弹出一个名为 "插入分析技术 "的窗口。确保右侧的 "格式 "复选框被选中。点击 "系统 "选项卡。找到系统#KalmanGHK,点击它以突出显示。点击 "绘图 "按钮。 一个题为 "格式化系统 "的窗口。#KalmanGHK的窗口将弹出。如果你想的话,可以通过点击编辑来改变输入值,或者让它们保持不变。然后点击确定,系统的买入和卖出箭头就会显示在图表上。要插入#KalmanGHK指标,请遵循上述步骤,只是在插入分析技术窗口框中点击指标标签,而不是系统标签,并遵循同样的步骤。该指标将显示在图表上。

功能的定义和使用

该函数被命名为$KalmanGHK。这是将系统做成二进制函数的形式。该函数在系统买入时等于+1,在系统卖出时等于-1。这个函数可以与其他系统函数的任何组合结合成一个新的系统。例如,如果function1(p1,p2,p3)是函数形式的system1,那么用户可以写下面的简单代码,将$FadMemPoly与function1组合成一个新的系统。

如果$KalmanGHK(gn,dxup,dxdn,delup,deldn)=1且function1(p1,p2,p3)=1则在市场买入。如果$KalmanGHK(gn,dxup,dxdn,delup,deldn))=-1并且function1(p1,p2,p3)=-1则在市场上卖出。

用户可以直接在函数中输入参数的当前值,而不是参数名称,或者用户可以为这个新组合重新优化任何参数。

参考文献

1.Morrison, Norman "Introduction to Sequential Smoothing and Prediction", McGraw-Hill Book Company, 纽约,1969年。
2.Brown, R.C, Hwang, P.Y.C. "Introduction to Random Signals and Applied Kalman Filtering", John Wiley & Sons, New York, 1997.

KalmanGHK WF S&P - 01/03/89- 11/06/98  从1992年1月1日开始向前走,在业绩总结中加入了样本外的内容。












论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

{System: #KalmanGHK }
  1. input: mark(0),gn(0.135),dxup(99),dxdn(99),delup(0.020),deldn(0.095),prc(c);
  2. vars: y(c),ddxs(0),dxs(0),xs(c), err(0),hn(0.5),kn(0.5),dxnorm(0),ddxnorm(0),xplus(c);
  3. vars: oneplus(1),oneminus(1),buystop(0),sellstop(0),h_ep(c),l_ep(c),bopos(0);

  4. if currentbar<4 then begin
  5. xplus=0;
  6. hn=2*(2-gn) - 4*squareroot(1-gn);
  7. kn=hn*hn/(4*gn);
  8. y=prc;
  9. xs=y;
  10. dxs=y-y[1];
  11. ddxs=dxs-dxs[1];
  12. dxs=0;
  13. ddxs=0;
  14. xs=prc;
  15. oneplus=delup;
  16. oneminus=deldn;
  17. h_ep=xplus;
  18. l_ep=xplus;
  19. buystop=l_ep+oneplus;
  20. sellstop=h_ep-oneminus;
  21. end else begin y=prc;
  22. err=y-xs[1];
  23. ddxs=ddxs[1]+2*kn*err;
  24. dxs=dxs[1]+ ddxs + hn*err;
  25. xs=xs[1]+dxs+(ddxs/2) +(gn)*err;
  26. dxnorm=100*dxs/prc;
  27. ddxnorm=1000*ddxs/prc;
  28. xplus=dxnorm;

  29. {=================UP DWN %CHG from previous dxnorm local high or low===================}
  30. if delup<99 then begin
  31. bopos=bopos[1];
  32. if bopos[1] >= 0 then begin
  33. if xplus > h_ep then begin
  34. h_ep=xplus;
  35. sellstop=h_ep-oneminus;
  36. end;
  37. if xplus <= sellstop then begin
  38. bopos=-1;
  39. l_ep=xplus;
  40. buystop=l_ep+oneplus;
  41. end;
  42. end;{pos[1] if}
  43. if bopos[1]<=0 then begin
  44. if xplus < l_ep then begin
  45. l_ep=xplus;
  46. buystop=l_ep+oneplus;
  47. end;
  48. if xplus >=buystop then begin
  49. bopos=1;
  50. h_ep=xplus;
  51. sellstop=h_ep-oneminus;
  52. end;
  53. end;{pos[1]<=0 if}
  54. end;{ pctup=99}

  55. if marketposition<=0 then begin
  56. if delup<>99 then if bopos>0 and bopos[1]<>bopos then buy("B%Dxup") {on close} at market; if dxup<>99 then begin
  57. if dxnorm>=dxup and dxnorm>dxnorm[1] and dxup>=-dxdn then begin
  58. bopos=1;
  59. h_ep=xplus;
  60. sellstop=h_ep*oneminus;
  61. buy ("Bdxup") {on close} at market;
  62. end;
  63. end;
  64. end;
  65. if marketposition>=0 then begin
  66. if delup<>99 then if bopos<0 and bopos[1]<>bopos then sell("S%DXdn") {on close} at market; if dxdn<>99 then begin
  67. if dxnorm<= -dxdn and dxnorm<dxnorm[1] and -dxdn<=dxup then begin
  68. bopos=-1;
  69. l_ep=xplus;
  70. buystop=l_ep*oneplus;
  71. sell ("Sdxdn") {on close} at market;
  72. end;
  73. end;
  74. end;

  75. if date=lastcalcdate then begin
  76. if marketposition=-1 then exitshort("SMrkToMkt") on close;
  77. if marketposition=1 then exitlong("LMrkToMrt") on close; end;
  78. end;{else}
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

原版文档:
本帖隐藏的内容需要回复才可以浏览
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表