Erros, bugs, perguntas - página 743

 
Fia:

Olá, senhores desenvolvedores!

Podemos fazer alterações no compilador MQL5 para, pelo menos, nos dar um aviso?

por erros deste tipo no código.

if(Flag_Exitl=true) {break;}


A condição de comparação aqui não é correcta (deveria ser == ), é por isso que será sempre quebrada.

Como abordar esta situação no compilador (se for possível), para que eu possa ficar menos acidentado ao escrever o código?

(Pensei que não iria funcionar, parece que deveríamos separar a atribuição e a comparação em se, por isso a questão é eliminada).

Pode fazê-lo, se a condição contiver atribuição booleana com constante à direita.
As variáveis do tipo bool não podem ser comparadas com verdadeiro/falso, mas utilizadas directamente (essencialmente é uma bandeira de sim/não)
if(Flag_Exitl) {break;}
O seu caminho é amanteigado.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
notused:

Recebo regularmente erros 4401

ERR_HISTORY_NOT_FOUND

O seguinte código indicador

dará um erro logo após o início (se não em D1). Ou melhor, uma vez iniciado o terminal e aberto o gráfico - para colocar o indicador, obterá um erro. Se o terminal não estiver fechado, então não haverá tal erro no início.

Mas após algum tempo (um par de horas - 2 horas foram suficientes para mim), veremos que o erro será detectado no gráfico já aberto. (eu estava a geri-lo na m30)

Representantes, MetaQuotes, por favor comentem, é suposto ser assim?
 
struct SDaylyRange {double min, max, open, close;};
struct SNoDaylyRange {
   uint x;
   double y;
 };

void OnStart()
  {
   SNoDaylyRange tmp;
   SDaylyRange tmp2 = tmp;
  }
Este código é compilado sem um único aviso. Embora provavelmente nem sequer deva compilar
 
notused:
...erro 4401 aparece regularmente

referência:

Organização do acesso aos dados

Acessibilidade de dados

A disponibilidade de dados em formato HCC ou mesmo em formato HC pronto a usar nem sempre significa a disponibilidade incondicional destes dados para exibição num gráfico ou para utilização em programas de mql5.

Ao aceder aos dados de preços ou valores indicadores dos programas mql5, devemos lembrar que não é garantido que estes estejam disponíveis num determinado momento, ou a partir de um determinado momento. Isto tem a ver com o facto de o MetaTrader 5 não armazenar a cópia completa dos dados necessários para o programa mql5, mas dá acesso directo à base de dados do terminal, a fim de poupar recursos.

O histórico de preços para todos os períodos de tempo é construído a partir dos dados comuns em formato HCC e qualquer actualização do servidor leva à actualização dos dados para todos os períodos de tempo e ao recálculo do indicador. Por conseguinte, o acesso aos dados pode ser negado mesmo que os dados estivessem disponíveis há apenas um momento.

CopyRate

Ao solicitar dados do indicador, se as séries de tempos solicitadas não tiverem sido construídas ou precisarem de ser descarregadas do servidor, a função retornará -1 imediatamente, mas o processo de descarregamento/construção será iniciado.
Parece ser assim que deve ser. Antes de copiar a SÉRIE_SYNCRONIZED você pode verificar...
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Swan:

ficha de informação:

Parece que deveria ser. Até CopyRate SERIES_SYNCRONIZED você pode verificar...

Estou apenas a aspergir cinzas na minha cabeça, sim. Obrigado.

Embora seja estranho ver o pedido de duas barras e o histórico indisponível, embora apenas a barra zero mude. Mas não importa - se está descrito na documentação, não é um erro

 

no meu IsNewBar houve um erro a sair.

Em vez de

CopyTime(sym, period, 0, 1, currentTime);

Eu devia ter escrito

   if (CopyTime(sym, period, 0, 1, currentTime) < 1) return (false);

E eu estava a pensar porque é que a cada duas horas IsNewBar(PERÍODO_D1) == true -> portanto descobri a inacessibilidade da história, mas não consegui pensar numa função que escrevi há um ou dois anos atrás.

 
sergeev:

Porque é que o indicador não pode lidar com tipos de cor (COLOR_ARROW, etc.) com mais do que um tampão

amostra de código

Estabelecemos dois DRAW_COLOR_ARROW (buf1 e buf2) e para cada um buffer de cor adicional (clr1, clr2)

Ao mesmo tempo, embora o segundo buffer buf2 receba barras Alto/Baixo, não aparece no gráfico. Parece que a cor das setas neste tampão = clrNONE. Ou seja, a definição da cor no tampão clr2 não funciona


aqui está uma captura de ecrã. apenas os valores de buf1/clr1 são visíveis. os valores do segundo tampão não são exibidos com cor embora os valores sejam recebidos.


Onde está o erro?

A pergunta foi simplesmente criada para responder "no ADN MQL5".

Este disparate também no DRAW_FILLING e mesmo no DRAW_HISTOGRAM2 relativamente normal (não tão estável, claro, mas ocorrem bugs).

Apenas pela instabilidade dos insectos, concluo que é pouco provável que consiga uma resposta sem um CD.

 

Bild 642 para Win32

Aparece algum problema com matrizes tridimensionais de duplo se, por engano, for além dos limites da matriz quando a saída na função de impressão

O guião entra num loop infinito por si só.

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

}
//-------------------------------------------------------
double f(double x){return(1/(1+MathExp(-x)));}
 
IgorM:

Bild 642 para Win32

aparece algum problema com as matrizes tridimensionais se, por engano, se sair da matriz ao imprimir na função de impressão

Na verdade, a ultrapassagem ocorre duas linhas antes

e está a chamar um expoente de um elemento inexistente, muito provavelmente zero.

Ver no diário de bordo

 
sergeev:

Geralmente, os out-of-bounds ocorrem duas linhas mais cedo

e está a chamar um expoente de um elemento inexistente, muito provavelmente zero.

ver no diário de bordo

Sim, eu sei, e citei um código que não causa um erro de tempo de execução, mas faz loops no guião