Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 687

 

Como é que sei porque é que esta construção não funciona?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
Relata um conjunto de erros fora do intervalo em '**.mq5' (13,10)
Se eu substituir o fio duplo buf[]; por duplo buf[10]; então não há saída fora da matriz.
 
ivanivan_11:

Pode dizer-me porque é que esta construção não funciona?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
relata um array de erros fora do intervalo em '**.mq5' (13,10)
se eu substituir a string double buf[]; por double buf[10]; então não há saída do array.

Ou duplo buf[10];

Ou duplo buf[]; mas depois necessariamente ArrayResize(buf,10);

 
Artyom Trishkin:

Ou duplo buf[10];

Ou duplo buf[]; mas depois tenho de fazer ArrayResize(buf,10);

Obrigado.

posso explicar algo mais?

Isto é, se eu inicializar uma matriz e depois a preencher no laço, o seu tamanho crescerá a cada iteração, e terei de redefinir o seu tamanho... Pensei que isto era feito automaticamente, não importa quantos elementos eu lhe acrescentasse.

Se o preencher imediatamente com um certo número de elementos, não tenho de fazer este procedimento.

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

Obrigado.

Posso torná-lo mais claro?

Ou seja, se eu inicializar uma matriz e depois a preencher no laço, o seu tamanho crescerá a cada iteração, e terei de redefinir o seu tamanho... Pensei que se fazia automaticamente, independentemente de quantos elementos lhe acrescentasse.

e se o preencher imediatamente com um certo número de elementos, não tenho de fazer tal procedimento.

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

A função CopyXXXX() anula automaticamente o tamanho da matriz passada para ela.

Se preencher a matriz você mesmo, se for dinâmica, então cabe ao programador certificar-se de que é do tamanho certo.

Pode, quando declara uma matriz, fazê-la

  • uma matriz dinâmica, caso em que cabe-lhe a si redefinir o seu tamanho.
  • não-dinâmico: buff[5] - nesse caso, é necessário inicializá-lo com os valores certos
  • não dinâmico: buff[]={10,20,30,40,50}; - neste caso é inicializado com valores na declaração
 
Artyom Trishkin:

A função CopyXXXX() anula automaticamente o tamanho da matriz que lhe foi passada.

Se for você mesmo a preencher o conjunto, se for dinâmico, cabe ao programador certificar-se de que tem o tamanho certo.

Pode, quando declara uma matriz, fazê-la

  • uma matriz dinâmica, caso em que cabe-lhe a si redefinir o seu tamanho.
  • não-dinâmico: buff[5] - neste caso, é necessário inicializá-lo com os valores certos
  • não-dinâmico: buff[]={10,20,30,40,50}; - neste caso será inicializado com valores declarados por si
obrigado pelo esclarecimento
 
Quem sabe o que significam os números no gráfico de execução na optimização genética? Existem dois números, por exemplo 0,637 ou 7,27. E como escolher a corrida certa. Por exemplo, estou interessado na corrida número 5381. Como escolhê-lo?
 
quem sabe o que é o sinal entre parênteses?GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
quem sabe o que é o sinal entre parênteses?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Operação OR exclusiva Bitwise
 

A sério? A sério?

Sempre pensei que(^) era uma exponenciação.

 
Roma Ivanov:
quem sabe o que é o sinal entre parênteses?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Conversão de graus.