以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  ref函数没办法用  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=148870)

--  作者:牤牛
--  发布时间:2017/3/8 23:02:35
--  ref函数没办法用
 ref语句不能用在for语句和if语句里,我发现如果我要统计前60根K线的收盘价,成交量,持仓量,除了一个个赋值,没有更好的办法。
--  作者:netfox
--  发布时间:2017/3/8 23:46:52
--  
count 不是统计吗?
--  作者:jinzhe
--  发布时间:2017/3/9 9:08:45
--  
是不能直接用,可以间接用,你看下编译给你的提示链接
--  作者:牤牛
--  发布时间:2017/3/9 9:51:24
--  
 当对前几十个周期进行稍微复杂点的运算,count是不能完成的。
间接用还是只能一个一个赋值。比如:
variable:cj[61]=0,cc[60]=0;
for i=1 to 60 do cj[i]=ref(vol,i);
for i=1 to 60 do cc[i]=cj[i]-cj[i+1];
请问怎么间接用。

--  作者:jinzhe
--  发布时间:2017/3/9 9:58:09
--  
编译时给你的提示连接
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

--  作者:牤牛
--  发布时间:2017/3/9 10:23:12
--  
你是不懂我们上班族电脑有监控的苦恼啊,我上班时间要能把这个软件打开,我早打开看了。我只能晚上回家看,然后有新问题第二天您才能回复。那么周期就太长了。
--  作者:jinzhe
--  发布时间:2017/3/9 10:24:13
--  

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130

 


--  作者:jinzhe
--  发布时间:2017/3/9 10:25:49
--  

IF THEN 语句的描述

例如:

input:atrn1(1,1,10),atrn2(5,2,20);

if atrn1<atrn2 and vol>20000 then
begin
    TR1:= MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
    ATRn_1:= MA(TR1,atrn1);
    ATRn_2:= MA(TR1,atrn2);
end;

上述公式语句由于将REF和MA函数放在了IF语句之中,所以该公式无法正常编译。解决办法是将他们放到IF语句之外去执行:

input:atrn1(1,1,10),atrn2(5,2,20);

A1:=REF(CLOSE,1);
MA1:=MA(TR1,atrn1);
MA2:=MA(TR1,atrn2);

if atrn1<atrn2 and vol>20000 then
begin
    TR1:= MAX(MAX((HIGH-LOW),ABS(A1-HIGH)),ABS(A1-LOW));
    ATRn_1:= MA1;
    ATRn_2:= MA2;
end;

这样经过修正的公式就可以正常编译了,此外公式还将两次REF语句引用合并到一个语句中,这样做还可以提高公式系统的运行效率,因为REF统计语句只执行了一次。

 

 

 

对于REF较为有效率的使用改进方案

金字塔提供了强大的数组功能,完成可以代替REF函数,使用数组代替REF不仅可以解决不能再IF THEN语句的限制,还可以提高运行效率,我们举例如下:

If   Barpos-1 = N   then
BEGIN
   UpperMove := ref(High,1) ;
end

 

将REF修改为数组模式的代码为

If   Barpos-1 = N   then
BEGIN
   UpperMove := High[Barpos-1] ; //取上一个K线高点
end


--  作者:牤牛
--  发布时间:2017/3/9 16:49:02
--  
请问成交量,持仓量也可以直接这样转成数组吗?
上根K线的成交量vol[Barpos-1] ,持仓量openint[Barpos-1],系统能识别?
--  作者:jinzhe
--  发布时间:2017/3/9 17:01:57
--  
也可以,这些都是有k线数据的,即每根k线上都有对应的数据