以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请教横向统计指标  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=8391)

--  作者:mfmsonic
--  发布时间:2011/10/13 13:12:35
--  请教横向统计指标

我想做一个横向统计指标,该指标用于5分钟K线的副图,思路如下:
up:=统计某板块(如,自选股)上涨家数close>ref(close,1);
down:=统计该板块下跌家数close<ref(close,1);
radio:SUM(up,10)/SUM(down,10);
在副图上显示radio值的连线,并每五分钟自动刷新一次。
请教版主,上述思路如何通过金字塔的横向统计功能实现,谢谢!

[此贴子已经被作者于2011-10-13 13:16:26编辑过]

--  作者:fly
--  发布时间:2011/10/13 13:45:59
--  

是要象选股那样,把该板块的所有合约的最新10个周期的上涨和下跌比例,一个一个的都统计出来?


--  作者:mfmsonic
--  发布时间:2011/10/13 16:24:40
--  
是的,需要统计出最近10个每个周期的上涨和下跌的家数,才可以计算出该指标。
--  作者:admin
--  发布时间:2011/10/13 16:28:14
--  
使用标准版的自定义数据中的横向统计功能即可完成你的需求
--  作者:mfmsonic
--  发布时间:2011/10/13 16:54:05
--  
谢谢版主的答复,请问如何实现?能说得具体点吗?
--  作者:admin
--  发布时间:2011/10/13 17:37:49
--  

参考 http://blog.sina.com.cn/s/blog_55fe8db60100csfi.html


--  作者:mfmsonic
--  发布时间:2011/10/17 10:39:44
--  

以下内容为程序代码:

1 c1:=close>ref(close,1);
2 c2:=close<ref(close,1);
3 {先单独建立上面指标名为"001"的指标,再建下列指标}
4 bk:=\'自选股\'; {设定横向统计范围}
5 s:=STKCOUNT(bk); {取得横向统计证券数量}
6 variable:dm[s]=\'\';{定义s个字符串数组用于记录股票代码,初始值为空}
7 ∑1:=0*c;{定义∑1用于记录上涨家数的总和,初始值为0}
8 ∑2:=0*c;{定义∑2用于记录下跌家数的总和,初始值为0}
9 for i=1 to s do begin {以下循环,循环计数器i从1开始每次递增1,直到s}
10 dm1:=stkfromblk(bk,i);{取bk中第i只证券的证券代码,赋值到字符串变量dm1}
11 dm[i]:=dm1;{将证券代码记录到字符串数组dm的第i个元素中}
12 cc:=stkindi(dm[i],\'001.C1\',0,DATAPERIOD);{引用个股的指标}
13 dd:=stkindi(dm[i],\'001.C2\',0,DATAPERIOD);{引用个股的指标}
14 for j=1 to 11 do begin{循环计算,从倒数第一天开始到倒数第十天}
15 ∑1[j]:=∑1[j]+cc[j];{取得个股指标的上涨家数总和}
16 ∑2[j]:=∑2[j]+dd[j];{取得个股指标的下跌家数总和}
17 END
18 END;
19 横向统计总和:∑1[11]/∑2[11];{最后K线处的横向统计总和}

//////////////////////////////////////////////////////////////////////

上述代码测试正常,但运行时提示第9行解释错误,还望版主指点!


--  作者:admin
--  发布时间:2011/10/17 17:51:49
--  

缺少 001.C1 公式引用,无法测试,不过大致看了一下,在序列模式下执行应该是没问题的

[此贴子已经被作者于2011-10-17 17:52:14编辑过]

--  作者:站通
--  发布时间:2013/10/23 13:00:39
--  
up:=统计某板块(如,自选股)上涨家数close>ref(close,1);
down:=统计该板块下跌家数close<ref(close,1);
radio:SUM(up,10)/SUM(down,10);