查看完整版本: 给大家出一道题

南客 2004-8-4 21:11

给大家出一道题

1、设计一个指标,计算当日成交量即vol,是几天内的最高大成交量?
2、设计一个指标,计算当日最高价即high是几天内的最高价?

提示:直接用hhv()函数无法得到正确结果。

如下图所示,天科股份,2004/05/27,该日成交量是3日内的最大成交量,要求指标计算结果为3。该日的最高价high刚好也是3日内的最高价,要求第2个指标计算结果为3(2个指标计算结果一般来说是不一样的)。

南客 2004-8-4 21:11

大家可以试着用飞狐的循环来写。
也可以想想办法,用飞狐的基本函数来写。

bajatje 2004-8-4 22:54

应考

用循环函数能实现任意位置但我不会用;做一个只能用于最后周期的 滥竽充数

vv:=v;
wv:=barslast(cross(v,vv[datacount]));
wv*ISLASTBAR;

hh:=h;
wh:=barslast(cross(h,hh[datacount]));
wh*ISLASTBAR;

错了  改一下
vv:=v;
wv:=barslast(v>vv[datacount]);
wv*ISLASTBAR;

hh:=h;
wh:=barslast(h>hh[datacount]);
wh*ISLASTBAR;

[color=Teal][align=right] 本贴由 bajatje 于 2004-8-4 23:19 最后编辑 [/align][/color]

chenlinm 2004-8-4 23:11

我要花大力气想一下!等一等我哟!

bajatje 2004-8-4 23:16

如果用光标应该可以实现任意位置

vv:=hhv((BARPOS=SYSPARAM(1))*v,0);
wv:barslast(v>vv[datacount]);

hh:=hhv((BARPOS=SYSPARAM(1))*h,0);
wh:barslast(h>hh[datacount]);


也改一下
vv:=hhv((BARPOS=SYSPARAM(1))*v,0);
wv:barslast(v>vv[datacount])*(BARPOS=SYSPARAM(1));

hh:=hhv((BARPOS=SYSPARAM(1))*h,0);
wh:barslast(h>hh[datacount])*(BARPOS=SYSPARAM(1));

[color=Teal][align=right] 本贴由 bajatje 于 2004-8-4 23:29 最后编辑 [/align][/color]

南客 2004-8-4 23:30

[quote][i]bajatje[/i] 于 2004-8-4 11:16 PM 写道:
如果用光标应该可以实现任意位置

vv:=hhv((BARPOS=SYSPARAM(1))*v,0);
wv:barslast(v>vv[datacount]);

hh:=hhv((BARPOS=SYSPARAM(1))*h,0);
wh:barslast(h>hh[datacount]);


也改一下
vv:=hhv ... [/quote]

不错
:cool:

chenlinm 2004-8-4 23:34

var1=vol;
VAR2:=ref(vol,1);
VAR3:=ref(vol,2);
三日最大成交量:(VAR3<VAR2 and VAR2<var1) or (VAR3>VAR2 and VAR2<var1  and VAR3<VAR1) ;
其他几种写法不知道!
求最高价是一样的!

chenlinm 2004-8-4 23:41

我来看看我不明白的函数是什么意思!

chenlinm 2004-8-5 00:14

BARPOS----函数返回当前是第几根K线。
这里没有用过!!!
SYSPARAM(1)------系统参数:画面上光标位置(K线序号)
注意:该函数仅K线图形分析且打开十字光标时有效,否则返回值不确定
没用过!!!
barslast------BARSLAST(X):上一次X不为0到现在的天数
先取得光标处K线序号内最高成交量,当前成交量大于到光标处内最大成交量!

[color=Teal][align=right] 本贴由 chenlinm 于 2004-8-5 00:15 最后编辑 [/align][/color]

chenlinm 2004-8-5 00:20

[datacount]------?

南客 2004-8-5 00:31

[quote][i]chenlinm[/i] 于 2004-8-5 12:20 AM 写道:
[datacount]------? [/quote]

返回K线的数量,即总共有多少根K线

chenlinm 2004-8-5 00:51

谢谢!明天再来看看,再见!!!

王庆 2004-8-5 08:22

我非常想知道用飞狐的基本函数来实现。
我一直再想,头都大了。看到此帖我非常高兴。
严重关注!!!

王庆 2004-8-5 08:24

望版主将此帖顶置

索龙居士趋势猫 2004-8-5 09:27

有那末复杂吗?
只一句就可以了!

HHV(v,3)=v and HHV(h,3)=h;

lwh315 2004-8-5 09:57

[quote][i]索龙居士趋势猫[/i] 于 2004-8-5 01:27 写道:
有那末复杂吗?
只一句就可以了!

HHV(v,3)=v and HHV(h,3)=h; [/quote]
您未切题。
“HHV(v,N)”是固定时段的,而题意是动态的,或者称“智能”的。
我一直想学而不得,今天能学到了,如能将循环函数也学会那更好了。
在此谢谢南客老师出的题目。

老实和尚 2004-8-5 10:39

呵呵,参考chenlinm的写了一个,算不算数?
[code]
V1:=v;
V2:=ref(v,1);
V3:=ref(v,2);
V4:=V3<V2 and V2<v1{v1最大}
or V3>V2 and V2>v1{v3最大}
or v2>v3 and V3<V1;{v2最大}
信号:if(v4=1,3,0);
[/code]

南客 2004-8-5 10:47

[quote][i]老实和尚[/i] 于 2004-8-5 10:39 AM 写道:
呵呵,参考chenlinm的写了一个,算不算数?
[code]
V1:=v;
V2:=ref(v,1);
V3:=ref(v,2);
V4:=V3<V2 and V2<v1{v1最大}
or V3>V2 and V2>v1{v3最大}
or v2>v3 and V3<V1;{v2最大}
信号:i ... [/quote]

3日内?看来题意还没理解:po:

老实和尚 2004-8-5 10:58

看来后面的IF那里还要改一下才行,不过不如何如何改,教材我才看到入门五
在那边高级会员区已经提问了

索龙居士趋势猫 2004-8-5 11:53

[quote][i]lwh315[/i] 于 2004-8-5 09:57 AM 写道:
您未切题。
“HHV(v,N)”是固定时段的,而题意是动态的,或者称“智能”的。
我一直想学而不得,今天能学到了,如能将循环函数也学会那更好了。
在此谢谢南客老师出的题目。 [/quote]

您好!请问这个周期动态的,或者称“智能”的周期有何意义?

yngs 2004-8-5 14:54

[quote][i]索龙居士趋势猫[/i] 于 2004-8-5 11:53 写道:
您好!请问这个周期动态的,或者称“智能”的周期有何意义? [/quote]
“智能”的周期意义可大了,它能有效的消除指标周期与个股实际周期不同步的误判。比如kd指标的默认周期是9,而我们要看的股票的最近最高-最低周期是20,就会造成指标表明是底部了股价还在继续下跌。

索龙居士趋势猫 2004-8-5 16:47

[quote][i]yngs[/i] 于 2004-8-5 02:54 PM 写道:
“智能”的周期意义可大了,它能有效的消除指标周期与个股实际周期不同步的误判。比如kd指标的默认周期是9,而我们要看的股票的最近最高-最低周期是20,就会造成指标表明是底部了股价还在继续下跌。 [/quote]

谢谢您的解答!

(h)

不知道我这样理解是否正确,“智能”的周期就是让指标自己判断用一个多长的周期作为变量,以适应当前市场的波段频率,达到最优化!

chenlinm 2004-8-5 20:47

[quote][i]南客[/i] 于 2004-8-5 10:47 写道:
3日内?看来题意还没理解:po: [/quote]
不是没理解题意,是根本不知道N天如何表达,但我写的全部人看得懂哟!
老师写的----用循环再写给我们看看,谢谢!!!:clap:

南客 2004-8-5 21:09

循环肯定没问题,VBS当然也可以。
用基本函数,就多给点提示:巧妙使用sumbars()函数。

lwh315 2004-8-6 12:59

[quote][i]索龙居士趋势猫[/i] 于 2004-8-5 03:53 写道:
您好!请问这个周期动态的,或者称“智能”的周期有何意义? [/quote]

它本身并无实质意义,是一个帮助你达到另一个目的的工具。说白了它就是一个“自动的测量”工具。举个例:今成交量创近期新高,“近期”是一个模糊的概念,究竟“近期”是多少,用它就能精确的实现。

lwh315 2004-8-6 13:35

再举一个例,一般选大黑马的一个基本要素是:在一定的Y幅度内横盘X周期,这里的YX都是固定的。这个要素简单实用,但不能排序,如用南客老师的题意改编YX中的一个为动态数,那就可排序了。个人管见,望大家指正。

joneslee 2004-8-6 18:20

难度大。。。。。。。。

bajatje 2004-8-6 19:26

转帖一个


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;

王庆 2004-8-6 20:28

[quote][i]bajatje[/i] 于 2004-8-6 19:26 写道:
转帖一个


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, ... [/quote]
好像还是不太对题
:thinking:

白郎 2004-8-6 21:39

试了试用循环函数写:
VARIABLE:A=2,B=2,AA=VOL,BB=H;
WHILE AA[1]>AA[A] DO A=A+1;
WHILE BB[1]>BB[B]  DO B=B+1;

南客 2004-8-6 21:49

呵呵,终于用基本函数有了符合要求的代码,最后的参考结果如下:


[code]
b:=hhv(h,0);
a:=if(BARPOS=1,b[datacount],h);
价:SUMBARS(REF(a,1)-a,0);

u:=hhv(v,0);
s:=if(BARPOS=1,u[datacount],v);
量:SUMBARS(REF(s,1)-s,0);
[/code]

南客 2004-8-6 21:52

[quote][i]白郎[/i] 于 2004-8-6 09:39 PM 写道:
试了试用循环函数写:
VARIABLE:A=2,B=2,AA=VOL,BB=H;
WHILE AA[1]>AA[A] DO A=A+1;
WHILE BB[1]>BB[B]  DO B=B+1; [/quote]

要用二重循环才有办法实现:)

南客 2004-8-6 22:06

使用飞狐循环的公式代码,参考如下:

[code]
fv:=vol;
p:0*vol;
if datacount>1 then
  for i=2 to datacount do begin
    for j=i downto 1 do begin
      if fv[j]>fv[i] then begin
        p[i]:=i-j; break;
      end;
    end;
    if p[i]=0 then p[i]:=i;
  end;
p[1]:=1;
[/code]

南客 2004-8-6 22:14

附加说明,飞狐中,sumbars()函数起始有效周期有点小问题,新的测试版已经修正。

jshmhys 2004-8-6 22:21

3q

joneslee 2004-8-6 22:38

第一天显示还有点问题,
是飞狐的BUG引起的。谢谢老师!

[color=Teal][align=right] 本贴由 joneslee 于 2004-8-6 22:58 最后编辑 [/align][/color]

joneslee 2004-8-6 22:38

谢谢南客老师!

南客 2004-8-6 22:51

第1个周期,正常情况下,是不会显示数值的,飞狐的sumbars()函数有BUG,在新版中已经修正了。

cwy 2004-8-6 23:35

请教南客朋友:
b:=hhv(h,0);
a:=if(BARPOS=1,b[datacount],h);
价:SUMBARS(REF(a,1)-a,0);

u:=hhv(v,0);
s:=if(BARPOS=1,u[datacount],v);
量:SUMBARS(REF(s,1)-s,0);

同样的公式,为什么价能显示,量不能显示?
把“量:SUMBARS(REF(s,1)-s+1,0)”中的“S”加1
或把“s:=if(BARPOS=1,u[datacount]+1,v)”中的“u[datacount]”加1才能显示,是何原因?

南客 2004-8-7 01:10

u[datacount],实际上就是历史最大成交量,有可能由于成交量太大,导致的浮点数转换误差,造成u[datacount]并没有最大。
此时,可把u[datacount]换成u[datacount]+10000,单是加1是不够的。数值太大时,转换误差也越大。

比如,观察上证指数的年线。

至于价格,一般数值都不会太大,出现误差的可能性小。

王庆 2004-8-7 02:27

谢谢南客

王庆 2004-8-7 03:23

请问南客公式粘贴后出现一下现象,为何?:thinking:

王庆 2004-8-7 03:24

?:thinking:

王庆 2004-8-7 08:03

对比

南客 2004-8-7 08:15

哦,原来是遇到最大值时,会有这个现象,看来最大值还不行,要比最大值稍大一点。有时遇到最大值时,又不会有这个现象,是因为累加误差的缘故。

代码修正如下:

[code]
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);
[/code]

南客 2004-8-7 08:22

代码的另一种写法,参考如下:



[code]
VH:=HHV(VOL,0);
FV:=VOL;
FV[1]:=VH[DATACOUNT]*1.2;  //VH[DATACOUNT]是历史最高成交量
量创新高周期数:SUMBARS(REF(FV,1)-FV,0);
[/code]

王庆 2004-8-7 08:30

问题已解决
:D好东西:cool:
非常感谢南客!!!

南客 2004-8-7 12:58

代码已经成功了,原理是什么呢?

假设某是成交量是vol,是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周期的成交量要替换成比所有成交量都大的数值?请大家自己思考。
页: [1] 2 3
查看完整版本: 给大家出一道题