以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助下面程序哪里有问题,为什么说else前缺少if  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=5172)

--  作者:ppliu
--  发布时间:2011/2/15 11:31:38
--  [求助下面程序哪里有问题,为什么说else前缺少if

 IF(DATE<>REF(DATE,1)) THEN
 BEGIN
 DayOpen:=OPEN;
 PreDayRange:=PreDayHigh-PreDayLow;
 bRange:=OPEN*MinRange*0.01;
  if( PreDayRange<bRange) THEN  ( 该行提示标识符“if( PreDayRage<bRange) THEN “长度不能大于20个字符,当我将所有的PreDayRange改为PR时这个问题就解决了,请问这是怎么回事)
   PreDayRange:=bRange;
END
ELSE        (该行提示else前缺少if)
BEGIN
 DayOpen:=REF(DayOpen,1);
 PreDayRange:=REF(PreDayRage,1);
 blongStoped:=REF(blongStoped,1);
 bshortStoped:=REF(bshortStoped,1);
END

希望各位强人帮我解答一下,不胜感激!


--  作者:z7c9
--  发布时间:2011/2/15 11:54:11
--  

predayhigh:=0;
predaylow:=0;
minrange:=0;
blongstoped:=0;
bshortstoped:=0;

if date<>ref(date,1) then begin
 dayopen:=open;
 predayrange:=predayhigh-predaylow;
 brange:=open*minrange*0.01;
 if predayrange<brange then
  predayrange:=brange;
end else begin
 dayopen:=ref(dayopen,1);
 predayrange:=ref(predayrange,1);
 blongstoped:=ref(blongstoped,1);
 bshortstoped:=ref(bshortstoped,1);
end

 


--  作者:ppliu
--  发布时间:2011/2/15 14:20:13
--  

是需要先给变量赋予初值的问题吗?


--  作者:ppliu
--  发布时间:2011/2/15 14:29:54
--  

还有我将您的程序进行测试,显示REF函数在逐周期模式下不能再IF控制语句内使用,但错误显示在dayopen:=ref(dayopen,1)行,这是何解呢?


--  作者:董小球
--  发布时间:2011/2/15 14:44:32
--  

把ref语句提到外面来用 写个中间变量 然后再把变量名放到IF里用


--  作者:ppliu
--  发布时间:2011/2/16 11:20:20
--  [求助]

INPUT: PercentOfRange(0.3,0,1,0.1),MinRange(0.2,0,1.0.1),StopLossSet(0.5,0,1,0.1),
       TrailingStart(0.8,0,1,0.1),TrailingStop(0.5,0,1,0.1),
       ExitOnCloseMins(145000,140000,150000,100);
VARIABLE:blongStoped=false,bshortStoped=false,predayhigh:=0,predayrange=0,
         predaylow:=0, higherAfterEntry:=0,lowerAfterEntry:=0,myprice=0,dayopen=0;

 N1:=BARSLAST(DATE<>REF(DATE,1))+1;
 N2:=REF(N1,N1);
 PreDayHigh:=REF(HHV(HIGH,N2),N1);
 PreDayLow:=REF(LLV(LOW,N2),N1);

 if date<>ref(date,1) then begin
 dayopen:=open;  //dayopen取当天的开盘价//
 predayrange:=predayhigh-predaylow;
 brange:=open*minrange*0.01;
 if predayrange<brange then
  predayrange:=brange;
end  else begin
 dayopen:=ref(dayopen,1);
 predayrange:=ref(predayrange,1);
 blongstoped:=ref(blongstoped,1);
 bshortstoped:=ref(bshortstoped,1);

end

该程序显示ref函数在逐周期模式下不能再if控制语句中使用

但是把ref语句提到外面:

INPUT: PercentOfRange(0.3,0,1,0.1),MinRange(0.2,0,1.0.1),StopLossSet(0.5,0,1,0.1),
       TrailingStart(0.8,0,1,0.1),TrailingStop(0.5,0,1,0.1),
       ExitOnCloseMins(145000,140000,150000,100);
VARIABLE:blongStoped=false,bshortStoped=false,predayhigh:=0,predayrange=0,
         predaylow:=0, higherAfterEntry:=0,lowerAfterEntry:=0,myprice=0,dayopen=0,p1=0,b1=0,b2=0,h1=0,h2=0,l1=0,l2=0;
  N1:=BARSLAST(DATE<>REF(DATE,1))+1;
 N2:=REF(N1,N1);
 PreDayHigh:=REF(HHV(HIGH,N2),N1);
 PreDayLow:=REF(LLV(LOW,N2),N1);//跨周期取昨日的最高价与最低价//
 d1:=ref(dayopen,1);
 p1:=ref(predayrange,1);
 b1:=ref(blongstoped,1);
 b2:=ref(bshortstoped,1);
  if date<>ref(date,1) then begin
 dayopen:=open;  //dayopen取当天的开盘价//
 predayrange:=predayhigh-predaylow;
 brange:=open*minrange*0.01;
 if predayrange<brange then
  predayrange:=brange;
end  else begin
 dayopen:=d1;
 predayrange:=p1;
 blongstoped:=b1;
 bshortstoped:=b2;

end

测试正常,但调试dayopen等值都有问题,是怎么回事呢?

 


--  作者:ppliu
--  发布时间:2011/2/16 11:22:55
--  
麻烦您抽时间给我解答一下,新手上路,对金字塔语法运用还不是很熟练啊,感激万分!
--  作者:王锋
--  发布时间:2011/2/16 12:39:52
--  

请楼主仔细说明你上述公式到底遇到了什么问题?


--  作者:ppliu
--  发布时间:2011/2/16 13:44:35
--  
比如我本意是想让dayopen保存当日的开盘价,但是上程序运行后,dayopen不停的在两个值间变动,我这个程序用在一分钟线上!还有就是我觉得将ref函数用在if语句外面,可能得到的结果与我本意想得到的结果不符!
[此贴子已经被作者于2011-2-16 13:46:48编辑过]

--  作者:fly
--  发布时间:2011/2/16 13:54:15
--  

以下当日开盘价用于日线以下周期

dayopen:valuewhen(date<>ref(date,1),o);//当天开盘价

 

在外面,不影响的.

符合不符合,用这里面介绍的方法调试一下就知道了.

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246&page=1&star=1

[此贴子已经被作者于2011-2-16 14:13:33编辑过]