初学者的问题 MQL5 MT5 MetaTrader 5 - 页 687

 

我怎么知道为什么这个结构不工作?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
它在'**.mq5'(13,10)中报告了一个错误阵列超出范围。
如果我把字符串double buf[];替换成double buf[10];,那么在数组之外就没有出口。
 
ivanivan_11:

你能告诉我为什么这种结构不起作用吗?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
报告错误 数组超出范围 在'**.mq5' (13,10)
如果我把字符串double buf[]; 替换成double buf[10]; 则没有退出数组。

要么是双buf[10]。

或者是双倍的buf[];,但这时一定要ArrayResize(buf,10)。

 
Artyom Trishkin:

要么是双buf[10]。

或者双倍Buf[];,但这样我就必须做ArrayResize(buf,10)。

谢谢你。

我还可以解释一下吗?

也就是说,如果我初始化一个数组,然后在循环中填充它,它的大小将随着每次迭代而增长,我必须重新定义它的大小? 我以为这是自动完成的,无论我向它添加多少元素。

如果我立即用一定数量的元素填充它,我就不必做这个程序。

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }
 
ivanivan_11:

谢谢你。

我可以说得更清楚吗?

也就是说,如果我初始化一个数组,然后在循环中填充它,它的大小会随着每次迭代而增长,我必须重新定义它的大小? 我以为那是自动完成的,无论我向它添加多少元素。

而如果我立即用一定数量的元素填充它,我就不必做这样的程序。

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }

CopyXXXX()函数会自动覆盖传递给它的数组的大小。

如果你自己填入数组,如果它是动态的,那么就由程序员来确保它的大小是正确的。

当你声明一个数组时,你可以让它

  • 一个动态数组,在这种情况下,由你来重新定义其大小。
  • 非动态:buff[5] - 在这种情况下,你需要用正确的值来初始化它。
  • 非动态:buff[]={10,20,30,40,50}; - 在这种情况下,它在声明时被初始化为数值。
 
Artyom Trishkin:

CopyXXXX()函数会自动覆盖传递给它的数组的大小。

如果你自己填充数组,如果它是动态的,那就要由程序员来确保它的大小是正确的。

当你声明一个数组时,你可以让它

  • 一个动态数组,在这种情况下,由你来重新定义其大小。
  • 非动态:buff[5] - 在这种情况下,你需要用正确的值来初始化它。
  • 非动态:buff[]={10,20,30,40,50}; - 在这种情况下,它被初始化为你声明的值
谢谢你的澄清
 
谁知道在遗传优化中,运行图中的数字意味着什么?有两个数字,例如0.637或7.27。以及如何选择正确的运行。例如,我对5381的运行号码感兴趣。如何选择它?
 
谁知道括号里的符号是什么?GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
谁知道括号里的符号是什么?GHPR=(BalanceClose/BalanceOpen)^(1/N)
位数排他性OR操作
 

真的吗?

我一直认为(^)是一个指数

 
Roma Ivanov:
谁知道括号里的符号是什么?GHPR=(BalanceClose/BalanceOpen)^(1/N)
学位转换。
原因: