c++ - 阵列超出范围MQL5循环

标签 c++ arrays loops mql mql5

我试图遍历一系列收盘价以获得每种 Assets 的返回率。我写的代码是:

´´´

void返回(MqlRates&rt [],int a_size)

{

  double rtacao[];
  ArraySetAsSeries(rtacao, true);
  ArrayResize(rtacao,(a_size-1));

  for(int i=1;i<=a_size;i++)
  {
    rtacao[i]=MathLog(rt[i].close/rt[i-1].close); 
  }
 return;

}

无效的OnStart()

{
 int nacoes=144; 
 string acao[];

 count_instr("ativos.txt",nacoes);
 ArrayResize(acao,nacoes);
 load_instr("ativos.txt",nacoes,acao,100);

 MqlRates rates[];
 ArraySetAsSeries(rates,true);
 ArrayResize (rates,100);


 for (int i=0;i<nacoes;i++)
  {

     SymbolSelect(acao[i],true);
     if(CopyRates(acao[i],APeriod,0,100,rates)!=100)
     {
        Print("CopyRates of ",acao[i]," failed, no history");
        //Erase(acao, i);
        //nacoes=nacoes-1;
     } else
     {
        Returns(rates, 100);
     }
  }     

}

´´´

我收到以下错误消息:

2019.12.30 08:11:57.983 OnStart(IBOV,D1)数组超出'OnStart.mq5'中的范围(39,15)

在返回的计算中,它指向数组-rtacao []。我看不到循环中的错误。有人能帮我吗?

最佳答案

数组从0开始计数。这意味着数组的最后一个索引是(array_size-1)。据此,您应在循环中使用“i

for(int i=0;i<a_size;i++)
{
  rtacao[i]=MathLog(rt[i].close/rt[i-1].close); 
}

但是您必须考虑术语rt [i-1],它在循环的第一次运行中为-1。这意味着您需要为循环的第一次运行指定规格。就像是:
for(int i=0;i<a_size;i++)
{
  if(i==0)
     // something that happens when i is 0
  else
     rtacao[i]=MathLog(rt[i].close/rt[i-1].close); 
}

要么:
// something that happens when i is 0
for(int i=1;i<a_size;i++)
{
  rtacao[i]=MathLog(rt[i].close/rt[i-1].close); 
}

关于c++ - 阵列超出范围MQL5循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529968/

相关文章:

c++ - 对象的大小是否受访问说明符类型和继承类型的影响?

javascript - 为什么这会造成无限循环并使我的浏览器崩溃?

javascript - 如何循环遍历数字数组以查看哪些数字与另一个数字相关?

c - 向后遍历具有随机开始和结束的数组

c++ - 如何在 MFC 中创建预呈现输入窗口?

c++ - C++ Intellisense 和错误检查问题

c++ - 将套接字句柄传递给线程时,recvfrom() 返回错误 10022

python - 按索引调用多维 NumPy 数组时出现类型错误

php - while 循环 foreach 返回在下一个 for 循环中重复的值

php - 遍历 while 数组并向项目添加更多属性 - PHP