你会写跨周期调用吗?

跨周期调用实例详解

看到好几个人的帖子写的跨周期调用都犯了“习惯性”错误。例如,在日线公式里,为读取上一天的收盘价,写:

ref(c,1)

为读取上一周的周收盘价,很习惯地就写成:

c1:=   ref(c#week,1) ;

错了。(但也并非总错,在某些天可能是对的。*注1)

一般地,ref(x,1)是昨天的x,于是,c1=ref(c#week,1)就是昨天的c#week,所以,如果当前是星期三,c1则是本周星期二所在周的收盘价,星期二和星期三都是本周的,所以应该有相同的周收盘价。(这里假定星期二和星期三都开盘。)

如果你一定要在日线公式里,用c#week来得到上一周的周收盘价c1,应该怎样写呢?

可以这样写:

A:=barslast(weekofyear != ref(weekofyear,1));  *注2

c1:=ref(c#week, A+1);

当然,此时直接写

c1:=ref(c,A+1);  *注3

也行。

正确的跨周期调用的写法(读取上周的收盘价、成交量)

1)       建立一个(被调用的)指标公式,例如取名为“zuotian”,其内容是:

   {zuotian}

   c1:ref(c,1);

   v1:ref(v,1);

2)      在主公式里

为了读取上一周的收盘价,写

c1:=zuotian.c1#week;   {接收变量名任意,并非一定取名c1}

为了读取上一周的成交量,写

v1:=zuotian.v1#week;

为了读取上一月的收盘价,写

c1:=zuotian.c1#month;

为了读取上一月的成交量,写

v1:=zuotian.v1#month;

为什么要这样? 现以在日线公式里执行 c1:=zuotian.c1#week 为例说明:

按通达信的语法,

D1:=zuotian.c1;

是调用指标公式zuotian,令它在(本股票的)相同的周期(此时是日线)下执行,并把它在当前日K线上的输出C1赋值给本公式的D1变量。即D1将是昨天的收盘价, 因为公式zuotian在日周期下执行,输出的c1=ref(c,1)当然是昨天的close。

现在解释

      c1:=zuotian.c1#week;

按通达信语法,该语句的语意是:调用指标公式zuotian,令它在week周期下执行,并把它在(本日K线所对应的)周K线上的输出c1赋值给本公式的c1变量。

公式zuotian在week周期下执行,输出在周K线上的c1=ref(c,1)当然是上一周的close。

注: 本日所对应的周/月是指本日所在的周/月。如果在日线中用 #MIN60跨周期调用,本日所对应的小时K线是指本日的最后交易小时即15:00那条60分钟K线。

如果你愿意,请回答以下问题:

*注1 “但也并非总错,在某些天可能是对的。”  在哪些天是对的?

*注2  本语句这种写法也是不全对。你知道在什么情况下它是错的吗?

*注3  c1:=ref(c,A+1)为什么对? 为得上周的成交量,写v1:=ref(v,A+1)对吗?              

(0)

相关推荐