Erros, bugs, perguntas - página 712

 
Olá,

Obrigado pela sua resposta, ajuda a resolver o problema da declaração.

A propósito, encontrei talvez um bug relacionado com a depuração:

Quando estiver a depurar um indicador, estando em modo breakpoint, prima a lista de indicadores no MetaTrader.
A aplicação congela e só é interrompida pelo gestor de tarefas (kill)


Por favor, tomem nota.
 
speedy:


Por favor, tomem nota.
Obrigado, obrigado.
 

A função OnTimer() no testador de estratégias, atrasa bastante a execução, quando solicitada a cada segundo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, com dois indicadores externos e correndo através de todos os ticks, está a correr 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) gerados dentro de 70418 ms (total de barras na história 6270, tempo total 70528 ms) Se OnTimer() for comentado, a execução é significativamente acelerada 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) gerados dentro de 22730 ms (total de barras na história 6270, tempo total 22870 ms) Estes atrasos são causados pelo testador, ou podemos acelerá-lo de alguma forma?

P.S. Uma prévia da mensagem teria sido implementada(

 
sion:

A função OnTimer() no testador de estratégias, atrasa bastante a execução, quando solicitada a cada segundo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, com dois indicadores externos e correndo através de todos os ticks, está a correr 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) gerados dentro de 70418 ms (total de barras na história 6270, tempo total 70528 ms) Se OnTimer() for comentado, a execução é significativamente acelerada 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) gerados dentro de 22730 ms (total de barras na história 6270, tempo total 22870 ms) Estes atrasos são causados pelo testador, ou podemos acelerá-lo de alguma forma?

P.S. Uma prévia da mensagem teria sido implementada(

É melhor inserir o código através do botão "SRC" no painel do editor.
 
papaklass:

O que significa esta entrada no testador?

É uma mensagem de sistema sobre a paginação da história.
 

Não tem graça.

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

Compreendo que as ligações no caso geral em mql5 não são devolvidas de funções (a propósito, porque não?), mas então é necessário fazer algo para tornar os indexadores de valor l possíveis. Por exemplo, para fazer uma excepção de sintaxe à regra geral para indexadores esquerdinos. Ou uma palavra-chave de algum tipo.

A manqueira obviamente não faz o mql5.... parecer agradável.

 
MetaDriver:

Limp claramente não faz mql5.... parecer bem

Não insulte o mql5, ainda é "minúsculo", mas amadurece muito rapidamente de construção em construção.
 
MetaDriver:

A manqueira claramente não faz o mql5.... parecer bom

É necessário construir ligações de pleno direito para isso :)

ZS: está a vazar :)

 

Bug?


O código abaixo gera uma espécie de loop perpétuo no compilador. Clicando em Cancelar

não funciona de imediato, mas quando funciona, recupera o controlo do editor.

O botão Cancelar em si não desaparece, mas também não é acessível.

O botão Compile perde-se para sempre (é necessário voltar a carregar o editor para o recuperar)


#include <Object.mqh>.

classe B;

classe A: B {
nulo a();
};

classe B: A {

CObject* a;
nulo b();
};
 
MetaDriver:

Não tem graça.

Como gosto de compreender que as ligações no caso geral em funções mql5 não regressam (a propósito, porque não podem?), mas devo fazer algo para tornar os indexadores de valor l possíveis, por exemplo, fazer uma excepção de sintaxe à regra geral para indexadores de esquerda. Ou uma palavra-chave de algum tipo.

A manqueira claramente não faz o mql5.... parecer agradável.

"Passar" elementos internos não pertencentes à classe base para o exterior (e neste exemplo não o atributo em si, mas apenas um elemento de matriz!) Especialmente com a possibilidade de alterar o seu valor não é seguro.

Além disso, contradiz o "espírito" da programação orientada para o objecto: todo o trabalho com dados do objecto deve ser realizado dentro do objecto, pelos seus próprios métodos...


Que tal utilizar apenas o Setter para o atributo de dados?

O código ganharia em legibilidade. Eventualmente, esta "simplicidade" com o indexador do valor l não fará ninguém entender como funciona este código...

Passará mais tempo à procura de erros do que a escrever Setter.

Aqui está um exemplo:

Se puder substituir o código como enquanto ((duplo)data[++i -1] < 10) por algo mais longo mas digerível, é melhor fazê-lo dessa forma...

teste estrutural

{

dados duplos[];

tamanho int;

void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}

conjunto vazioDataElement (índice int, valor duplo)

{

data[índice] = valor;

}


privado:

estática int Max;

};

//+------------------------------------------------------------------+


int Teste::Max=1024;

//+------------------------------------------------------------------+

//| Função de início do programa script |

//+------------------------------------------------------------------+

nulo OnStart()

{

Teste t;

t.Init(16);

for(int i=0;i<t.size;i++)

{

//t[i]=i*i; // ERRO :'=' - l-valor necessário

t.setDataElement(i, i*i);

}

}

Razão: