Perguntas de um "boneco" - página 65

 
x100intraday:

Quando chamo a minha função, devo passar a matriz por referência, via ponteiro ou outra coisa?

Ler a secção sobre a passagem de parâmetros por valor e por referência:

Referência MQL5 / Noções básicas de linguagem / Funções / Parâmetros de passagem

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

Ler a secção do Manual de Referência sobre a passagem de parâmetros por valor e por referência:

Referência MQL5 / Noções básicas de linguagem / Funções / Parâmetros de passagem

Na verdade, acabei de vir de lá e os erros de compilação que mencionei na minha mensagem anterior aconteceram depois de ler a secção acima.

Agora reli-o cuidadosamente - é tudo uma questão de const e onde colocá-lo.

Obrigado, já descobri.

 
x100intraday:

NaOnCalculate posso facilmente utilizar elementos de matriz como alta por índice. Também é possível aceder aos elementos de índice desta matriz em ExtFunc? Ao chamar a minha função, devo passar o array-argument por referência, através do ponteiro ou outra coisa? Até agora consegui minimizar as mensagens de erro para: "'alto' - a conversão de parâmetros não é permitida" e "'alto' - variável constante não pode ser passada como referência" em relação à mesma linha da minha chamada de função com o argumento de matriz da OnCalculate. É inútil ou existe uma solução?

Até agora, na OnCalculate, recorri à cópia em alta para outra matriz:

e depois utilizar CopyOfHigh em ExtFunc, em vez de usar directamente a alta radiação.

Só tem de passar a matriz para a sua função por referência

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

Saudações a todos!

O que significa o aviso:

possível perda de dados devido a perito em conversão de tipo.mq5

quando a compilar? Diz isto:

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

O que é que está errado?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Basta passar a matriz para a sua função por referência

Não exactamente:

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

Saudações a todos!

O que significa o aviso:

possível perda de dados devido a perito em conversão de tipo.mq5

quando a compilar? Diz isto:

O que é que está errado?

A funçãoSymbolInfoInteger() retorna um valor de tipo longo (ver Referência), enquanto DIGITOS é declarado como int. Esta é uma conversão de tipo implícita. Ver "Conversão do tipo".
 
RomanS:

O que significa o aviso:

possível perda de dados devido à conversão do tipo

O significado desta mensagem varia, dependendo do contexto em que está a ser considerada.

Por exemplo:

1. "Faça uma conversão de tipo explícita"!

   int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2. "Possível contração de dados com conversão de tipo implícita" // Esta é uma tradução literal.

Isto é compreensível, uma vez que o tipo longo devolvido pela função tem um tamanho maior e cobre uma gama mais ampla de valores.

Outra opção que me vem mais vezes à cabeça ultimamente:

3. "O pessoal da MetaQuotes não compreende quão fixe, atraente e eficaz seria aprender se as mensagens de erro e os avisos do compilador mql5 fossem dados na língua materna do utilizador".

 
MetaDriver:

... quão fresco, atraente e eficaz seria aprender se as mensagens de erro e avisos do compilador mql5 fossem dadas na língua nativa do utilizador".

Sim, não seria mau. Embora eu, pessoalmente, já seja um pouco sábio em inglês, e os tradutores são uma dúzia de cêntimos nestes dias, mas mais uma vez, isto ocupa um tempo valioso, que não é tanto assim. Algumas pessoas não têm o suficiente para utilizar um tradutor para um assunto tão complicado como o comércio nos mercados financeiros + programação. MetaTrader 5 é uma plataforma multilingue. Desejo que as mensagens e comentários nos exemplos de ajuda (por vezes deparamo-nos com eles) estejam na língua que foi seleccionada no terminal.
 

Tenho a suspeita de que se o indicador for activado através do iCustom, é calculado em cada tick. E não depende das chamadas que lhe são feitas através do CopyBuffer. É correcto?

Se estiver correcto, então é possível desactivar o cálculo do indicador e activá-lo apenas antes de chamar o CopyBuffer?

 
masharov:

Tenho a suspeita de que se o indicador for activado através do iCustom, ele é calculado em cada tick. E não depende das chamadas que lhe são feitas através do CopyBuffer. É correcto?

Depende da lógica do indicador personalizado. Na verdade, pode recalcular os seus valores uma vez por dia, saltando todas as outras carraças. Por assim dizer, de acordo com a vontade do autor.

masharov:

Em caso afirmativo, é possível desactivar o recálculo do indicador e activá-lo apenas antes de chamar o CopyBuffer?

Basicamente, algumas pessoas tentam utilizar esta abordagem monstro: criar uma cópia do indicador através do iCustom, copiar os dados necessários, apagar a cópia do indicador. O procedimento é repetido sempre que necessário.

Existe também a função OnTimer(), eu próprio não trabalhei com ela, mas talvez possa adaptá-la à sua tarefa.

Razão: