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);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i=0;
if ExtFunc("s",60,i,high) == 1)
Buffer[i] = high[i];
}
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".
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".
... 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?
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.
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
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.
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
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?
Basta passar a matriz para a sua função por referência
Não exactamente:
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?
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"!
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".
... 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".
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?
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.
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.