若实数a,b满足a b=2:《飞狐公式编写基础》和《通达信公式教程》(四)

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 04:45:47
《飞狐公式编写基础》和《通达信公式教程》(四)
2008-12-20 10:08:15

飞狐基本函数简介之逻辑函数

这组函数全部用于逻辑判断,所得结果非0即1。

一、

函数: IF(X,A,B)

参数: X、A、B为数组或常数

返回: 返回数组

说明: 若X不为0则返回A,否则返回B

示例: IF(CLOSE>OPEN,HIGH,LOW)

表示该周期收阳则返回最高值,否则返回最低值

IF,如果。

这个函数妙用无穷,例子举不胜举。这里只提要注意的几点。

1、用以下公式来测试,发现N取10,在最后一根K线还能输出1,N取11就输出0了。说明“X不为0”的极限值是0.1。

IF(ISLASTPERIOD/N,1,0);{参数N:10,1,999}

2、A和B两者,要求是有效值。如果A是有效值,B是无效值,在X满足条件的情况下,也未必能返回A。

IF(C>O,MA(C,5),MA(C,100000000));

二、

函数: CROSS(A,B)

参数: A、B为数组或常数

返回: 返回数组

说明: 表示当A从下方向上穿过B时返回1,否则返回0

示例: CROSS(MA(CLOSE,5),MA(CLOSE,10))

表示5日均线与10日均线交金叉

CROSS,交叉。

这个“说明: 表示当A从下方向上穿过B时返回1,否则返回0 ”要咬文嚼字的话,要说成这样:

当上一个周期AB时,CROSS(A,B)返回1,否则返回0。

为什么要这样说呢?因为“从下方向上穿过”是个模糊说法,当两条线同时向下时,也会发生“金叉”,不信?看看以下公式的运行情况就知道了。

REF(A,1)B;

这个公式与CROSS(A,B)输出的结果应该是一样的。也可用以下公式验证。

LC:=REF(C,1);

D:=IF(C>LC,C-LC,0);  E:=IF(C
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;

DRAWICON(CROSS(飞狐RSI,原始RSI),0,10);

DRAWICON(REF(飞狐RSI,1)原始RSI,10,11);

{坐标线位置:0; 20; 50; 80; 100; 参数N:6.2.100 }



三、

函数: NOT(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回非X,即当X=0时返回1,否则返回0

示例: NOT(ISUP)

表示平盘或收阴

0.1是常数么?是。0.1不等于0吧?是。那么NOT(0.1)应该返回0了?

按说明应该返回0,但实际上是返回1的。

NOT(C/N);

NOT(0.1);{参数N:10,1,999}

如图,调整N,我们可以观察到结论:当X大于等于1时,NOT(X)返回0,小于1时返回1。



四、

函数: ISUP

参数: 无

返回: 返回数组

说明: 当收盘>开盘时,返回值为1,否则为0

函数: ISEQUAL

参数: 无

返回: 返回数组

说明: 当收盘=开盘时,返回值为1,否则为0

函数: ISDOWN

参数: 无

返回: 返回数组

说明: 当收盘<开盘时,返回值为1,否则为0

ISUP相当于OC,感觉没有什么用,只是有时可以使公式简洁一点。

五、

函数: ISLASTPERIOD

参数: 无

返回: 返回数组

说明: 该周期是否最后一个周期。最后一个周期返回值为1,其余为0

ISLASTPERIOD,是最后一个周期。这个函数,可以适用于任意周期的,当周期定下来之后,就返回最后一根条形图上的值为1。所以,解释为最后一根条形图(K线)比较恰当。

飞狐最近版本中,改ISLASTPERIOD为ISLASTBAR,就是这个原因。但也带来不便,以前的公式运行没有问题,要修改时,就要把ISLASTPERIOD全改成ISLASTBAR,否则调试通不过。

这是个很实用的函数,特别是在与BACKSET同时用时,找最近的信号很方便。分析家目前好象还没有添加这个功能的基本函数,有时会觉得不便--不过可以用DLL实现。

六、

函数: BETWEEN(A,B,C)

参数: 无

返回: 返回数组

说明: 表示A处于B和C之间时返回1,否则返回0

示例: BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间

函数: RANGE(A,B,C)

参数: 无

返回: 返回数组

说明: 表示A大于B同时小于C时返回1,否则返回0

示例: RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线

BETWEEN,在...之间。RANGE,范围、排列。

BETWEEN返回1,相当于满足条件:(A>B AND AC)。

RANGE返回1,相当于满足条件: A>B AND A
七、

函数: EXIST(X,N)

参数: N可为常数或变量

返回: 返回数组

说明: 返回N周期内是否存在满足条件X

示例: EXIST(C>O,10)表示10个周期中存在阳线

EXIST,存在。

表示判断当前周期和前N-1个周期,共N个周期中,是否存在数组X绝对值大于等于1的信号。

八、

函数: EVERY (X,N)

参数: N可为常数或变量

返回: 返回数组

说明: 返回N周期内一直满足条件X

示例: EVERY (C>O,10)表示10个周期内一直是阳线

就是EVERYDAY的EVERY了。表示信号的连续性。

EVERY(C


九、

函数: LAST(X,A,B)

参数:  

返回: 返回数组

说明: 返回第前A周期到第前B周期是否一直满足条件X,若A为0,表示从第一天开始,B为0,表示到最后日止

示例: LAST(C>O,10,5)表示从第前10个周期到第前5个周期内一直是阳线

LAST,最后的,最近的。这个函数使满足连续条件的信号滞后(往后移)了。

A:=MA(C,5)>MA(C,10);

LAST(A,4,2);



十、

函数: LONGCROSS(A,B,N)

参数:  

返回: 返回数组

说明: 表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0

示例: LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉

LONGCROSS,长交叉。就是在交叉之前,还要加上条件。如图,两者的输出是一样的。

A:=CROSS(MA(CLOSE,5),MA(CLOSE,10));

B:=LAST(MA(C,5)
条件金叉:A AND B;

长金叉:0.5*LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5);  

飞狐基本函数简介之算术函数

这组函数用于算术运算,相对简单,例子就不多举了。

一、

函数: MAX(A,B)

参数: A、B为数组或常数

返回: A、B都为常数则返回常数,否则返回数组

说明: 返回A和B中的较大值

示例: MAX(CLOSE-OPEN,0)

表示若收盘价大于开盘价返回它们的差值,否则返回0

MAX.,MAXIMUM,最大值。

相当于IF(A>B,A,B);

二、

函数: MIN(A,B)

参数: A、B为数组或常数

返回: A、B都为常数则返回常数,否则返回数组

说明: 返回A和B中的较小值

示例: MIN(CLOSE,OPEN)

返回开盘价和收盘价中的较小值

MIN.,MINIMUM,MINISTER,小的,迷你的。

相当于IF(A>B,B,A);

三、

函数: ABS(X)

参数: X为数组或常数

返回: X为常数则返回常数,否则返回数组

说明: 返回X的绝对值

示例: ABS(CLOSE-OPEN)

返回开盘价和收盘价的价差

ABSOLUTE VALUE,绝对值。

相当于IF(A>B,A-B,B-A);

四、

函数: SGN(X)

参数: X为数组或常数

返回: X为常数则返回常数,否则返回数组

说明: 当X>0,X=0,X<0分别返回1,0,-1

示例: ABS(-34) 返回34

SIGN,符号,标记。

相当于

A1:=IF(X>0,1,0);

A2:=IF(X=0,0,0);

A3:=IF(X<0,-1,0);

A:=A1+A2+A3;

写成IF嵌套,就是IF(X>0,1,IF(X<0,-1,0));

五、

函数: REVERSE(X)

参数: X为数组或常数

返回: X为常数则返回常数,否则返回数组

说明: 返回的X相反数-X

示例: REVERSE(CLOSE)

返回-CLOSE

REVERSE,相反(数)。

相当于-X;

六、

函数: MOD(A,B)

参数: A、B为数组或常数

返回: A、B都为常数则返回常数,否则返回数组

说明: 返回A对B求模

示例: MOD(26,10)返回6

MODULUS,模数。

相当于整数A除以整数B后所得的余数。支持负数。

七、

函数: CEILING(A)

参数: A、B为数组或常数

返回: A、B都为常数则返回常数,否则返回数组

说明: 向上舍入,向数值增大方向舍入

示例: CEILING(12.3)求得13,CEILING(-3.5)求得-3

CEILING,最高限度。

八、

函数: FLOOR(A)

参数: A、B为数组或常数

返回: A、B都为常数则返回常数,否则返回数组

说明: 向下舍入,向数值减小方向舍入

示例: FLOOR(12.3)求得12,FLOOR(-3.5)求得-4 向下舍入

FLOOR,地板,基底。也可理解为最低限度。

九、

函数: INTPART(A)

参数: A为数组或常数

返回: A为常数则返回常数,否则返回数组

说明: 取得数据的整数部分,返回沿A绝对值减小方向最接近的整数

示例: INTPART(12.3)求得12,INTPART(-3.5)求得-3

INTEGER,整数。PART,部分。INTPART就是整数部分了。

不管是正数还是负数,INTPART之后,留下的就只有整数部分。

我们很奇怪地发现,有向上舍入、向下舍入和取整的基本函数,但没有发现四舍五入的基本函数。可能是因为四舍五入是人为的一种粗略习惯,进不了精确算术的殿堂。那么用基本函数可以解决四舍五入么?

以小数点后第二位的数,四舍五入到小数点后第一位的数为例:

A:=C*100;

B:=MOD(A,10);

D:=IF(B>=5,1,0);

E:=INTPART(C*10)+D;

四舍五入:E/10;

收盘价:C;  

飞狐基本函数简介之数学函数

飞狐的数学函数,主要支持三角函数、对数、和幂的运算。

先回忆一下。如图,

sin(X)=a/c,cos(X)=b/c,tg(X)=a/b,ctg(X)=b/a。这里没有提供ctg(X)函数,是因为正切和余切互为倒数关系。

实际上正弦值的平方加上余弦值的平方等于1,有正弦函数之后,余弦函数也可以求出来了。

图中的角度X,一般有两种表达方式,一种是一个圆周为360度,还有一种是一个圆周为2π弧度。

这里的三角函数中的数组或常数X,取的都是弧度。



一、

函数: SIN(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的正弦值

函数: COS(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的余弦值

正弦波是自然界最常见的波形。正弦波和余弦波的波形是一样的,无非是相差π/2弧度(90度)的相位。

主要应用在技术分析中的周期分析上。

那么在指标中画出正弦波应该是很容易了吧。

A:=COUNT(C,0)=1;

B:=BARSLAST(A);{1,2,3,4,.....}

正弦值:SIN(B);

余弦值:COS(B);

正余平方和:POW(正弦值,2)+POW(余弦值,2);

正弦180度:SIN(3.1415926);

但是看起来不太光滑:(



究其原因,是因为正弦波的周期是2π,当X取值较大时(1,2,3,...)时,返回值就不太“精密”了,也就是说构成波形的点数不够。

这个就好办了,我们可以把数列的值都减小N倍,再来看看效果。

A:=COUNT(C,0)=1;

B:=BARSLAST(A)/N;

正弦值:SIN(B);

余弦值:COS(B);{参数N:10.1.999}

调整参数N,就可以发现,N取值越大,波形就越光滑。当N取3时,就有不错的光滑度。当N取10时,就非常光滑了。

N调整得越大,在2π周期中的点数就越多,一个完整波形的周期内所含的日期差(在日K线中)就越大了。



二、

函数: TAN(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的正切值

TANGENT,正切。

正切值的绝对值,最小是0,最大趋向于无穷大。

当正弦值接近1时,正切值接近于无穷大。

A:=COUNT(C,0)=1;

B:=BARSLAST(A)/N;

正弦值:SIN(B);

余弦值:COS(B);{参数N:10.1.999}

TAN(B);

三、

函数: ASIN(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的反正弦值

函数: ACOS(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的反余弦值

函数: ATAN(X)

参数: X为数组或常数

返回: 数组或常数

说明: 返回X的反正切值

Y=SIN(X),是已经知道X的弧度值求正弦值。反正弦值是已经知道正弦值,去求弧度是多少。其它类推。

ASIN(1);

返回1.57080弧度,相当于是π/2。

四、

函数: LOG(X)

参数: X为数组或常数

返回: 数组或常数

说明: 取得X的10为底对数

示例: LOG(100) 等于2

Y是10的N次方值,那么LOG(Y)=N。


五、

函数: LN(X)

参数: X为数组或常数

返回: 数组或常数

说明: 以e为底的对数

示例: LN(CLOSE) 求收盘价的对数

函数: EXP(X)

返回: X为数组或常数

参数: 数组或常数

说明: 为e的X次幂

示例: EXP(CLOSE) 返回e的CLOSE次幂

LN(X)是取自然对数。自然数e=2.718281828...

呵呵,连自然数都到股市中来了。

EXP(X)在正态分布中要用到,可。。。晕,不说了。

六、

函数: POW(A,B)

参数: A、B为数组或常数

返回: 数组或常数

说明: 返回A的B次幂  

示例: POW(CLOSE,3)

求得收盘价的3次方

函数: SQRT(X)

参数: X为数组或常数

返回: 数组或常数

说明: 为X的平方根

示例: SQRT(CLOSE) 收盘价的平方根

POWER,幂。SQUARE ROOT,平方根。

POWER(A,B)中的B支持小数,即可用0.5,那么POW(A,0.5)=SQRT(A)了。

POW(C,0.5);

SQRT(C);

这两根线是一样的。  

飞狐基本函数简介之统计函数

这组函数,是统计学中的最典型的几个指标,在基本函数中提供了算法。有几个是可以相互转换的,看似众多,实际上没有几个。

“统计学理论划分成描述统计学和推导统计学两部分。描述统计学指用图表达资料数据,比如用一张标准的线图展示价格历史。推导统计学则指从资料推导出概括的、预测的或推延性的结论。所以价格图表属于前者的范畴,而针对价格图表进行的技术分析则属于推导统计学的范畴。

综合起来,技术分析以过去的价格数据预测未来,有充分的统计学根据。”<期货市场技术分析>P16

实际上,我们常用的技术指标,都自觉或不自觉地利用了统计学中的相关原理。比如均线指标MA(C,N),是N个周期中收盘价的算术平均值,就利用了统计学中集中趋势度量法的原理。

先回忆一下统计学中几个指标的算法。

统计对象可以看成是一个数列,数列中数据的总个数为N,以今天(2002.11.22)五天内的600036招商银行收盘价为例,N就为5。数列的内容为:{9.17,9.24,9.11,8.85,8.87}。

1、算术平均值:数据总和除以总个数N。

(9.17+9.24+9.11+8.85+8.87)/5=9.048。

可以用公式MA(C,5),从今天的值上看出。

2、偏差:每个数据,减去算术平均值的结果。

9.17-9.048=0.122,

9.24-9.048=0.192,

9.11-9.048=0.062,

8.85-9.048=-0.198,

8.87-9.048=-0.178,

各偏差相加,应该是等于0的。

3、平均绝对偏差:将偏差的绝对值相加,除以总个数N。

(0.122+0.192+0.062+0.198+0.178)/5=0.150

4、(总体样本)方差:将偏差的平方相加,总和除以总个数N。用公式可以这样算:

(POW(0.122,2)+POW(0.192,2)+POW(0.062,2)+POW(0.198,2)+POW(0.178,2))/5=0.025

方差的算法,经过化简,也可以这样算:每个数据的平方的平均数,减去平均数的平方。

在公式里就可以这样编了:

MA(POW(C,2),5)-POW(MA(C,5),2);{0.025}

5、估算样本方差:是总体方差的N/(N-1)倍。

0.025*5/(5-1)=0.031

估算样本方差,总比总体样本方差大一点,当N够大时,两者趋于相等。

6、(总体)标准差:方差的开方。

POW(0.025,0.5);{0.158}

7、估算标准差:估算样本方差的开方。

POW(0.031,0.5);{0.176}

同样,估算标准差也比总体标准差大一点,当N够大时,两者趋于相等。

8、最小二乘法求回归直线方程:放在后面讲。

以下的例子,也以在今天(2002.11.22)五天内的600036招商银行收盘价为例。

一、

函数: AVEDEV(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: 平均绝对偏差

AVEDEV(C,5);{0.150}

二、

函数: DEVSQ(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: 数据偏差平方和DEVSQ

数据偏差平方和,除以N,即为方差。

DEVSQ(C,5)/5;{0.025}

DEVSQ(C,5);{0.126}

三、

函数: VARP(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: X的N日总体样本方差

总体样本方差用数据偏差平方和,已经求出了,看看一样吗?

DEVSQ(C,5)/5;{0.025}

VARP(C,5);{0.025}

四、

函数: VAR(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: X的N日估算样本方差

估算样本方差是总体方差的N/(N-1)倍,看看一样吗?

VARP(C,5)*(5/(5-1));{0.032}

VAR(C,5);{0.032}

五、

函数: STDP(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: X的N日总体标准差

总体标准差,即为总体样本方差的开方,看看一样吗?

POW(VARP(C,5),0.5);{0.159}

STDP(C,5);{0.159}

六、

函数: STD(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: X的N日估算标准差

估算标准差,即为估算样本方差的开方,看看一样吗?

POW(VAR(C,5),0.5);{0.178}

STD(C,5);{0.178}

好了,以上六个统计函数,除了第一个,其它五个,只要求出方差,就可以找到相应关系,全部求出来。而方差,可以用公式MA(POW(C,2),5)-POW(MA(C,5),2);求出,所以说,新东西只有一个:平均绝对偏差。

以上六个函数中的N,目前均不支持序列变量,但可以用参数来调整。

下面介绍线性回归的概念,仍以前例为例。

如图,坐标中的各点不存在明确的关系,它们不在同一直线上,也不在同一曲线上。但仔细观察可以看到,它们还是存在着一定的相关关系,图a中的点分布在一根直线附近,图b中的点分布在一根曲线(抛物线)附近。

在图a中,如果能够画出一根直线,使各点到直线的垂直距离总和达到最小,那么这根直线无疑是很有参考价值的,用股市中的行话说,就是这根直线代表了点以后的发展趋势。这种分析方法,就是统计学中的回归分析法。

图a中的X轴,相当于K线图中的时间轴,Y轴相当于价格轴,一个点相当于是由两个变量决定位置。

两个变量之间的回归分析称为简单回归或一元回归,三个以上变量之间的回归分析称为复回归或多元回归。如果变量间相关关系表现为线性相关的回归称为线性回归,表现为曲线相关的回归称为非线性回归。所谓一元线性回归,则是指两个变量之间表现为线性相关关系的回归。



一元线性回归的方法,就是在众多的点中,找到一根直线,而这根直线,最能代表众多点的平均“趋势”。

直线的表达方程是:y=a+bx。只要两个参数a、b定下来,直线的位置就定了。

求参数a、b的方法一般有两种,一种较为简便,但精度不够,称为平均数法。还有一种精度较高,应用也最多,叫最小二乘法。可想而知,飞狐中的线性回归预测值,是根据最小二乘法求出来的。这里就只介绍最小二乘法。

设在众多点中穿过的回归直线的方程是y'=a+bx。而每个点的垂直高度为y。那么对应于每个点,都可得到类似于偏差的值y-y'。这些值的平方的总和达到最小,而求出参数a、b,就是最小二乘法的基本原理。

y-y'=y-a-bx。每个点,都有对应的x、y值,那么将这些值,分别代入(y-a-bx),求平方,最后进行累计。最终的表达式Q中,就只有a和b两个变量了。为使Q具有最小值,必须使其对a,b的偏导数等于0。由这两个等式中,就可以求出a、b的值了。



同例,x:{0,1,2,3,4}, y:{9.17,9.24,9.11,8.85,8.87}

     xy:{0,9.24,18.22,26.55,35.48}

     x的平均值是:(0+1+2+3+4)/5=2,x的平均值的平方是:4,y的平均值是:9.048

     x平方{0,1,4,9,16},x平方总和是:30

   b=(89.49-5*2*9.048)/(30-5*4)=-0.99/10=-0.099

     a=9.048-(-0.099*2)=9.246

y=9.246-0.099*x。这就是我们求出的回归直线方程。

在前四天,y值为9.246,在今天,y=9.246-0.099*4=8.85。

有了这两个值,就可以在主图上画线了:

A:=BACKSET(ISLASTBAR,5);

B:=A>REF(A,1);

DRAWICON(A,C,10);

DRAWLINE(B,9.246,ISLASTBAR,8.85,0);

{主图、主图叠加}



各位看到,计算过程比较麻烦,一般只要了解回归线的意义即可。具体计算,也有以下两个基本函数帮忙。

七、

函数: FORCAST(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: X的N周期线性回归预测值

示例: FORCAST(CLOSE,10) 表示求10周期线性回归预测

用最小二乘法,求出N周期内,X的一元线性回归线上的当天的值。与以上介绍的a值不同,a值是(N-1)周期前的回归线上的值。N取值为1时没有意义。

FORCAST(C,5);{8.85}

八、

函数: SLOPE(X,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: 为X的N周期线性回归线的斜率

示例: SLOPE(CLOSE,10) 表示求10周期线性回归线的斜率

用最小二乘法,求出N周期内,X的一元线性回归线的斜率,相当于以上介绍的b值。在K线图上是(价差/时间差)的关系,与角度没有任何关系。N取值为1时没有意义。

SLOPE(C,5);{-0.099}

那么有了这两个函数,要画出回归线还是不容易。今天的回归线的值和斜率知道了,可(N-1)天之前的回归线上的值(相当于前面说的a值)还是不知道,因为指标均为序列变量,无法倒推。

一般来说,有两种方法,一种是全用基本函数,用起来有点麻烦,要调整参数。还有一种是借用VBS来倒推数据。

留作思考题吧。

九、

函数: CORR(X1,X2,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: 求2个序列间的相关系数。

示例: CORR(CLOSE,HIGH,10)表示求10周期VAR1与VAR2的相关系数

转贴《教育统计学》中,对相关系数的描述:

相关系数

在教育研究中,常涉及到两个事物(变量)的相互关系问题,例如,学习成绩与非智力因素的关系,数学成绩与物理成绩的关系,男女生学习成绩的关系,等等。其关系表现为以下三种变化;第一,正相关:一个变量增加或减少时,另一个变量也相应增加或减少;第二,负相关:一个变量增加或减少时,另一个变量却减少或增加;第三,无相关:说明两个变量是独立的,即由一个变量值,无法预测另一个变量值。统计学中,就用“相关系数"来从数量上描述两个变量之间的相关程度,用符号“r"来表示。

相关系数取值范围限于:-1≤r≤+1


PHP代码:--------------------------------------------------------------------------------
相关系数表示的意义

相关系数(r) 0.00   0.00-±0.3   ±0.30-±0.50
相关程度     无相关  微正负相关    实正负相关

相关系数(r) ±0.50-±0.80     ±0.80-±1.00
相关程度      显著正负相关       高度正负相关
--------------------------------------------------------------------------------
相关系数函数CORR,可以比较两只个股或个股与大盘的指标或价格在N周期内走势的相似程度,函数返回的数值越大,相似程序越高。

下面是最后N周期内,个股与大盘收盘价走势相似程度的示例代码:

ts0:=barssince(c);
ts1:=barslast(barssince(backset(islastbar,N+1))=0);
ts:=if(ts0bl:=ref(IndexC/C,Ts);{确定基准日压缩比率}
fc:c*bl/bl;
fIndexC:IndexC/bl;{按比率压缩大盘指数,以便跟个股收盘比较}
相似程度:CORR(fc,fIndexC,N),linethick0;

简单的应用方法:
1、指标作为副图指标,可通过对“相似程度”排序,找出近期走势跟大盘相似程度较高的个股。
2、也可以把代码中的IndexC换成其它作为样本的个股,找出同类走势的个股。

代码中,有一行:
fc:c*bl/bl;

大家可能会有疑问,“bl/bl”不是等于1吗?乘以1那不是多此一举?
不妨在代码中删除“*bl/bl”,再试试效果。
您理解了吗?这是一个小技巧:)



十、

函数: CORRTPL(TPLNAME,X,D,N)

参数: X为数组,N为统计周期

返回: 返回数组

说明: CORRTPL(TPLNAME,X,D,N),求与模板相关系数。
D为常数,表示0:开盘价,1:最高价,2:最低价,3:收盘价,4:成交量,5:成交额
N表示计算最后多少组,为0表示计算所有,用于当前选股时设为1可大大减小计算量

示例: CORRTPL('一马平川',CLOSE,3,1)表示求收盘价线与一马平川收盘价线的最后一组的相关系数  

飞狐基本函数简介之指标函数

所谓指标函数,就是头疼函数。一些指标的算法极为繁琐,做成基本函数,用起来就方便了。

我自己也是摸着石头过河。

一、

函数: ZIG(K,N)

参数: N为常数,参数K可为序列或常数,K取0--3,表示0:开盘价,1:最高价,2:最低价,3:收盘价;也可为ma(close,5)等。

返回: 返回数组

说明: 当价格变化量超过N%时转向

示例: ZIG(3,5) 表示收盘价的5%的ZIG转向

ZIG(MA(C,20),5)表示均线的5%的ZIG转向  

ZIG,之字形。

1、K可以作为参数调整,也可以直接写其它的指标线,如"kd.k"。N也可以做成参数调整。

2、在K线中,ZIG只能对一根指标线进行转向处理。要想高点在H位置,低点在L位置,ZIG是做不到的。

3、ZIG到底是如何体现“未来”的?即它是怎么画出来的?见最后的说明。

4、ZIG输出的是数值,不是直线。

5、ZIG一般使用在看波浪、看形态上。

ZIG函数是未来函数之第二大嫌疑。在交易系统中用未来函数,就是用BACKSET或ZIG,可以使许多人“梦想成真”。

由于“未来函数”在交易系统中可以大大作弊,才使其在指标和选股公式中也一起“臭名昭著”。



二、

函数: PEAK(K,N,M)

参数: N为常数,参数K可为序列或常数,K取0--3,表示0:开盘价,1:最高价,2:最低价,3:收盘价;也可为ma(close,5)等,M为大于等于1的整数

返回: 返回数组

说明: 表示之字转向ZIG(K,N)的前M个波峰的数值

示例: PEAK(1,5,1) 表示%5最高价ZIG转向的上一个波峰的数值

PEAK(MA(C,20),5,1) 表示均线的5%的ZIG转向的上一个波峰的数值

PEAK,高峰。

这个函数可以取到ZIG波峰的数值。如果K取1,波峰取的是H。如果K取3,波峰是C的波峰,可不是H。

三、

函数: PEAKBARS(K,N,M)

参数: N为常数,参数K可为序列或常数,K取0--3,表示0:开盘价,1:最高价,2:最低价,3:收盘价;也可为ma(close,5)等,M为大于等于1的整数

返回: 返回数组

说明: 表示之字转向ZIG(K,N)的前M个波峰到当前的周期数

示例: PEAKBARS(1,5,1)

表示%5开盘价ZIG转向的上一个波峰到当前的周期数

PEAKBARS(MA(C,20),5,1)表示均线的5%的ZIG转向的上一个波峰到当前的周期数

这个函数用来定波峰的位置的。有了位置,画两根线试试。

ZIG(1,N);

A1:=BACKSET(ISLASTBAR,PEAKBARS(1,N,1)+1);

A2:=A1>REF(A1,1);

B1:=BACKSET(ISLASTBAR,PEAKBARS(1,N,2)+1);

B2:=B1>REF(B1,1);

C1:=BACKSET(ISLASTBAR,PEAKBARS(1,N,3)+1);

C2:=C1>REF(C1,1);

DRAWLINE(B2,H,A2,H,1);

DRAWLINE(C2,H,B2,H,1);{N:3.1.99,主图叠加}



四、

函数: TROUGH(K,N,M)

参数: N为常数,参数K可为序列或常数,K取0--3,表示0:开盘价,1:最高价,2:最低价,3:收盘价;也可为ma(close,5)等,M为大于等于1的整数

返回: 返回数组

说明: 表示之字转向ZIG(K,N)的前M个波谷的数值

示例: TROUGH(2,5,2) 表示%5最低价ZIG转向的前2个波谷的数值

TROUGH(MA(C,20),5,2) 表示均线的5%的ZIG转向的前2个波谷的数值

TROUGH,水槽,波谷。

与PEAK对应。

五、

函数: TROUGHBARS(K,N,M)

参数: N为常数,参数K可为序列或常数,K取0--3,表示0:开盘价,1:最高价,2:最低价,3:收盘价;也可为ma(close,5)等,M为大于等于1的整数

返回: 返回数组

说明: 表示之字转向ZIG(K,N)的前M个波谷到当前的周期数

示例: TROUGHBARS(2,5,2) 表示%5最低价ZIG转向的前2个波谷到当前的周期数

TROUGHBARS(MA(C,20),5,2) 表示均线的5%的ZIG转向的前2个波谷到当前的周期数

对应于PEAKBARS。

这样在应用时,ZIG的各点的数值是知道的,波峰和波谷的数值和位置也可以引用到了。

“综合运用”:

ZIG(3,N),CROSSDOT;{主图叠加}

ZIG(3,N),CIRCLEDOT,COLORMAGENTA;

A:=PEAKBARS(3,N,1);

B:=TROUGHBARS(3,N,1);

B>A,COLORGREEN;

A>B,COLORRED;{五彩K线}



六、

函数: SAR(N,S,M)

参数: N为计算周期,S为步长,M为极值

返回: 返回数组

说明: 计算抛物转向点

示例: SAR(10,2,20)

表示计算10日抛物转向,步长为2%,极限值为20%

STOP AND REVERSE,转向点指标,停顿指标,又称抛物线指标,全称为抛物线转向指标。

SAR指标,也是王尔德(RSI的发明人)发明的,主要用于与趋向指标DMI(DIRECTION MOVEMENT INDEX)结合使用。

SAR一般以圆圈的形式输出,实际上也是输出数值的,形式可以用描述函数进行改变。

说是抛物转向,输出的并不是标准的抛物线。

目前的转向指标,典型的有三个,ZIG、SAR(因为做成基本函数了,所以有数值输出),还有一个是结构波浪,可以用基本函数做出,但只能输出直线,不能输出完整的数值。

SAR的画法,在众多的股票软件中,是一种百花齐放的局面。由于飞狐提供了开放可定制的公式平台,所以,只要有明确思路的SAR画法,都可以在飞狐实现。飞狐中基本函数SAR的具体画法在最后介绍。

SAR的画法,矛盾集中在数个方面,所以没有一种方法能够一统江山。

1、起算点,是从看涨开始还是从看跌开始?怎么判断画前的看涨和看跌?

2、转向条件满足时,是迟一个周期跳转还是迟两个周期跳转?

3、跳转后的第二个周期,以0步长计算,还是以STEP步长计算?

4、当N取1时,应不应该有输出?等等

飞狐的主要问题是在起算点就满足跳转条件时,会延迟一个周期跳转,而后面的就不延迟跳转了。分析家的问题是起算点有时是找不准前期极值的。这些都不是大问题,因为后面的计算是趋向于统一的,起算点附近的SAR问题,一般无人问津。

七、

函数: SARTURN(N,S,M)

参数: N为计算周期,S为步长,M为极值

返回: 返回数组

说明: 若发生向上转向则返回1,若发生向下转向则返回-1,否则为0

由于可以返回三个值,就可以判断是向上的跳转还是向下的跳转。

SA:=SAR(3,2,20);

A:=SARTURN(3,2,20);

B:=A=1;

D:=A=-1;

E:=BARSLAST(B)>BARSLAST(D);

F:=NOT(E);

DRAWICON(E,SA,10);

DRAWICON(F,SA,11);{主图叠加}



如果想颜色更鲜艳一些,可调用BMP文件,把最后两句改为:

DRAWICON(E,SA,'S31');

DRAWICON(F,SA,'S28');



八、

函数: COST(N)

参数: N为常数,表示百分比

返回: 返回数组

说明: 计算成本分布情况,该函数仅对日线分析周期有效

示例: COST(10)

表示10%获利盘的价格是多少,即有10%的持仓量在该价格以下,其余90%在该价格以上,为套牢盘

函数: WINNER(A)

参数: A为数组或常数

返回: 返回数组

说明: 计算获利盘比例,该函数仅对日线分析周期有效

示例: WINNER(CLOSE)

表示以当前收市价卖出的获利盘比例,例如返回0.1表示10%获利盘

WINNER(10.5)

表示10.5元价格的获利盘比例

COST,成本。WINNER,优胜者,获利。

两者互相换算。COST是根据获利盘估算价格,WINNER是根据价格估算获利盘。

之所以说估算,是因为要精确算,必须把每笔成交的价格和成交量都记录下来,一般这是很难做到的。

就算能做到,筹码分布方面的技术分析有效么?这就看各人自己的取舍了,股市中目前还没有发现包赚不赔的技术指标。

COST(WINNER(C)*100);

C;

此两者趋于相等。也说明这两个函数支持序列变量。

平均成本价的计算。将刚好完全换手的每笔成交量和成交价格相乘,然后除以这期间总的成交量,即为平均成本价。

平均成本价格:COST(50);

AA:=SUMBARS(VOL,CAPITAL);

平均成本价:SUM(C*V,AA)/SUM(V,AA);

实际上这两种方法都是估算出来的,后者的误差可能更大一些。

相当于一箱苹果是2元一斤,另两箱苹果是5元一斤。三箱苹果的平均价格就是(2*1+5*2)/(1+2)=4元。

这有点统计学中的调和平均值的味道了。筹码分布,要搞得复杂,可以计算中位值、众位值,研究正态分布、偏态分布,还有集中度、穿透力,当真是花样繁多,只能留给有兴趣的朋友自己研究了。

筹码分布的峰位在哪个价格区域,是筹码分布爱好者很想知道的一个指标。用COST可以估算出来,留作思考题吧。

九、

函数: PPART(N)

参数: N为常数

返回: 返回数组

说明: 远期成本比例,表示N周期前的成本占总成本的比例,如返回0.3表示30%

示例: PPART(20); 20天前的成本占总成本的比例

远期成本比例,只要把近N天之成本比例算出来,远期的自然就出来的。因为总成本为百分之百的换手率。

远期成本比例:PPART(N)*100;

A:=100*V/CAPITAL;

远期成本:100-SUM(A,N);{参数N:10.1.999}

两者基本相等。

十、

函数: PWINNER(N,X)

参数: N为常数,X为数组或常数

返回: 返回数组

说明: 远期获利盘比例

示例: PWINNER(20,CLOSE);表示20天前的那部分成本以当前收市价卖出的获利盘比例,例如返回0.2表示20%获利盘




以上几个筹码指标,在飞狐中,目前已经支持多周期分析,即在分笔、五分钟、周等周期上都有输出。

附一、ZIG线的画法。

假设在手工画线年代,ZIG线是怎么画出来的,实际上也介绍了算法。

以zig(3,5),即收盘价转向,转向要求5%,在600036招商银行上为例。

从第一根K线上的收盘价,慢慢往后看。直到当天的C,和以前的K线的最低C值相比的涨幅,或与最高C值相比的跌幅超过5%时,才在当天作出记号,称之为拐点。涨幅超过5%的,称为向上的拐点,跌幅超过5%的,称为向下的拐点。

例中,先有向下的拐点,于是第一根K线上的C值,就是高点了。在向下的拐点出现之后的每根K线上,相比较记录最低之C值。然后把当天的C值,与记录的最低C值比较,看有没有涨幅超过5%。例中,到6月24日,才产生满足条件之向上的拐点。向上的拐点出现之后,回过头,在与上一个向下的拐点之间,找到一个最低的C,作为ZIG的低点。

产生向上拐点之后,就在之后的K线中记录C的最大值。当出现当天的C值,与最大C值相比,跌幅超过5%时,记为向下的拐点。例中,到7月12日,产生向下的拐点。于是从向下的拐点回过头来,在与上一个向上的拐点之间,找到一个最高的C,作为ZIG的高点。如此循环。也就是说,ZIG的高点和低点,是根据向上和向下的拐点出来之后,回溯过去才找到的。这就是ZIG未来数据的实质所在。

在最近期间,ZIG的未来数据,要追溯到最近的一个拐点之前的一个峰点。且看最近期间的ZIG线是怎么画出的。

从最后一根K线往前,如果先出现向下的拐点,则在此拐点到目前的K线中求出最小收盘价所在的K线,为低点。这个低点可能与目前的K线重合。重合的话目前的K线为低点,不重合的话目前K线为高点。

如果先出现向上的拐点,则在此拐点到目前的K线中求出最高收盘价所在的K线,为高点。此高点与目前的K线重合,则目前的K线为高点,否则为低点。

附二、SAR的画法。

SAR(N,S,M),参数:N为计算天数,STEP=调整系数×100,MAXP=调整系数上限×100。

以sar(5,2,20),circledot;用在日线中为例。

SAR只跟K线中的H、L有关,与O、C无关。

一、起画点

当N取5时,起画点就在第六根K线上。第一步要做的事,就是由第一根K线到第五根K线判断是看涨还是看跌。如是看涨,就要把起画点画成看涨SAR,如是看跌,就要把起画点画成看跌SAR。

A:(H-REF(H,1)+L-REF(L,1))>0 AND BARSCOUNT(C)=2;

如果A成立,则先画看跌SAR(SAR在K线之上);如果A不成立,则先画看涨SAR(SAR在K线之下)。这是我的观察所得,各位不妨去看看是不是如此。就是说不管N取多少,起画点是根据第一、二根K线上的H、L决定的。

二、看涨SAR

第一个看涨SAR的值,是前五天的最低价,即REF(LLV(L,5),1);然后看看SAR值是不是比L小,是的话继续,否则在下一天跳转。

第二个看涨SAR的值,是

SAR(2)=SAR(1)+AF1*(REF(HHV(H,5),1)-SAR(1)),

SAR(1)即为第一个看涨SAR的值。AF1是调整系数,如果当天的H比前五天的最高H大,则要+0.02(得0.04),否则还是取0.02。然后看看SAR值是不是比L小,是的话继续,否则在下一天跳转。

第三个看涨SAR的值,是

SAR(3)=SAR(2)+AF2*(REF(HHV(H,5),1)-SAR(2)),

计算方法与求第二个看涨SAR类同,只是当天的H是否比前五天的最高H大还要判断,是的话AF2=AF1+0.02,否则取AF1。

然后看看SAR值是不是比L小,是的话继续,否则在下一天跳转。

因为没有跳转的话,REF(HHV(H,5),1)-SAR(2)的值肯定大于0,所以看涨SAR一直是向上升的。

如此循环往复,直到跳转条件成立就跳转,去画看跌SAR了。而调整系数AF的值,经过反复累积的话,最大是不能超过0.2的。

三、看跌SAR

第一个看跌SAR的值,是前五天的最高价,即REF(HHV(H,5),1);然后看看SAR值是不是比H大,是的话继续,否则要在下一天跳转。

第二个看跌SAR的值,是

SAR(2)=SAR(1)+AF1*(REF(LLV(L,5),1)-SAR(1)),

SAR(1)即为第一个看跌SAR的值。AF1是调整系数,如果当天的L比前五天的最低L小,则要+0.02(得0.04),否则还是取0.02。然后看看SAR值是不是比H大,是的话继续,否则在下一天跳转。

第三个看跌SAR的值,是

SAR(3)=SAR(2)+AF2*(REF(LLV(L,5),1)-SAR(2)),

计算方法与求第二个看跌SAR类同,只是当天的L是否比前五天的最低L小还要判断,是的话AF2=AF1+0.02,否则取AF1。

然后看看SAR值是不是比H大,是的话继续,否则在下一天跳转。

因为没有跳转的话,REF(LLV(L,5),1)-SAR(2)的值肯定小于0,所以看跌SAR一直是向下跌的。

如此循环往复,直到跳转条件成立就跳转,去画看涨SAR了。而调整系数AF的值,经过反复累积的话,最大是不能超过0.2的。

SAR没有未来之嫌,但是N、S、M的调整对SAR影响都很大,感觉灵敏性过大。