Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共12 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:ref函数没办法用

1楼
牤牛 发表于:2017/3/8 23:02:35
 ref语句不能用在for语句和if语句里,我发现如果我要统计前60根K线的收盘价,成交量,持仓量,除了一个个赋值,没有更好的办法。
2楼
netfox 发表于:2017/3/8 23:46:52
count 不是统计吗?
3楼
jinzhe 发表于:2017/3/9 9:08:45
是不能直接用,可以间接用,你看下编译给你的提示链接
4楼
牤牛 发表于: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];
请问怎么间接用。
5楼
jinzhe 发表于:2017/3/9 9:58:09
编译时给你的提示连接
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
6楼
牤牛 发表于:2017/3/9 10:23:12
你是不懂我们上班族电脑有监控的苦恼啊,我上班时间要能把这个软件打开,我早打开看了。我只能晚上回家看,然后有新问题第二天您才能回复。那么周期就太长了。
7楼
jinzhe 发表于:2017/3/9 10:24:13

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

 

8楼
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

9楼
牤牛 发表于:2017/3/9 16:49:02
请问成交量,持仓量也可以直接这样转成数组吗?
上根K线的成交量vol[Barpos-1] ,持仓量openint[Barpos-1],系统能识别?
10楼
jinzhe 发表于:2017/3/9 17:01:57
也可以,这些都是有k线数据的,即每根k线上都有对应的数据
共12 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in 0.04688 s, 3 queries.