以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  自定义函数返回值永远是0  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=50986)

--  作者:klc
--  发布时间:2013/4/12 16:16:48
--  自定义函数返回值永远是0

在逐K线的公式中,调用一个自定义函数:

A:=synxh(B);

debugfile(\'c:\\test.txt\',\'%d\',A);

A总是输出0

 

但在自定义函数中,用了

synxh=1

application.msgout synxh

则能输出1


--  作者:admin
--  发布时间:2013/4/12 16:30:48
--  
你的程序就只有这4句话?
--  作者:klc
--  发布时间:2013/4/12 16:36:17
--  

有个

B:=1;

if ISLASTBAR then

begin

  A:=synxh(B);

 debugfile(\'c:\\test.txt\',\'%d\',A);

end;

你好,很奇怪,结果text.txt文件中是有输出,但总是0,但

A:synxh(B);

则能从图表中看到,最后一个BAR的A是1


--  作者:klc
--  发布时间:2013/4/12 16:48:05
--  
知道了,要用%f输出,返回值是浮点
--  作者:klc
--  发布时间:2013/4/12 16:55:18
--  

然后接下来对返回值的判断还必须这样写:

if A=1.0 then....

而如果用

if A=1 then ...就永远不执行

1.0不等于1么?好奇怪


--  作者:admin
--  发布时间:2013/4/12 18:24:49
--  
论坛关键字搜索 浮点误差
--  作者:klc
--  发布时间:2013/4/14 10:21:25
--  

admin你说的浮点误差问题是任何软件在进行计算后都可能存在的,现在我的问题是简单的赋值算不算计算?

比如:

th:=THOLDING;

if th=1 then

begin

........

end

 

需要写成:

th:=THOLDING;

if round(th)=1 then

begin

........

end

吗?


--  作者:klc
--  发布时间:2013/4/14 10:25:25
--  

更极端的情况是:

AA:=1.0;

BB:=AA;

CC:=BB;

DD:=CC;

是不是经过了反复计算?

是不是要写成:

AA:=1.0;

BB:=round(AA);

CC:=round(BB);

DD:=round(CC);