两个问题(注释中也有写):
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;
很难理解你的代码用意,这种问题别人很难从中解决,建议
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 问题4, 仔细阅读金字塔的调试教程,使用单步跟踪,看看到底是问题出在哪一句上,具体到某个函数后,再有疑问我们就可以帮助解决了
不用理解代码用意:)这一个简单数学算法(对一些变量作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后就编译通过了!
这是能提示错误,还好;像前段代码中不提示却计算错误,则太可怕了!请即时跟踪此问题,多谢!!
问题已经得到解决,主要原因是变量名在编译时只采用了前面位数进行匹配,你暂时都使用REF来控制处理就可以了,等待下个版本升级
主要是用在判断和循环语句内,用REF还要在外面声明。请给我说一下怎么命名能回避这个问题就好啦,多谢!