收集:中国股票市场经济分析网
SUMBARS(X,N)
函数的用法如下:
向前累加到指定值到现在的周期数。
用法:
SUMBARS(X,A)
将X向前累加直到大于等于A,返回这个区间的周期数
例如:
SUMBARS(VOL,CAPITAL)
1、设计一个指标,计算当日成交量是几天内的最高成交量?
2、设计一个指标,计算当日最高价是几天内的最高价?
提示:直接用HHV()函数无法得到正确结果。
例一:
B:=HHV(H,0);
A:=IF(BARPOS=1,B[DATACOUNT]*1.2,H);
价:SUMBARS(REF(A,1)-A,0);
U:=HHV(V,0);
S:=IF(BARPOS=1,U[DATACOUNT]*1.2,V);
量:SUMBARS(REF(S,1)-S,0);
或:
VH:=HHV(VOL,0);
FV:=IF(BARPOS=1,VH[DATACOUNT]*1.2,VOL); //VH[DATACOUNT]是历史最高成交量
量创新高周期数:SUMBARS(REF(FV,1)-FV,0);
{这里的关键是 REF(FV,1)-FV ,想想看写成 FV-REF(FV,1) 行不行?}
另一种写法:
VH:=HHV(VOL,0);
FV:=VOL;
FV[1]:=VH[DATACOUNT]*1.2; //VH[DATACOUNT]是历史最高成交量
量创新高周期数:SUMBARS(REF(FV,1)-FV,0);
{这里的关键是 REF(FV,1)-FV ,想想看写成 FV-REF(FV,1) 行不行?}
代码已经成功了,原理是什么呢?
假设某日成交量是3日内的最大成交量,则必有:
REF(VOL,3)-VOL>=0
等价于:
(REF(VOL,3)-REF(VOL,2))+(REF(VOL,2)-REF(VOL,1))+(REF(VOL,1)-VOL) >=0
意思就是说,“昨成交量与今成交量之差”逐日累加,直到某日累加和大于等于0,则这之间的天数,就是所要求的日数。
我们再来看看SUMBARS()函数的含义:
SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。
显然上面的式子:
(REF(VOL,3)-REF(VOL,2))+(REF(VOL,2)-REF(VOL,1))+(REF(VOL,1)-VOL)>=0
可以写成:
SUMBARS(REF(VOL,1)-VOL, 0);
为何第1周期的成交量要替换成比所有成交量都大的数值?最后,再来思考一个问题,把题目中的求“最大”,改成求“最小”,即多少天内是最小的?
例二:
B:=HHV(H,0);
A:=IF(BARPOS=1,9999,H);
Z:SUMBARS(REF(A,1)-A,0);
DRAWNUMBER(BARPOS=SYSPARAM(1),1,Z,0)ALIGN4,COLORWHITE;
U:=HHV(V,0);
S:=IF(BARPOS=1,999999999999,V)
Y:SUMBARS(REF(S,1)-S,0);
DRAWNUMBER(BARPOS=SYSPARAM(1),1,Y,0)ALIGN3,COLORYELLOW;
例三:
HH:=IF(BARSCOUNT(C)=1,9999,H);
ZH:SUMBARS(REF(HH,1)-HH,0);//价创了N周期新高
VH:=IF(BARSCOUNT(C)=1,99999999,V);
HV:SUMBARS(REF(VH,1)-VH,0);//量创了N周期新高
LL:=IF(BARSCOUNT(C)=1,0,L);
ZL:SUMBARS(LL-REF(LL,1),0);//价创了N周期新低
VL:=IF(BARSCOUNT(C)=1,0,V);
LV:SUMBARS(VL-REF(VL,1),0);//量创了N周期新低
附注:
用99999999等具体数值,最好是尽可能大的数值(比如单精数的上限),否则仍有可能无法全部完成计算,比如上证指数的年线,成交量最大时,仍然超过了99999999。
倒数第6天的最高价格怎么表示?
FH:=HIGH;
FH[DATACOUNT-5]; //倒数第6天的最高价格。
[DATACOUNT]
返回K线的数量,即总共有多少根K线。