RSS1RSS2 加入收藏
股票 必读教材第一步:新手疑惑第二步:开户买股第三步:必要名词第四步:看盘基础第五步:股市常识第六步:炒股书籍第七步:视频学习终极操盘 知识
您当前的位置:首页 > 股票软件 > 公式编辑教程
软件名称: 倚天财经公式编辑指南--引用函数
整理时间: 2015-07-11
界面语言: 简体中文
软件类型: 公式编辑教程
运行环境: Win9X/Win2000/WinXP/Win2003/Win7/Win8/Win10
授权方式: 免费版
软件大小: 0 Bytes
软件等级:
软件登陆: admin
作 者 : 58gu.com小编
官方网址: 官方站
程序演示: 演示
软件简介:  
引用函数引用函数主要是向前引用数据。BACKSET可以理解为向后引用某些判断信号,并不能引用具体数据。
股市技术分析主要是根据已经发生的数据,来推测未来走向的可能,所以引用函数在公式中应用得最多

函数:COUNT(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。
示例:COUNT(CLOSE>OPEN,20)
表示统计20周期内收阳的周期数
函数:SUM(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:统计N周期中X的总和,N=0则从第一个有效值开始。
示例:SUM(VOL,0)
表示统计从上市第一天以来的成交量总和
COUNT,计数。SUM,总数、和。
当数组为逻辑运算判断的结果时,COUNT和SUM的返回值是一样的。一般习惯上,对于逻辑运算信号,用COUNT统计,返回其它数值的,用SUM统计。当COUNT统计一般数值时,数组大于等于1时,计入;小于1时,不计入。这两个函数,主要用于统计。
用COUNT(CROSS(MA(C,5),MA(C,10)),0);就可以统计出全部的五天均线上穿十天均线的金叉数。
用SUM(CROSS(MA(C,5),MA(C,10)),0);和以上得出的结果应该是一样的。
股市的不随机规律,隐藏在统计概率之中。用这两个函数,可以统计很多概率性的规律。
比如,以两天的收盘价相比,昨天是下跌的,今天的下跌的概率是多少?
A:=C<REF(C,1);
B:=REF(A,1)ANDC>REF(C,1);{昨天下跌,今天上涨}
D:=REF(A,1)ANDC=REF(C,1);{昨天下跌,今天平盘}
E:=REF(A,1)ANDC<REF(C,1);{昨天下跌,今天下跌}
F:=COUNT(B,0)+COUNT(D,0)+COUNT(E,0);
上升概率:100*COUNT(B,0)/F;
下跌概率:100*COUNT(E,0)/F;
平盘概率:100*COUNT(D,0)/F;
从两市指数看,昨天下跌,今天下跌的概率始终大于50%。
那么连跌两天之后,第三天收盘的各种概率是多少?
A:=C<REF(C,1)andref(c,1)<ref(c,2);
B:=REF(A,1)ANDC>REF(C,1);{前两天下跌,今天上涨}
D:=REF(A,1)ANDC=REF(C,1);{前两天下跌,今天平盘}
E:=REF(A,1)ANDC<REF(C,1);{前两天下跌,今天下跌}
F:=COUNT(B,0)+COUNT(D,0)+COUNT(E,0);
上升概率:100*COUNT(B,0)/F;
下跌概率:100*COUNT(E,0)/F;
平盘概率:100*COUNT(D,0)/F;
从指数的输出看,概率更明显了。
连跌三天之后呢?
A:=C<REF(C,1)andref(c,1)<ref(c,2)andref(c,2)<ref(c,3);
B:=REF(A,1)ANDC>REF(C,1);{前三天下跌,今天上涨}
D:=REF(A,1)ANDC=REF(C,1);{前三天下跌,今天平盘}
E:=REF(A,1)ANDC<REF(C,1);{前三天下跌,今天下跌}
F:=COUNT(B,0)+COUNT(D,0)+COUNT(E,0);
上升概率:100*COUNT(B,0)/F;
下跌概率:100*COUNT(E,0)/F;
平盘概率:100*COUNT(D,0)/F;
规律就更明显了。
不要小看这些数据。虽然没有有些“高手”做出的成功率达百分之九十左右的公式那么夸张,但很有意义的。要知道股市中的随机因素太多,平衡性很强,稍稍的统计偏向,足可作为有用的参考。
这只是简单的例子,用这两个函数,可以做出很多的有用的统计数据。
多数的交易系统的“胜率”,可以由此统计出来。
出个“难题”吧:
有个MA5金叉MA10作为买入条件,死叉为卖出条件的交易系统,试做一个副图公式,以每次买一股计算,统计出最后的交易结果(暂不考虑手续费)。买入卖出均以收盘价计算。



函数:REF(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:引用N周期前的X值。
示例:REF(CLOSE,1)
表示上一周期的收盘价,在日线上就是昨收
REF:REFERENCED,参考的、引用的。
N可以为变量,常用BARSLAST(X)等。

函数:MA(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:求X的N日移动平均值。
算法:(X1+X2+X3+...+Xn)/N
示例:MA(CLOSE,10),表示求10日均价
MA:MOVING AVERAGE,移动平均。
目前倚天的MA(X,N)函数支持N为序列变量。
这个简单移动平均值,仅仅覆盖最近的N个周期,并且在每个周期中分配的权重是一模一样的,均为1/N。
移动平均线实质上是一种追踪趋势的工具,而且滞后于市场的变化。这些结果的原因,就是它的计算方法了。
从输出看,N所取周期越长,曲线就越平滑。
平滑和敏感是一对矛盾,请看:
A:MA(C,5);
B:MA(A,5);
D:MA(B,5);{主图叠加}
输出线越来越平滑,但敏感性越来越差。

两条简单移动平均线的交叉,何时、何地所选的参数最优,可以参考倚天中的“探索最佳参数”功能。
线性加权移动平均值的算法函数,倚天并未提供。
以五天的线性加权移动平均的算法为例:
五天线性加权:(C*5+REF(C,1)*4+REF(C,2)*3+REF(C,3)*2+REF(C,4)*1)/(5+4+3+2+1);
MA(C,5);{主图叠加}
由于算法的原因,线性加权移动平均线由于日子越近的权重越大,比简单移动平均线,跟随趋势要紧密一些,敏感一些。

函数:EMA(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:求X的N日指数平滑移动平均。
算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。
示例:EMA(CLOSE,30)
表示求30日指数平滑均价
EMA中的E,可能是EXPONENT,指数、幂。
把算法写成这个样子:Y=2*X/(N+1)+(N-1)/(N+1)*Y',就可以看出,当前周期数组值所占的权重是2/(N+1),而上一周期Y值所占的权重是(N-1)/(N+1)。注意,这两个权重相加,结果为1:2/(N+1)+(N-1)/(N+1)=1。
由于一个很经典的指标指数平滑异同平均线MACD(1979年就发明出来了)里面,要用到EMA,才使EMA还在基本函数中占有一席之地。后面我们可以看到,用SMA也可以达到相同的算法。
N可以取到1,不过输出就没有加权的效果了。

函数:SMA(X,N,M)
参数:X为数组,N为计算周期,M为权重
返回:返回数组
说明:求X的N日移动平均,M为权重。
算法:若Y=SMA(X,N,M)则Y=[M*X+(N-M)*Y')/N,其中Y'表示上一周期Y值,N必须大于M。
示例:SMA(CLOSE,30,1)
表示求30日移动平均价
SMA中的S,不会是SIMPLE(简单)的意思吧?由于我们习惯称MA为简单移动平均线,所以称SMA为什么就大伤脑筋。
把算法写成这个样子:Y=M/N*X+(N-M)/N*Y',就可以看出,当前周期数组值所占的权重是M/N,而上一周期Y值所占的权重是(N-M)/N。注意,这两个权重相加,结果为1:M/N+(N-M)/N=1。
看出来了吧?SMA(X,N+1,2)=EMA(X,N);
A:SMA(C,N+1,2);
B:EMA(C,N);{N:5,2,99。主图叠加}
两条线输出一样。在SMA的参数中,N必须大于M,否则没有输出。
SMA中,数组每天所占的权重,是较为复杂的。总的来说,日子越近,所占的权重越大,当天所占的权重是M/N,前一天所占的权重是M*(N-M)/(N*N);日子越远,所占的权重就越小,上市第一天的K线数据中,在目前还有权重的体现,不过已经非常非常小了。
SMA看似解决了MA的两大缺点:1、只有N天内的数据占有权重;2、N天内数据所占权重比重一样。有所得必有所失,SMA自己的缺点体现在光滑有余,敏感不足。
有一项检测系统得出的结论称:“简单移动平均值方法既胜过线性加权平均值法,也胜过指数加权平均值法。”(<期货市场技术分析>P231),当然他们不是检测中国股市。有兴趣的朋友,可以用这些移动平均函数,做出交易系统,然后进行检测。

函数:DMA(X,A)
参数:X为数组,A为计算周期
返回:返回数组
说明:求X的动态移动平均。
算法:若Y=DMA(X,A)则Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。
示例:DMA(CLOSE,VOL/CAPITAL)
表示求以换手率作平滑因子的平均价
呵呵,均线函数还有。
DMA中的D,是中文的拼音:DONG。也可能是DYNAMIC。
这个函数,与SMA是一家的,看:
Y=M/N*X+(N-M)/N*Y';
Y=A*X+(1-A)*Y';
前者说,N必须大于M,后者说,A必须小于1。然后两者就一样了:A=M/N。
说“A为计算周期”似乎不妥,A明明要取小数才行。DMA在第一根K线就开始起算,SMA要到第二根K线开始起算。

函数:HHV(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:求N周期内X最高值,N=0则从第一个有效值开始。
示例:HHV(HIGH,30)
表示求30日最高价
函数:HHVBARS(X,N)
返回:X为数组,N为计算周期
参数:返回数组
说明:求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计
示例:HHVBARS(HIGH,0)
求得历史新高到到当前的周期数
这两个函数一起用,可以找到当前N天中的最高点。
A:=BACKSET(ISLASTPERIOD,HHVBARS(H,N)+1);
B:=COUNT(A,N)=1;{取得前N个周期内的最高点位置}
REF(H,BARSLAST(B));
DRAWICON(B,H,1),ALIGN2;{主图叠加。N:30,1,9999}

函数:LLV(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:求N周期内X最低值,N=0则从第一个有效值开始。
示例:LLV(LOW,0)
表示求历史最低价
函数:LLVBARS(X,N)
参数:X为数组,N为计算周期
返回:返回数组
说明:求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计
示例:LLVBARS(HIGH,20)
求得20日最低点到当前的周期数
当前N天之内的最高点和最低点就一目了然了:
A:=BACKSET(ISLASTPERIOD,HHVBARS(H,N)+1);
B:=COUNT(A,N)=1;{取得前N个周期内的最高点位置}
REF(H,BARSLAST(B));
DRAWICON(B,H,1),ALIGN2;
A2:=BACKSET(ISLASTPERIOD,LLVBARS(L,N)+1);
B2:=COUNT(A2,N)=1;{取得前N个周期内的最低点位置}
REF(L,BARSLAST(B2));
DRAWICON(B2,L,2),ALIGN1;{主图叠加。N:30,1,9999}
A:=BACKSET(ISLASTPERIOD,HHVBARS(H,N)+1);
B:=COUNT(A,N)=1;{取得前N个周期内的最高点位置}
REF(H,BARSLAST(B));
DRAWICON(B,H,1),ALIGN2;
A2:=BACKSET(ISLASTPERIOD,LLVBARS(L,N)+1);
B2:=COUNT(A2,N)=1;{取得前N个周期内的最低点位置}
REF(L,BARSLAST(B2));
DRAWICON(B2,L,2),ALIGN1;{主图叠加。N:30,1,9999}
这个公式求前期高低点,在600036等次新股上试调整参数就露马脚了,并不完善。
问题出在HHVBARS起算点等原因上。
南客刚发表了一个公式,就顺手牵羊牵过来吧。这个公式可以说是完美解决方案:
HH:HHV(H,N),LINETHICK2;
LL:LLV(L,N),LINETHICK2;{主图叠加,参数N:30,1,9999}
<%
VH=FFL.VARDATA("HH")
VL=FFL.VARDATA("LL")
VN=FFL.VARDATA("N")
LAST=UBOUND(VH)
IFVN>LASTTHENVN=LAST+1
FORI=LASTTOLAST-VN+1STEP-1
VH(I)=VH(LAST)
VL(I)=VL(LAST)
NEXT
FFL.VARDATA("HH")=VH
FFL.VARDATA("LL")=VL
FFL.VARSTARTINDEX("HH")=LAST-VN+1
FFL.VARSTARTINDEX("LL")=LAST-VN+1
%>
当N个周期之内,有两个最高价,即有等高的情况出现,HHVBARS会返回哪个最高价到当前的周期数呢?
用副图公式观察一下,N取10:
HHVBARS(H,N);
如图,我们可以得出结论,返回的是前一个最高价到当前的周期数。
同样,当在N个周期之内,有两个等低的最低价出现时,LLVBARS会返回前一个最低价到当前的周期数。

函数:SUMBARS(X,A)
参数:X为数组
返回:返回数组
说明:将X向前累加直到大于等于A,返回这个区间的周期数
示例:SUMBARS(VOL,CAPITAL)
求完全换手到现在的周期数
这个函数好用,在于它不但能精确地得到统计结果,而且能得到“模糊”的结果。
就以SUMBARS(VOL,CAPITAL)为例:
日期数:SUMBARS(VOL,CAPITAL);{返回成交量累加到流通盘的日期数}
验证:SUM(V,日期数)/CAPITAL;{把返回的日期数之内的成交量累计,再除以流通盘}
运行的结果中,我们可以看到,“验证”的输出,除了SUMBARS起算点附近之外,从来没有小于1的。可见SUMBARS只往多算,不往少算,非常“精明”。

函数:BARSCOUNT(X)
参数:X为数组
返回:返回数组
说明:第一个有效数据到当前的天数
示例:BARSCOUNT(CLOSE)
对于日线数据取得上市以来总交易日数,对于分笔成交取得当日成交笔数,对于1分钟线取得当日交易分钟数
BARS是什么?我们看到,关于取得相隔时间周期的函数中,多数以BARS开头。
查字典,BAR的意思有很多,有条、条形、酒巴、巴等。后来才恍然大悟:相隔时间周期,不就是中间相隔几根条形K线么?
BARSCOUNT(X)是第一个有效数据到当前的天数。那么什么是有效数据?
A:BACKSET(ISLASTPERIOD,10);
零:BARSCOUNT(A);
很小:BARSCOUNT(C/10000000000000);
负数:BARSCOUNT(-C);
不存在:BARSCOUNT(MA(C,10));
可见,有效数据并不是全是大于等于1的数据,只要有输出的数据,不管是零,还是负数,均为有效数据。
而MA(C,10)是从第十根K线开始起算的,所以一直要到第十根K线,BARSCOUNT(MA(C,10))才输出1。
这样找一些指标的起算点时间位置,用BARSCOUNT函数就很管用了。
一般找第一根K线的位置,就可以写为BARSCOUNT(C)=1;

函数:BARSSINCE(X)
参数:X为数组
返回:返回数组
说明:第一次X不为0到现在的天数
示例:BARSSINCE(HIGH>20)
表示股价第一次超过20元时到当前的周期数
SINCE,自...以后。BARSSINCE和BARSCOUNT很象,不过它找的是非零信号。
A:BACKSET(ISLASTPERIOD,10);
零:BARSsince(A);
很小:BARSsince(C/10000000000000);
负数:BARSsince(-C);
不存在:BARSsince(MA(C,10));
可见,零和无效数据,均不被计数。一般BARSSINCE是针对逻辑运算的结果的,因为逻辑运算的结果输出,不是0,就是1。

函数:BARSLAST(X)
参数:X为数组
返回:返回数组
说明:上一次X不为0到现在的天数
示例:BARSLAST(CLOSE/REF(CLOSE,1)>=1.1)
表示上一个涨停板到当前的周期数
条件满足的当前周期,BARSLAST返回0。
是“不为0”到现在的天数么?运行这个公式试试:
A:=C>O;
A1:=0.5*A;
A2:=3*A;
A3:=-3*A;
一:BARSLAST(A1);
二:BARSLAST(A2);
三:BARSLAST(A3);
如图,“一”根本就没有输出。初步可得出结论:其绝对值大于等于1的数组信号,BARSLAST(数组)才有输出。

函数:BACKSET(X,N)
参数:X为数组,N为正整数
返回:返回数组
说明:若X非0,则将当前位置到N周期前的数值设为1。
示例:BACKSET(CLOSE>OPEN,2)
若收阳则将该周期及前一周期数值设为1,否则为0
如果公式检测出来有未来数据,则BACKSET是第一个嫌疑。
BACKSET是往前倒推信号(数据1)的,仅此而已。由于所有基本函数都是序列变量,所以要用基本函数,把当前的数据(比如最高价)往前推是做不到的。所以说,基本函数要往后引用具体数据是做不到的,往后引用信号是可能用BACKSET做到的。
说BACKSET不可或缺,是因为用基本函数在找历史峰点等公式中,如果没有它将一筹莫展。
这个“说明:若X非0,则将当前位置到N周期前的数值设为1。”有点问题,如果数组X是逻辑运算的结果是对的,如果不是就难说了,比如:
A:BACKSET(0.1*ISLASTPERIOD,10);
B:BACKSET(100*ISLASTPERIOD,20);
D:B>REF(B,1);
“A”的输出全为0,“B”的输出就正常了。

函数:FILTER(X,N)
参数:X为数组,N为正整数
返回:返回数组
说明:过滤连续出现的信号,X满足条件后,删除其后N周期内的数据置为0
示例:FILTER(CLOSE>OPEN,5)
查找阳线,5天内再次出现的阳线不被记录在内
如果说BACKSET能够向后引用信号,那么FILTER就能向后过滤信号--即把有效信号去掉。比如N取3,就把以后3个周期内的有效信号去掉了,所以从连续信号上看,两个信号之间的间隔不可能小于3的。用这个公式观察一下就容易明白了:
A:=C>O;
FILTER(A,3);

举两个综合运用引用函数的例子。
1、RSI(相对强弱指标(RelativeStrenthIndex),1978年由韦尔斯•王尔德发明)
A、倚天的反趋向指标中的RSI是这样写的:
LC:=REF(CLOSE,1);
RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;
RSI2:SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100;
RSI3:SMA(MAX(CLOSE-LC,0),N3,1)/SMA(ABS(CLOSE-LC),N3,1)*100;
{N1:6,2,100N2:12,2,100N3:24,2,100}
RSI1、RSI2、RSI3三根线是一样的算法,只是所取参数不同。
MAX,在两者之间取大者。ABS,取绝对值。以日K周期为例,LC是昨天的收盘价,C-LC即为两天之间的收盘价差值。
RSI的分母是这个差值的绝对值,进行指数加权平均处理。
RSI的分子是上涨中的差值,进行指数加权平均处理。
分子所占分母的比重的百分比,即得出RSI的值。
B、原始RSI的算法是这样的:
设A为N天内上涨收盘价的平均值,B为N天内下跌收盘价的平均值。
RSI=100-100/(1+RS),其中的RS=A/B。
经过化简,RSI=100*A/(A+B)。写成公式:
LC:=REF(C,1);
D:=IF(C>LC,C-LC,0);E:=IF(C<LC,LC-C,0);
A:=SUM(D,N)/N;B:=SUM(E,N)/N;
RSI:100*A/(A+B);{N:6,2,100}
好了,将两种算法写在一起:
LC:=REF(C,1);
D:=IF(C>LC,C-LC,0);E:=IF(C<LC,LC-C,0);
A:=SUM(D,N)/N;B:=SUM(E,N)/N;
原始RSI:100*A/(A+B);{N:6,2,100}
倚天RSI:SMA(MAX(C-LC,0),N,1)/SMA(ABS(C-LC),N,1)*100;
{坐标线位置:0;20;50;80;100;}
如图,原始RSI要比倚天RSI要敏感一些,因为倚天的RSI经过了指数加权平均处理。
我没有说指数加权平均处理就不好了,经过处理后,指标会平滑、稳定一些。
2、参数可调整的峰点公式
A:=REF(H,N)=HHV(H,2*N+1);{当前位置N天之前的最高价是最近2*N+1根K线中的最高价}
B:=FILTER(A,N);{当高点附近有等高的K线出现时,会影响后续高点的判断,所以要过滤}
D:=BACKSET(B,N+1);{将当前位置及前N周期的数值设为1,所以要用N+1}
HD:=FILTER(D,N);{当高点附近有等高的K线出现,取第一个,过滤掉后面N个周期之内出现的}
A2:=REF(L,N)=LLV(L,2*N+1);{求低点的过程与求高点的过程同理}
B2:=FILTER(A2,N);
D2:=BACKSET(B2,N+1);{参数N:1,3,999}
LD:=FILTER(D2,N);{主图叠加}
DRAWICON(HD,H,10),ALIGN2;{在高点附近显示红球}
DRAWICON(LD,L,11),ALIGN1;{在低点附近显示绿球}
可以说,这个公式用了未来函数BACKSET,但是用在日K线中,盘后是没有未来数据的,因为引用的全是已经发生过的不可变的数据了。
至于即时盘中的未来数据,那是说不到底的事,基本所有的公式,都有即时盘中未来数据,详见简介二中的探讨说明。
红球绿球作为峰点标志,在显示K线不多的情况下,还比较清楚。但当K线数较多时,因为球的大小是不变的,所以看起来比较乱。故可用以下公式:
A:=REF(H,N)=HHV(H,2*N+1);B:=FILTER(A,N);D:=BACKSET(B,N+1);HD:=FILTER(D,N);
A2:=REF(L,N)=LLV(L,2*N+1);B2:=FILTER(A2,N);D2:=BACKSET(B2,N+1);LD:=FILTER(D2,N);
STICKLINE(REF(HD,1),REF(H,1),REF(H,1),18,0),COLORMAGENTA;
STICKLINE(REF(LD,1),REF(L,1),REF(L,1),18,0),COLORGREEN;{点击看本软件截图:58股票 公式网 http://www. 58gu. com 整理}
下载地址: [ 下载地址1 ]
下载帮助: 发表评论 加入收藏夹 错误报告
相关软件:
  • 小月操盘线 一条能让你赚到钱的线
  • 沉船寻宝副图:无未来函数,有明显的买卖提示。
  • 爆涨前夜选股指标
  • 自用的一个主图公式
  • 庄家逃跑监控指标
  • 通达信 黄色立柱T+0分时指标 及选股 预警公式
  • 通达信起爆位置指标公式
  • 拔地而起!!!祝你股海扬帆!
  • 超准趋势线(源码 副图 通达信 贴图 说明)
  • 通达信抄底指标
  • 下载说明: ⊙推荐使用网际快车下载本站软件,使用 WinRAR v3.10 以上版本解压本站软件。
    ⊙如果这个软件总是不能下载的请点击报告错误,谢谢合作!!
    ⊙下载本站资源,如果服务器暂不能下载请过一段时间重试!
    ⊙如果遇到什么问题,请到本站论坛去咨寻,我们将在那里提供更多 、更好的资源!
    ⊙本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。
    发表评论 共有条评论
    验证码:
    推荐下载
    最后更新
    热门点击