线性回归渠道 - 页 17 1...101112131415161718 新评论 ANG3110 2019.08.29 03:20 #161 我愿意相信,许多功能可以通过加速计算来实现。比如从一个时期的末尾减去一个值,然后在开头加上一个新的值,没有循环。 特别是,这里有一个例子,你可以计算几种类型的过滤器,从简单的挥舞到线性回归,没有一个周期。 #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrDeepSkyBlue,clrBisque #property indicator_width1 2 //******************************************************************** input int p = 24; input double N = 3; //******************************************************************** double ss[],col[]; double ci,sum1,sum2,c1,c2,mai,lwi,fxi; int w,fs; //******************************************************************** int OnInit() { SetIndexBuffer(0,ss,INDICATOR_DATA); SetIndexBuffer(1,col,INDICATOR_COLOR_INDEX); //------------------------------------------ PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrDeepSkyBlue); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBisque); //------------------------------------------ return(INIT_SUCCEEDED); } //******************************************************************** int OnCalculate(const int rates_total,const int prev_calculated, const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[], const long &tick_volume[],const long &volume[],const int &spread[]) { //-------------------------------------------------------- if (prev_calculated==rates_total) return(rates_total); int start=prev_calculated; if (prev_calculated==0) { start=p; int k=0; w=0; sum1=0; sum2=0; for(int j=p-1; j>=0; j--) { k++; ci=open[start-j]; sum1+=ci; sum2+=k*ci; w+=k; } mai=sum2/w; ss[start]=mai; ci=open[start]; sum1-=ci; sum2-=ci*p; start++; } //-------------------------------------------------------- for(int i=start; i<rates_total; i++) { c1=open[i-1]; c2=open[i-p]; sum1+=c1-c2; sum2+=c1*p-c2-sum1; ci=open[i]; lwi=(sum2+ci*p)/w; mai=(sum1+ci)/p; fxi=mai+(lwi-mai)*N; ss[i]=fxi; if (ss[i]>ss[i-1]) fs=0; else if (ss[i]<ss[i-1]) fs=1; if (fs==0) col[i]=0; else col[i]=1; } //-------------------------------------------------------- return(rates_total); } //******************************************************************** 这里的N=0--正常SMA,N=1--线性加权,N=3--线性回归。而且你也可以得到中间值,因为N是小数。我也以类似的方式计算了RMS。我认为多项式回归也可以用同样的方式进行。这将是一种实际的需要。 至少,我还没有设法在盈利的专家顾问系统中使用多项式回归。EMA上的通道更简单,而且在实践中运作良好。 这里是一个略带矫揉造作的对mq4的线性回归的变体,其RMS没有周期。在启动时有一次循环,或者更准确地说,在计算第一组数值时有一次循环,仅此而已,--然后只有和和差。当然,它比使用周期要快得多。 一个微妙之处在于,周期是以小时为单位指定的,在切换时间框架时要重新计算。 #property strict #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 clrDodgerBlue #property indicator_color2 clrOrangeRed #property indicator_color3 clrLavender #property indicator_color4 clrLavender #property indicator_color5 clrMediumAquamarine #property indicator_color6 clrMagenta #property indicator_width1 2 #property indicator_width2 2 #property indicator_style5 2 #property indicator_type1 DRAW_LINE #property indicator_type2 DRAW_LINE #property indicator_type3 DRAW_LINE #property indicator_type4 DRAW_LINE #property indicator_type5 DRAW_LINE #property indicator_type6 DRAW_LINE //=========================== extern double hrLR = 12; extern double ksq = 1; extern int i0 = 1; extern int SPR = 1; //=========================== double ss[],ssL[],sH[],sL[],ma[],sU[]; double lri,sq,mai,ui,spr2; int p,fs; //****************************************************************** int init() { SetIndexBuffer(0,ss); SetIndexBuffer(1,ssL); SetIndexEmptyValue(1,0); SetIndexBuffer(2,sH); SetIndexBuffer(3,sL); SetIndexBuffer(4,ma); SetIndexBuffer(5,sU); //-------------------- p=int(hrLR*60/Period()); if (p<3) p=3; if (SPR<0) spr2=-SPR*Point/2; return(0); } //****************************************************************** int start() { int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1); if (i0==1 && cbi==0) return(0); if (cbi==1) cbi=0; if (SPR>0) spr2=NormalizeDouble(Ask-Bid,Digits)/2; if (cbi>1) { cbi=Bars-p-1; af_LR0(0,cbi); ui=mai; } //------------------------------ for(int i=cbi; i>=0; i--) { lri=af_LR0(1,i); ss[i]=lri; sH[i]=lri+sq; sL[i]=lri-sq; ma[i]=mai; if (sL[i]>ui) ui=sL[i]; else if (sH[i]<ui) ui=sH[i]; sU[i]=ui; if (ss[i]>ss[i+1]) fs=1; if (ss[i]<ss[i+1]) {if (fs==1) ssL[i+1]=ss[i+1]; fs=2;} if (fs==2) ssL[i]=ss[i]; else if (fs==1) ssL[i]=0.0; } return(0); } //******************************************************************** double af_LR0(int index, int i) { static double sx,syp,sxy,syyp,S; double ci=0,c1=0,cp=0,sy,syy,aa,bb; static int ti; if (index==1) { if (ti!=Time[i]) { if (i0==0) {c1=Close[i+1]+spr2; cp=Close[i+p]+spr2;} else if (i0==1) {c1=Open[i+1]+spr2; cp=Open[i+p]+spr2;} else if (i0==2) {c1=(High[i+1]+Low[i+1])/2+spr2; cp=(High[i+p]+Low[i+p])/2+spr2;} sxy+=syp+c1-p*cp; syp+=c1-cp; syyp+=c1*c1-cp*cp; ti=int(Time[i]); } } else { int j; double sxx; sx=0.0; sxx=0.0; for (j=0; j<p; j++) {sx+=j; sxx+=j*j;} S=sx*sx-p*sxx; syp=0.0; sxy=0.0; syyp=0.0; for (j=1; j<p; j++) { if (i0==0) ci=Close[i+j]+spr2; else if (i0==1) ci=Open[i+j]+spr2; else if (i0==2) ci=(High[i+j]+Low[i+j])/2+spr2; syp+=ci; sxy+=j*ci; syyp+=ci*ci; } ti=int(Time[i]); } if (i0==0) ci=Close[i]+spr2; else if (i0==1) ci=Open[i]+spr2; else if (i0==2) ci=(High[i]+Low[i])/2+spr2; sy=syp+ci; syy=syyp+ci*ci; aa=(sx*sy-p*sxy)/S; bb=(sy-aa*sx)/p; sq = (syy - aa*sxy - bb*sy)/(p-2); if (sq>=0) sq = MathSqrt(sq)*ksq; mai=sy/p; return(bb); } //******************************************************************** Nikolai Semko 2019.08.29 03:51 #162 Yousufkhodja Sultonov: 为什么费多谢耶夫会自我离去,推理正确? 因为他的推理是不正确的。 阅读该主题。 Даниил Минин 2019.08.29 04:09 #163 "无环 "对你有什么作用? 它能在多大程度上加快代码执行速度? ANG3110 2019.08.29 04:17 #164 danminin: "无环 "对你有什么作用?它能使你的代码运行快多少? 事实上,有很多。我曾经用GetTickCount() 来测量它。但是,当你需要做大量的优化时,它就很明显了。一件事是当你必须在几个小时内计算大量的变体时,另一件事是当你必须在几十分钟或几单位的时间内完成。但这很少需要。这就是为什么你可能不会太在意它。 Nikolai Semko 2019.08.29 04:32 #165 ANG3110: 我愿意相信,许多功能可以通过加速计算来实现。比如从一个时期的末尾减去一个数值,然后在开头加上一个新的数值,没有循环。 特别是,这里有一个例子,你可以计算几种类型的过滤器,从简单的挥舞到线性回归,没有循环。 这里的N=0--正常SMA,N=1--线性加权,N=3--线性回归。而且你也可以得到中间值,因为N是小数。我也以类似的方式计算了RMS。我认为多项式回归也可以用同样的方式进行。这将是一种实际的需要。至少,我还没有设法在盈利的专家顾问系统中使用多项式回归。 EMA上的通道更简单,而且在实践中运作良好。 这里是mq4中线性回归的一个稍加修改的变体,有RMS无循环。在启动时有一次循环,或者更准确地说,在计算第一个读数时有一次循环,就是这样--然后只有和与差。当然,它的计算速度比用周期计算快很多倍。 是的,这是正确的。这是线性回归中无周期RMS计算的一个真实例子。 的确,在算法的某个地方有一个小错误,导致所有三条线(通道的中心、上限和下限)都向上移动。 ANG3110 2019.08.29 04:42 #166 Nikolai Semko: 是的,这是正确的。这是线性回归中无周期RMS计算的一个真实例子。 的确,在算法的某个地方有一个小错误,导致所有三条线(通道的中心、上限和下限)都向上移动。 而这只是一半的价差加起来。我曾经这样做过,以测试一个交易专家顾问,使之与 "要价 "相对应。如果你设置SPR=0,就不会有偏移。它将纯粹以投标价格计算。 Nikolai Semko 2019.08.29 04:44 #167 danminin: 这个 "无环 "对你有什么作用? 它能使你的代码运行快多少? 仅仅是有效值的计算就可以得到大约10到1000倍的增益,这取决于周期。 Nikolai Semko 2019.08.29 04:46 #168 ANG3110: 而且还只是加入了一半的价差。我曾经这样做是为了测试一个交易专家顾问,以使其相对于 - Ask-Bid的对齐方式。如果我们设置SPR=0,就不会有偏移。它将纯粹以投标价格计算。 是的,没错。与我的线性回归 实现完全匹配。 [删除] 2019.08.29 05:24 #169 Yousufkhodja Sultonov: 苏尔托诺夫指标表现如何?它是否已经打破了外汇的背面,还是正在进行中? Yousufkhodja Sultonov 2019.08.29 09:55 #170 Vladimir Baskakov: 苏尔托诺夫指标表现如何?它是否已经打破了外汇的背面,或正在这样做? 该指标在UPU的1美分真实账户 上工作,在 "运行和忘记 "的基础上,存款为48美分。第二个月它一直在50左右徘徊,显然是在等待时机。在外汇市场上不可能每年获得超过10%的收益,稳定且无风险,前提是多年的利润再投资--这些是我对外汇市场骨干的结论。8年前的草率结论被市场的现实打碎了。强大的通用回归模型惨遭失败,产生了银行般的利润。除了市场因素,URM在所有技术、社会、采矿(从贫瘠的矿石中提取黄金)和其他过程方面都做得很好。结论是,回归模型从市场中提取利润的潜力有限。 1...101112131415161718 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我愿意相信,许多功能可以通过加速计算来实现。比如从一个时期的末尾减去一个值,然后在开头加上一个新的值,没有循环。
特别是,这里有一个例子,你可以计算几种类型的过滤器,从简单的挥舞到线性回归,没有一个周期。
这里的N=0--正常SMA,N=1--线性加权,N=3--线性回归。而且你也可以得到中间值,因为N是小数。我也以类似的方式计算了RMS。我认为多项式回归也可以用同样的方式进行。这将是一种实际的需要。 至少,我还没有设法在盈利的专家顾问系统中使用多项式回归。EMA上的通道更简单,而且在实践中运作良好。
这里是一个略带矫揉造作的对mq4的线性回归的变体,其RMS没有周期。在启动时有一次循环,或者更准确地说,在计算第一组数值时有一次循环,仅此而已,--然后只有和和差。当然,它比使用周期要快得多。 一个微妙之处在于,周期是以小时为单位指定的,在切换时间框架时要重新计算。
为什么费多谢耶夫会自我离去,推理正确?
因为他的推理是不正确的。
阅读该主题。
它能在多大程度上加快代码执行速度?
"无环 "对你有什么作用?它能使你的代码运行快多少?
我愿意相信,许多功能可以通过加速计算来实现。比如从一个时期的末尾减去一个数值,然后在开头加上一个新的数值,没有循环。
特别是,这里有一个例子,你可以计算几种类型的过滤器,从简单的挥舞到线性回归,没有循环。
这里的N=0--正常SMA,N=1--线性加权,N=3--线性回归。而且你也可以得到中间值,因为N是小数。我也以类似的方式计算了RMS。我认为多项式回归也可以用同样的方式进行。这将是一种实际的需要。至少,我还没有设法在盈利的专家顾问系统中使用多项式回归。 EMA上的通道更简单,而且在实践中运作良好。
这里是mq4中线性回归的一个稍加修改的变体,有RMS无循环。在启动时有一次循环,或者更准确地说,在计算第一个读数时有一次循环,就是这样--然后只有和与差。当然,它的计算速度比用周期计算快很多倍。
是的,这是正确的。这是线性回归中无周期RMS计算的一个真实例子。
的确,在算法的某个地方有一个小错误,导致所有三条线(通道的中心、上限和下限)都向上移动。
是的,这是正确的。这是线性回归中无周期RMS计算的一个真实例子。
的确,在算法的某个地方有一个小错误,导致所有三条线(通道的中心、上限和下限)都向上移动。
这个 "无环 "对你有什么作用?
它能使你的代码运行快多少?
仅仅是有效值的计算就可以得到大约10到1000倍的增益,这取决于周期。
而且还只是加入了一半的价差。我曾经这样做是为了测试一个交易专家顾问,以使其相对于 - Ask-Bid的对齐方式。如果我们设置SPR=0,就不会有偏移。它将纯粹以投标价格计算。
是的,没错。与我的线性回归 实现完全匹配。
苏尔托诺夫指标表现如何?它是否已经打破了外汇的背面,或正在这样做?
该指标在UPU的1美分真实账户 上工作,在 "运行和忘记 "的基础上,存款为48美分。第二个月它一直在50左右徘徊,显然是在等待时机。在外汇市场上不可能每年获得超过10%的收益,稳定且无风险,前提是多年的利润再投资--这些是我对外汇市场骨干的结论。8年前的草率结论被市场的现实打碎了。强大的通用回归模型惨遭失败,产生了银行般的利润。除了市场因素,URM在所有技术、社会、采矿(从贫瘠的矿石中提取黄金)和其他过程方面都做得很好。结论是,回归模型从市场中提取利润的潜力有限。