c语言递推公式原理,【图】指标高手的进阶之-公式迭代(原理及应用)_迭代法怎么求收敛阶,牛顿切线法迭代公式,迭代公式,迭代算法,递推公式_指标编写互助答疑论坛_理想论坛 - 股票论坛...

在掌握了公式语言的一些常用编写方法之后,进阶之路在哪里呢?它们分别是公式分支、公式循环、公式数组、公式迭代和公式接口,只有进一步学习这些高级编程技巧,才能真正达到编写中所思便所得的自如境界。在这其中,比较难以理解的是公式迭代,但一旦掌握将会为我们解决很多过去无法解决的问题。

公式迭代就是公式语言中的迭代算法,迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

我们在做证券分析时常常会用到迭代算法,比如:

EMA求指数平滑移动平均。

用法:

EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)

则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。

今日指数平滑移动平均线等于昨日指数平滑移动平均线乘上(N-1)加上近日收盘价乘2,然后再除以N+1。涉及迭代的问题还包括SMA、DMA、MEMA等。所谓迭代,就是用上一周期的数值来计算本周期的数值。迭代公式就是指用现在的值,代到一个公式里面,算出下一个值再用下一个值代入公式,如此往复地代。

以EMA为例:

e:=(2*c+(n-1)*e)/(n+1);

我们只需按照其原理直接写入就可以了,简单吧!下面就来分析一下为什么可以这么写?赋值符号“:=”左边的e表示本周期的数值,而右边的e由于还没有赋值,仍保持为上一周期的数值,也就是说e还维持着上次计算的结果,它等同于ref(e,1)。

那么,计算第一天的时候,e的数值是多少呢?其初始变量设为0?显然如此设定是不正确,因为e等于0的话,计算结果就等于close/n,这当然不是第一天的均值,因此我们需要作如下说明,完整的写法要这样:

{ema}

INPUT:n(5,0,1000);

VARIABLE:e=0;

e:if(barpos=1,c,(2*c+(n-1)*e)/(n+1));

当计算第一天的时候,e等于收盘价,后面的等于指数平滑移动平均。

迭代应用实例1:MACD(平滑异同平均线)

{macd}

INPUT:long(26,20,100),short(12,5,40),m(9,2,60);

VARIABLE:e=0,e1=0,dea=0;

e:=if(barpos=1,c,(2*c+(short-1)*e)/(short+1));

e1:=if(barpos=1,c,(2*c+(long-1)*e1)/(long+1));

diff:e-e1;

dea:(2*diff+(m-1)*dea)/(m+1);

macd:2*(diff-dea),colorstick;

迭代应用实例2:

我们在学习成本分布原理的时候,常会看到下面一段文字:

成本分布原理:

投资者一般对股票平均成本感兴趣,移动平均MA、指数平滑移动平均EMA等算法都是计算股票平均成本的算法,但是这些算法没有考虑到成交量对平均成本的影响。例如,假设最近一段时间某股票在10-20元间波动,其平均价MA为15元,但观察其成交量发现在20元附近成交量巨大,而在10元附近成交量较少,我们认为其平均成本显然应该比15元更高才合理。为此我们可以引入换收率移动平均概念;以当天的换手率作为平滑因子计算指数平滑移动平均,用公式来表示为:

Y=(1-A)*Y'+A*C

其中A表示换手率,C表示收盘价,Y和Y'分别表示今日平均价和昨日平均价。

加权平均的计算方法是:∑aX,其中X位待统计数值,a为X占总量的比例。当日的平均成本Y可以表示为两个部分,当日买入的和以前买入的,当日买入的成本为收盘价C,以前买入的成本为Y',而当日买入的占总流通盘的比例为换收率A,而以前买入的则占1-A,因此今日的加权平均成本为(1-A)*Y'+A*C。因此,用这个公式更能反映股票的真实成本。

查阅指标函数,我们找到了这样一个函数:

DMA求动态移动平均。

用法:

DMA(X,A),求X的A日动态移动平均。

算法: 若Y=DMA(X,A)

则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。

例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价

显然DMA(CLOSE,VOL/CAPITAL)就是成本分布中的加权平均成本(1-A)*Y'+A*C。

用迭代可以这样表述:

VARIABLE:y=0;

a:=vol/capital;

y:if(barpos=1,c,(1-a)*y+a*c);

迭代应用实例3:

有一求助贴

请问老师如何定义可以一直递归到开盘第一天的递归函数?

本文来自:理想论坛 www.55188.com 作者:天赢 浏览:164次

________________________________________

如何有递归函数需要一个公式 F: IF (是开盘日前一日 就返回发行价,((流通盘- vol)* REF(F,1)+close*vol)/流通盘);   可以一直递归到开盘第一天的

https://www.55188.com/viewthread.php?tid=4086339&page=1#pid84240961

这个命题用迭代可以完美的解决,同样的命题用C语言写,迭代的运算速度会大大超过递归。说到运算速度,有人会问迭代算法用在公式语言中会不会很慢,答案是否定的。无论是分析家还是在使用某些循环公式慢如蜗牛的大智慧,既是在不联网、不下载本地数据的情况下,使用迭代运算速度都非常的快。

好了,上面提到过在公式语言中用到迭代的还有SMA、DMA、MEMA、TMA等,现在就可以自己来动手试试,就算留道算术题吧,成功了!那么恭喜你---您进阶了!

注:二楼给出了SMA、DMA、MEMA、TMA的迭代公式写法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值