以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  代码中两个莫名其妙的问题!  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=10485)

--  作者:matador_liu
--  发布时间:2012/3/8 20:42:37
--  代码中两个莫名其妙的问题!
两个问题(注释中也有写):
  1、下面代码中why1与why2为什么不相同?
  2、Length2 的两种声明方式为什么会导致不同的Fisher_2?

我觉得我犯了低级错误,可实现找不出来了,求点化:)


RUNMODE            :    0;

//###########################################
_BARPOS            :=     BARPOS;

Fisher            :    0;
Trigger1        :    0, linethick0;
Trigger2        :    0, linethick0;
Value1            :=    0;

Fisher_2         :     0;
Value2             :=    0;

VARIABLE         :    Length = 8;
IF _BARPOS <= Length * 2 THEN EXIT;
 

price := (High + Low) / 2; //"JMA.JMA"(2); //(High + Low) / 2; "AMA.AMA";

{1 注释掉此段代码,why1 why2便相同了}
MaxH := HHV(price, Length);
MinL := LLV(price, Length);
Value1 := 0.5 * 2.0 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.5 * Value1[_BARPOS-1];
if Value1 > 0.9999 THEN Value1 := 0.9999;
if Value1 < -0.9999 THEN Value1 := -0.9999;
Fisher := 0.25 * Log((1 + Value1) / (1 - Value1)) + 0.5 * Fisher[_BARPOS-1];
Trigger1 := REF(Fisher, 1);
Trigger2 := Fisher[_BARPOS-1];


{2 下面两句会出现不同的Fisher_2值,为什么?}
//Length2 := Length;
VARIABLE         :    Length2 = Length;

Value2 := 0.5 * 2.0 * ((price - LLV(price, Length2)) / (HHV(price, Length2) - LLV(price, Length2)) - 0.5) + 0.5 * Value2[_BARPOS-1];
if Value2 > 0.9999 THEN Value2 := 0.9999;
if Value2 < -0.9999 THEN Value2 := -0.9999;
Fisher_2 := 0.25 * Log((1 + Value2) / (1 - Value2)) + 0.5 * Fisher_2[_BARPOS-1];
why1 : REF(Fisher_2, 1), LINETHICK0;
why2 : Fisher_2[_BARPOS-1], LINETHICK0;

--  作者:jinzhe
--  发布时间:2012/3/9 9:01:46
--  

问题正在解决中


--  作者:matador_liu
--  发布时间:2012/3/16 16:12:36
--  
请问 这个问题有结果了吗?
--  作者:王锋
--  发布时间:2012/3/16 20:16:57
--  
很难理解你的代码用意,这种问题别人很难从中解决,建议 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 问题4, 仔细阅读金字塔的调试教程,使用单步跟踪,看看到底是问题出在哪一句上,具体到某个函数后,再有疑问我们就可以帮助解决了
--  作者:matador_liu
--  发布时间:2012/3/21 21:08:58
--  
 不用理解代码用意:)这一个简单数学算法(对一些变量作fisher转换),我只是怀疑代码编译有问题!即:
why1 : REF(Fisher_2, 1), LINETHICK0;
why2 : Fisher_2[_BARPOS-1], LINETHICK0;

这句中,wh1与wh2值应该相同才是,但在这段代码中它们是不同的!

可以这样验证:将这段代码中Fisher_2全部替换为Fiii_2,这时wh1与wh2值是相同的!

我猜测:代码中同时存在 Fisher与 Fisher_2两个变量,编译器有bug,语句分析有问题!因为前两天我还碰到类似问题,即代码中有CPeriod变量,但编译不过去,提示“2Period如何如何”,但我的代码中真没有2Period这个变量,也不是CPeriod重复定义问题,一看就是编辑阶段问题。后将此变量改为CP后就编译通过了!

这是能提示错误,还好;像前段代码中不提示却计算错误,则太可怕了!请即时跟踪此问题,多谢!!
--  作者:admin
--  发布时间:2012/3/22 11:18:32
--  

正在解决处理


--  作者:admin
--  发布时间:2012/3/23 11:30:00
--  求助:自定义函数调用问题
问题已经得到解决,主要原因是变量名在编译时只采用了前面位数进行匹配,你暂时都使用REF来控制处理就可以了,等待下个版本升级
--  作者:matador_liu
--  发布时间:2012/3/23 14:43:00
--  
 主要是用在判断和循环语句内,用REF还要在外面声明。请给我说一下怎么命名能回避这个问题就好啦,多谢!