固定记忆的多项式系统(The Fixed Memory Polynomial System)
UID 2 积分 2725616 威望 1312804 布 龙e币 1412812 刀 注册时间 2009-12-3 最后登录 2024-5-4
固定记忆的多项式系统(The Fixed Memory Polynomial System)
固定记忆多项式系统描述
在 "Dennis Meyers短期系统和指标 "软件包中,我使用最小二乘法技术,通过30多个收盘价来拟合一条 的直线和一条 的二次线,以创建一条曲线,作为市场趋势的代表。当曲线从之前的本地低点向上移动了一定的百分比时,就会认为趋势已经改变为上升,并发出买入信号。当曲线从之前的本地高点向下移动了一定的百分比时,趋势就会被认为是向下行方向变化,并发出卖出信号。在这里,我将使用最小二乘法技术来拟合形式为 的三阶多项式,以创建一条曲线,作为市场趋势的更好代表。立体多项式应该对基础趋势的变化做出更快的反应,并比直线和二次线版本更准确地模拟趋势变化。在开发三次多项式的代码时,我扩大了代码的使用范围,使其允许用户使用和测试任何形式的 的阶次多项式。在测试中,我发现n=4以上的阶数没有提供额外的优势。然而,读者可能会发现不同的情况,因此可以使用n=6以下的任何顺序。
什么是固定记忆多项式滤波器?
固定记忆多项式滤波是简单的对固定数量的过去数据点进行 形式的多项式的最小平方拟合。其中t是离散的时间条。时间可以是日线或一分钟线。假设时间条发生在固定的时间间隔内,所以Tic条不适合于这种分析。最小二乘法是一种数学技术,数据和被拟合的曲线之间的垂直距离的平方最小化。当净平方距离(也称为平方误差之和)最小化时,就会确定一组唯一的多项式的系数 。这种类型的误差最小化在数学上是可以解决的,并且在科学和数学中被广泛使用。
对于三次方程,最小二乘法系数由以下矩阵方程的解得到:
其中
p(T)是今天的价格,p(T-1)是昨天的价格,p(1)是T天前的价格。
∑p(t)是t=1到T天的价格之和。
∑p(t)*t是t=1至T天的价格乘以t的总和。
∑t是指从t=1到T天的整数t的总和
∑t^2是指从t=1到T天的整数t的平方的总和,等等。
解决矩阵方程的程序可以在W. Press等人的 "Numerical Recipes "一书中找到,但是这些类型的矩阵方程求解器非常慢,对于这些类型的问题是不稳定的。它们会因为矩阵反转的问题而导致数值错误,并产生错误的结果。
幸运的是,这些类型的问题可以通过一种叫做离散正交1 Legendre多项式方法的方法轻松解决。这个方法在诺曼-莫里森的《序列平滑和预测介绍》一书中有详细的解释,第七章第223页,在本节末尾引用。
这里不做详述(见莫里森参考文献),现在多项式滤波器可以用以下方式表示:
其中n是多项式阶数,T是最小二乘法拟合中使用的数据的总条数,以及
j(t)=归一化的离散Legendre多项式 t=0到T的整数
现在可以求出三次多项式的系数0、1、2、3,我们可以生成对第二天收盘的预测,其公式为
最小二乘法系统的定义
最小二乘法的预测是通过使用过去T天的收盘价和上面的方程式求解每天的最小二乘法系数 来建立的。然后根据上面的方程式构建PF(T+1),并在价格图下绘制。一般来说,我们要做的是按照PF的曲线绘制。当曲线从之前的低点上升一个百分点时,我们将做多。当曲线从之前的高点下降了一个百分点时,我们将做空。此外,我们希望能够跳过价格方向上的快速移动的主要变化。
因此,如果PF大于两天前的PF的百分比量pctjpup,我们将做多。如果PF小于两天前的PF,百分比为pctjdn,我们将做空。
买入规则:
如果在做空时,PF比PF的最低记录上升了超过百分数pctup,那么在明天开盘时买入BP期货。
或者
如果PF比两天前的PF多出pctjup的百分比,则在明天开盘时买入BP期货。
卖出规则:
如果在做多时,PF比PF的最高记录下降了超过百分数pctdn,则在明天开盘时卖出BP期货。
或者
如果PF比两天前的PF少了pctjdn的百分比,则在明天开盘时卖出BP期货。
使用英镑连续期货合约的前行优化
使用立方体系统对英镑连续期货合约进行了前行优化。英国石油期货于1975年开始交易。然而,在本报告中,我们将把我们的研究限制在从1989年1月1日到今天的价格历史。最初的实验发现,五年的测试段对BP走势测试是最好的。
步进程序将被应用如下。从数据的开始,1989年1月1日到1993年12月31日,选择一个5年的时间,通过对这个每日数据段的优化,找到系统参数值。然后将找到的参数值应用于测试段后一年的样本外数据,在本例中是1994年。然后对1994年的样本外结果进行制表和保存。
接下来,数据测试窗口向前移动一年,从1990年1月1日到1994年12月31日,并找到新的最佳参数值。新的最佳参数被应用于1995年的样本外结果,并将1995年的样本外结果列表。
移动数据测试窗口每次向前走一年,为每个5年的窗口数据段创造最佳值。从这些窗口得出的最佳参数被应用于测试数据窗口以外的年份。最后,所有列表中的一年的样本外结果被合并,形成一个大的样本外结果段。这种计算密集型方法背后的理论是,可用于建模和寻找参数的价格动态会随着时间缓慢变化。假设在事情发生变化和模型崩溃之前,有足够的数据可以预测未来很短的时间。事件和技术需要时间来改变事物,所以假设使用基于前五年的最佳值将足以在未来一年使用。
在解决5年时间段的最佳参数时,参数被分成了两组。首先,我将pctup和pctdn设置为99,这有效地消除了它们。然后,我先用大步测试N、pctjup和pctjdn,然后用小步测试,因为我确定了良好的参数范围。然后将N、pctjup和pctjdn设置为最佳值,我测试pctup和pctdn的最佳值。
系统输入参数和定义
Mark=0,Mark=0意味着该头寸在最后一个条形图上没有被标记到市场。Mark=1意味着它是。
pw = 3, 多项式的顺序。2=二次型,3=立方型,等等。pw的最大值=6。
N = 40, 最小二乘法pw阶计算中的天数。这等于上述公式中的T。
pctup = 0.4, 曲线从之前的低点上升的百分比。 pctdn = 1.1, 曲线从之前的高点下降的百分比。 pctjup = 0.20, 曲线从2天前上升的百分比。
pctjdn = 1.10, 曲线比2天前减少的百分比。
为优化运行所检查的参数范围
N = 10至60,步长为5,然后是24至48,步长为2
pctup = 0.1至2,步长为0.05,数值为99时,该参数不能发布买卖信息 pctdn = 0.1至2,步长为0.05,数值为99时,该参数不能发布买卖信息 pctjup = 0.1至1.0,步长为0.05。如果数值为99,则该参数不能用于发布购买和销售pctjdn = 0.1至1.0,步长为0.05。如果数值为99,则该参数不能发布买入和卖出信息。
BP 立方系统的前进性能总结 01/04/89-12/31/97
其中
TNPft = 5年优化试验段的总净利润。
%P = 优化测试部分的盈利百分比。
MaxDD = 优化测试部分的最大日内跌幅。
LBgLTd = 优化测试部分的最大亏损交易长线。
SBgLTd = 优化测试段中最大亏损交易的空头。
1YrOpt = 曲线拟合时间段的一年的美元利润,由该时间段的最佳参数产生。这是5年时间段中最后一年的曲线拟合利润。
1YrOOS = 由前一个时间段的最佳参数产生的一年的美元利润或损失。这是该年的样本外利润。
OOS = 样本外的结果。
设置
设置工作区,如手册中的如何设置一个新的工作区与数据系列一节所述。该系统被命名为#FixedMemPoly,指标被命名为#FixedMemPoly。打开为该系统和指标设置的工作区。点击菜单栏上的 "插入"。在弹出的菜单中点击分析技术。
弹出一个题为 "插入分析技术 "的窗口。确保右侧的 "格式 "复选框被选中。点击 "系统 "选项卡。找到系统#FixedMemPoly,点击它以突出显示。点击 "绘图 "按钮。一个题为 "格式化系统 "的窗口。
#FixedMemPoly的窗口将弹出。如果你想的话,可以通过点击编辑来改变输入值,或者让它们保持不变。然后点击确定,系统的买入和卖出箭头就会显示在图表上。
要插入#FixedMemPoly指标,请遵循上述步骤,只是在插入分析技术窗口框中点击指标标签而不是系统标签,并遵循相同的步骤。该指标将显示在图表上。
函数的定义和使用
该函数被命名为$FixMemPoly。这是将系统做成二进制函数的形式。该函数在系统买入时等于+1,在系统卖出时等于-1。这个函数可以与其他系统函数的任何组合结合成一个新的系统。例如,如果function1(p1,p2,p3)是函数形式的system1,那么用户可以写下面的简单代码,将$FixMemPoly与function1组合成一个新的系统。
如果$FixMemPoly(pw,N,pctup,pctdn,pctjup,pctjdn)=1和function1(p1,p2,p3)=1则在市场上买入。
如果$FixMemPoly(pw,N,pctup,pctdn,pctjup,pctjdn)=-1并且function1(p1,p2,p3)=-1则在市场上卖出。
用户可以直接在函数中输入参数的当前值,而不是参数名称,或者用户可以为这个新组合重新优化任何参数。
参考文献
1. Meyers, Dennis. "英镑的立方体",《股票和商品的技术分析》,第16卷:,1998年11月
2. Morrison, Norman "Introduction to Sequential Smoothing and Prediction", McGraw-Hill Book Company, New York, 1969.
3. Press, William H., et al, "Numerical Recipes in C:", Cambridge Press, New York, 1993.
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
期货论坛 - 版权/免责声明
1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易 。
2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
UID 2 积分 2725616 威望 1312804 布 龙e币 1412812 刀 注册时间 2009-12-3 最后登录 2024-5-4
2 #
发表于 2022-6-13 13:35
|
只看该作者
程式码部分:{System: #FixedMemPoly}
input: Mark(1),pw(3),N(40),pctup(0.2),pctdn(1.7),pctjup(0.15),pctjdn(0.7),prc(c);
vars: ii(0),temp(0),xplus(c),jj(0),kk(0),LL(0),pwx(1),oneplus(1),oneminus(1),buystop(0),sellstop(0),h_ep(c),l_ep(c),bopos(0),oneplus2(1),oneminus2(1);
array: beta[6](0),x[100](0),lg[6,100](0);
if currentbar=1 then begin
xplus=prc;
temp=0;
LL=N-1;
pwx=pw;
if pwx>6 then pwx=6;
oneplus=1+(pctup/100);
oneminus=1-(pctdn/100);
h_ep=xplus; l_ep=xplus;
buystop=l_ep*oneplus;
sellstop=h_ep*oneminus;
oneplus2=1+(pctjup/100);
oneminus2=1-(pctjdn/100);
for ii=0 to pwx begin
for kk=0 to LL+1 begin
lg[ii,kk]=$legenPoly(ii,kk,LL);
end;
end; {ii}
end else begin
for ii=0 to LL begin jj=LL-ii;
x[jj]=prc[ii];
end;
for ii=0 to pwx begin
beta[ii]=0;
for kk=0 to LL begin
beta[ii]=beta[ii]+x[kk]*lg[ii,kk];
end;
end; {ii}
xplus=prc;
temp=0;
for ii=0 to pwx begin
temp=temp+beta[ii]*lg[ii,LL+1];
end;
xplus=temp;
{=================UP DWN %CHG from previous cls local high or low===================}
bopos=bopos[1];
if bopos[1] >= 0 then begin
if xplus > h_ep then begin
h_ep=xplus;
sellstop=h_ep*oneminus;
end;
if xplus <= sellstop and prc<xplus[1] then begin
bopos=-1;
l_ep=xplus;
buystop=l_ep*oneplus;
end;
end;{pos[1] if}
if bopos[1]<=0 then begin
if xplus < l_ep then begin
l_ep=xplus;
buystop=l_ep*oneplus;
end;
if xplus >=buystop and prc>xplus[1] then begin
bopos=1;
h_ep=xplus;
sellstop=h_ep*oneminus;
end;
end;{pos[1]<=0 if}
{end;}{ pctup=99}
if marketposition<=0 then begin
if pctup<>99 then if bopos>0 and bopos[1]<>bopos then buy("B%LSup") at market;
if pctjup<>99 then if xplus>xplus[2]*oneplus2 then begin
bopos=1;
h_ep=xplus;
sellstop=h_ep*oneminus;
buy ("B2dy%jmp") at the market;
end;
end;
if marketposition>=0 then begin
if pctdn<>99 then if bopos<0 and bopos[1]<>bopos then sell("S%LSdn") at market;
if pctjdn<>99 then if xplus<xplus[2]*oneminus2 then begin
bopos=-1;
l_ep=xplus;
buystop=l_ep*oneplus;
sell ("S2dy%jmp") at market;
end;
end;
if date=lastcalcdate and mark=1 then begin
if marketposition=-1 then exitshort("SMrkToMkt") on close;
if marketposition=1 then exitlong("LMrkToMrt") on close;
end;
end; {else} 复制代码
UID 2 积分 2725616 威望 1312804 布 龙e币 1412812 刀 注册时间 2009-12-3 最后登录 2024-5-4
3 #
发表于 2022-6-13 13:37
|
只看该作者
运行效果图:
UID 2 积分 2725616 威望 1312804 布 龙e币 1412812 刀 注册时间 2009-12-3 最后登录 2024-5-4
4 #
发表于 2022-6-13 13:42
|
只看该作者