Erro ao tentar passar/acessar Mqlrates array na função.

 

Olá, Amigos!


No corpo funciona normal,mas quando tento acessar por função

o mesmo código ele não acessa muito bem o índice ou a struct,

tem algum jeito?? senão vou ter que criar metade do bot no corpo.


double mediaCandle(double media, MqlRates velasJaponesas)
   {
   
      if(media == 0)
      {
   
      double corpo = 0;
      double maxMin = 0;
   
      for(int indice=0;indice<10;indice++)   
         {    
         
         corpo += MathAbs((velasJaponesas[indice].open - velasJaponesas[indice].close)); 
              
         }
      
      corpo /= 10;
      Print(corpo);   
                  
      }      
    
   }
   
   
   
   
   
 



MqlRates velasJaponesas;

double mediaCandle(double media, &velasJaponesas[]) 

use o operador & antes do nome do array. só não sei se funciona criando o array direto nos parâmetros da função como vc fez. acho melhor criar o array fora.

 

Em MQL5 não podemos ter um retorno de array, pois, ao contrário das variáveis, os arrays apenas podem ser passados para uma função por referência. Isso significa que a função não cria a sua própria instância do array e, ao invés disso, trabalha diretamente com o array passado para ela. Assim, todas as mudanças realizadas nesse array dentro da função fazem com que o array original seja afetado.

Então o nome do array no parâmetro pouco importa. Imagina isso>

double x[];

bool funcX(double &T[])
{
bool res=false;

if(ArrayResize(T, 10))
    res=true;

return res;

}



void OnStart(void)
{
 Print(ArraySize(x));
funcX(x);
Print(ArraySize(x)); 
}

 
Jonathan Pereira:

Em MQL5 não podemos ter um retorno de array, pois, ao contrário das variáveis, os arrays apenas podem ser passados para uma função por referência. Isso significa que a função não cria a sua própria instância do array e, ao invés disso, trabalha diretamente com o array passado para ela. Assim, todas as mudanças realizadas nesse array dentro da função fazem com que o array original seja afetado.

Então o nome do array no parâmetro pouco importa. Imagina isso>



Acho que to com problema de acessar a Struct Mqlrates dentro da função pra fazer as contas. 

 
ArmandoJunior70:

use o operador & antes do nome do array. só não sei se funciona criando o array direto nos parâmetros da função como vc fez. acho melhor criar o array fora.

O problema tá mais que é uma struct, só se criar uma lista normal e passar por parametro, mas vai dar mais trabalho.

 
Diego Wozniak:


Acho que to com problema de acessar a Struct Mqlrates dentro da função pra fazer as contas. 

A questão é, um array tem dimensão e tamanho OK?

quando vc criou sua variavel do tipo array MqlRates vc definiu o seu tamanho ? muito provavelmente não, então é muito provável que o erro seja isso.

em que momento vc carrega os dados nessa variael ?

no seu código fica muito solto isso, cabe apenas interpretação. 

 
Jonathan Pereira:

A questão é, um array tem dimensão e tamanho OK?

quando vc criou sua variavel do tipo array MqlRates vc definiu o seu tamanho ? muito provavelmente não, então é muito provável que o erro seja isso.

em que momento vc carrega os dados nessa variael ?

no seu código fica muito solto isso, cabe apenas interpretação. 

Entendi, Jonathan, você sabe como mandar a função retornar múltiplos valores?


pra definir o tamanho eu faço assim Mqlrates array[:12] tipo até o índice 11, tô mais acostumado com python. kkkkk

 
Diego Wozniak:
Para definir tamanho vc usa um ArrayResize igual ao exemplo que eu dei.
O que seria múltiplos valores ?
 
Jonathan Pereira:
Para definir tamanho vc usa um ArrayResize igual ao exemplo que eu dei.
O que seria múltiplos valores ?

a função retornar mais de um valor.

Razão: