以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  IF后使用REF的烦恼  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=25345)

--  作者:haifan1986
--  发布时间:2012/9/10 11:03:50
--  IF后使用REF的烦恼

 input:N(15,0,80,1);////
 VARIABLE: SumXi:=0;
 VARIABLE: SqrSumYi:=0; 
     If (DATE<>REF(DATE,1)) THEN BEGIN
     Xi:=1;
 END

  If (DATE=REF(DATE,1)) THEN      Xi:=Xi+1;
  

    If (Xi>N) THEN BEGIN  
     For i = 1 To N DO BEGIN   
    SumXi=SumXi+Ref(Xi,i);  
    SumYi=SumYi+REF(Close,i);  
     END
     Part:=SumXi+SumYi;
    END

我想表达这样的逻辑;基本上上面能够看懂了,但是金字塔不支持在IF语句后面 使用REF,

请咨询如何实现我代码表达的意思;


--  作者:jinzhe
--  发布时间:2012/9/10 11:04:31
--  
处理中,争取在今天写出
--  作者:haifan1986
--  发布时间:2012/9/10 11:07:28
--  

谢谢,我会即使更新的,

题外话,在解决这个问题上TB就非常容易的,他的向前引用不受IF语句的影响。如果能弄的像TB一样方便就好了

申明;我是金字塔的忠实拥护者;哈哈


--  作者:阿火
--  发布时间:2012/9/10 11:16:33
--  

c[barpos-1] 即可

 

或者用一个变量在if....then .... 结构外记录一下

[此贴子已经被作者于2012-9-10 11:17:16编辑过]

--  作者:admin
--  发布时间:2012/9/10 11:22:32
--  

close[barpos-i]

用这个来替换


--  作者:jinzhe
--  发布时间:2012/9/10 14:08:47
--  

     For i = 1 To N DO BEGIN   
    SumXi=SumXi+xi[barpos-i]; 
    SumYi=SumYi+c[barpos-i]; 
     END

 

这样改吗?


--  作者:admin
--  发布时间:2012/9/10 16:49:22
--  

公式中的XI变量之前未做任何的声明初始,这样的做法,是一种很不好的编程习惯


--  作者:haifan1986
--  发布时间:2012/9/11 10:06:28
--  
测试1:ref(c,2),linethick0;
测试2:Close[barpos-2],linethick0;

提示下面一行数组越界 貌似不对吧

--  作者:jinzhe
--  发布时间:2012/9/11 10:08:02
--  

用序列计算试试


--  作者:admin
--  发布时间:2012/9/11 10:16:35
--  
以下是引用haifan1986在2012-9-11 10:06:28的发言:
测试1:ref(c,2),linethick0;
测试2:Close[barpos-2],linethick0;

提示下面一行数组越界 貌似不对吧

 

提示越界的主要原因是当barpos=1的时候,你去减2,自然会越界。

处理办法是用if语句,对序列做限制,前面头一行加上

 

if barpos < 3 then

exit;