0

这是完整的错误消息:

??? 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 or 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

结尾

4

1 回答 1

1

您只是在创建变量(指标)之前对其进行访问。

Matlab 不知道 Indicator(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)
于 2013-08-13T22:56:19.143 回答