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

 
Vladimir Fionov:
Para pares de moedas, se colocar um limite, tudo funciona, mas para o período de tempo não funciona, mesmo se o colocar no indicador h1 não funciona

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valor de retornoPeríodo do gráfico actual (em minutos).

if(Period() != 60)  return(-1); // для H1

Experimente, talvez funcione.

if(Period() != PERIOD_H1)  return(-1);

Ou remover as vírgulas invertidas.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valor de retornoPeríodo do gráfico actual (em minutos).

Experimente-o e veja se funciona.

Muito obrigado, funcionou!!!!
 
Outra questão, ao adicionar um #propriedade rigorosa no início, o indicador dá uma matriz de erros fora do intervalo em 'Nome do Indicador' (100,41) como lidar com isto

 
Vladimir Fionov:
Outra questão, ao adicionar no início quando o #proprity strict indicator dá uma matriz de erros fora do intervalo em 'Nome do Indicador' (100,41) como lidar com ele

É necessário fixar o conjunto fora de alcance. Localização do problema no seu código: linha 100, caracter na posição 42.
 
Vladimir Fionov:

O que há de errado?

  1. Colar correctamente o código no fórum
  2. Deve corrigir o erro de exceder os limites da matriz"ema[]". Provavelmente está a calcular incorrectamente a variável"limite".
 
Karputov Vladimir:
  1. Inserção correcta do código no fórum
  2. Deve corrigir o erro de exceder os limites da matriz"ema[]". Provavelmente está a calcular incorrectamente a variável"limite".
Desculpe, não sabia da inserção do código, mas sobre o próprio código, porque é que isto acontece quando se insere #propriedade estrita e tudo funciona sem ela
 
Vladimir Fionov:
Desculpe, não sabia da inserção do código, mas quanto ao próprio código, porque é que isso acontece quando se insere #propriedade rigorosa e tudo funciona sem ela?

Já viu a ajuda no MetaEditor?

O trabalho com funções, âmbito das variáveis e memória libertadora em matrizes locais também mudou. Uma vez que as mudanças se revelaram bastante significativas, foi decidido introduzir uma nova propriedade #propriedade rigorosa, a fim de maximizar a compatibilidade com a antiga abordagem à escrita de programas MQL4. Ao criar um novo programa MQL4 utilizando o MQL4 Wizard, esta propriedade é sempre adicionada ao modelo.

E assim por diante:

Tabela de diferenças entre os compiladores:

O antigo compilador MQL4

Novo Compilador MQL4

Novo compilador MQL4 com #propriedade rigorosa

Os pontos de entrada init(), start(), deinit() podem ter qualquer parâmetro e qualquer tipo de retorno

init(), start(), deinit() retido para compatibilidade,

e os novosOnInit(),OnStart(),OnCalculate(),OnTick(),OnTimer(),OnChartEvent(),OnTester(),OnDeinit() devem coincidir exactamente com as suas assinaturas

O mesmo

O resultado de retorno da função init() não é analisado de forma alguma pelo subsistema de execução

O resultado de retorno das funções init() e OnInit() não é analisado de forma alguma pelo subsistema de execução

Ao devolver um valor não nulo do OnInit(), o perito ou indicador pára e o programa é descarregado

Os nomes das variáveis podem ser quase quaisquer (excepto as palavras reservadas), incluindo caracteres especiais e paragens completas

Os nomes das variáveis não podem ter caracteres especiais e paragens completas.

A listade palavras reservadas é alargada, pelo que palavras comuns tais como short, long, const, etc. não podem ser usadas como nomes.

O mesmo

O âmbito de uma variável é desde a declaração (mesmo num bloco aninhado) até ao fim da função.

O mesmo

Gama de visibilidade de uma variável - desde a declaração até ao fim do bloco em que a variável é declarada.

Inicialização implícita de todas as variáveis (tanto globais como locais) com zeros.

O mesmo

Inicialização apenas de variáveis globais. A partir de variáveis locais, apenas as cordas são implicitamente inicializadas

As matrizes locais não são libertadas ao deixar a função

As matrizes locais são libertadas ao deixar a função

As matrizes locais são libertadas na saída {}

Oerro"Array out of range" não conduz a um erro crítico*.

O mesmo. Excepto para conjuntos de estruturas e classes para as quais este erro é crítico

"Array out of range" é um erro crítico e faz com que o programa pare

Sem estruturas e classes

estruturas e classes. Aparecem tipos de dados adicionais.

O mesmo

Cordas - byte único.

data/hora - 32-bit integer

Variável pré-definida Volume tem tipo duplo

Cordas - unicode.

data/hora - inteiro de 64 bits

Ovolume é uma variável pré-definida de tipo longo.

O mesmo

ArrayCopyRates() produz cópia virtual para array double[][6]

ArrayCopyRates() produz uma cópia virtual para MqlRates[] array. Para compatibilidade, a cópia para matriz dupla[][6] permanece, mas esta cópia não é virtual mas real.

Também.

As funções não podem retornar valores, mesmo que tenham um tipo. Para este efeito, o compilador insere automaticamente o return(0) no fim da função.

O mesmo.

Funções de qualquer tipo devem sempre devolver um valor

Número de ficheiros abertos simultaneamente - 32

Número de ficheiros a serem abertos simultaneamente - 64

O mesmo

Os ficheiros são sempre abertos em modo partilhado **

O modo de partilha deve ser declarado explicitamente com FILE_SHARE_READ e/ou FILE_SHARE_WRITE

O mesmo

Os scripts na janela de entrada mostram os nomes das variáveisexternas

Os nomes dasvariáveisexternas e deentrada são mostrados na janela de parâmetros de entrada para os scripts no modo show_inputs.

Para scripts no modo show_inputs, os comentários de string são mostrados na janela de entrada em vez de nomes devariáveisexternas e deentrada

* Deve prestar especial atenção ao erro "Array out of range" - muitos dos antigos indicadores personalizados produzirão este erro no novo compilador em modo estrito, quando executado num gráfico. É desejável encontrar a causa e eliminá-la.

** Na nova MQL4 e MQL5 as bandeiras FILE_SHARE_READ e FILE_SHARE_WRITE são responsáveis pelo modo de partilha de ficheiros, não existiam na antiga MQL4.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
dizer-me o que está errado?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Tente acrescentar uma linha como esta.
 
Vladimir Fionov:

Desculpe se o estou a incomodar, mas agora há este erro

39ª posição.

O mesmo erro, matriz fora de alcance ?
 
Vladimir Zubov:
O mesmo erro, matriz fora de alcance ?
SIM