以下是完整的错误消息:
??? Undefined function or variable "Indicator".
Error in ==> vidya at 44
Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1);
Error in ==> PnL at 22
[Fast] = vidya(Indicator,Shorter_Fast,Longer_Fast);
Error in ==> DEVolSys at 139
Ftemp=OF(data.Indicator,data.Daily_PnL,Pu(1,ii),Pu(4,ii),Pu(2,ii),Pu(5,ii),Pu(3,ii),Pu(6,ii),MinVol);
Error in ==> Optimser at 15
MA_lengths=DEVolSys(de,dataList,@PnL);
当调用下面的函数时,偶尔会出现错误??? Undefined Function或variable Indicator。
根据matlab编译器,这一行引起了问题
Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1);
这很奇怪,因为通常这些问题都与存储在错误位置的函数文件或未经初始化使用的变量相关联。
然而,这个函数作为优化方案的一部分被重复调用,并且它似乎比大部分时间都完美地工作但偶尔我得到上面的错误?
似乎问题参数集可能导致问题,但我无法理解问题参数集如何导致这样的问题?还有几千个参数来测试每个需要数百个步骤,我需要经历。我想尝试一下可能导致问题的原因,所以如果没有别的我知道该找什么。
因此,如果有人能解释可能导致此类问题的原因或调试此类问题的好方法,那就太棒了,
function [Indicator] = vidya(Index,Short,Long)
End_Index=1;
Start_Index=size(Index);
if Short>Long
TestVal=Short;
else
TestVal=Long;
end
for i=Start_Index:-1:End_Index
if(i>Start_Index-(TestVal+2))
Indicator(i)=Index(i);
else
Slow=std(Index(i:i+Long-1));
Fast=std(Index(i:i+Short-1));
k=Fast/Slow;
sc=2/(Short+1);
Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1);
end
end
端
答案 0 :(得分:1)
您只是在创建变量(指标)之前访问它。
Matlab不知道指标(i + 1)是指一个函数还是一个变量,因此产生了你得到的含糊不清的错误信息。
如果在第一次执行循环代码期间,
if(i>Start_Index-(TestVal+2))
是假的,那么
Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1);
将在创建变量Indicator之前执行。
正如Horchler评论的那样,错误是由代码
引起的Start_Index=size(Index);
应该是
Start_Index=length(Index);
正如我评论的那样,您可以通过使用行向量调用vidya来重现错误。例如:
vidya(1:10,3,4)