Erros, bugs, perguntas - página 1628

 
HistoryOrderGetInteger(OrderTicket, ORDER_TIME_DONE_MSC ) - devolve zero no testador!
 

Erro na abertura de um ficheiro por parte do examinador. E se, por exemplo

1. remover "algum código irrelevante" (ver abaixo)

2. ou remover ::Sleep(1000)

não há erro

//Test.mq5
#import "Test001.ex5"
        string f( string file );
#import
string __Period() { return StringSubstr( EnumToString((ENUM_TIMEFRAMES)Period()), 7 ); }
void OnInit()
{
        Print( Symbol(), ",", __Period(), ", результат=", f( "test.txt" ));
}

Sequência de acções:

1. Criar um novo perfil (por exemplo, "Teste")

2. abrir dois novos gráficos anexando o Test.ex5 Expert Advisor a ambos os gráficos (ver imagem)

4. Seleccionar qualquer outro perfil existente

5. Seleccione o perfil "Teste

resultado:

Com o Test001.mq5 com este aspecto:

//Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        ::ResetLastError();
        int hFile = ::FileOpen( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
        if ( hFile == INVALID_HANDLE )
                return ::StringFormat( "Error(%d): Не был открыт файл: %s", ::GetLastError(), file );
        ::Sleep( 1000 );
        ::FileClose( hFile );
        return "OK";
}
Arquivos anexados:
Test001.ex5  16 kb
 

O ficheiro test.txt em si não está anexado à mensagem, mas tem o seguinte aspecto

Informação adicional: localização do ficheiro a abrir no sentido de FILE_COMMON - não afecta o erro

 
Andrey Barinov:

Isto é optimização de código.

Se em metaeditor.ini no campo [Especialistas] escrever OPTIMIZE=0, então a velocidade de compilação será como em 4. Tenho alguns projectos compilados em 20 seg. e alguns entram em loop de optimização infinito :)

Uau, obrigado amigo! Onde estava antes! ) E estávamos a agonizar aqui... O mais estranho é que os criadores não disseram nada sobre esta opção
 
Alexey Navoykov:
Uau, obrigado companheiro! Onde é que já esteve antes! ) E aqui estamos nós a sofrer ... O estranho é que os programadores se calaram sobre esta opção.

Não em silêncio. Há um tópico de 18 páginas no fórum onde esta opção acabou de ser descrita.

A propósito, a optimização não é activada quando da compilação para depuração.

 
Andrey Barinov:

Isto é optimização de código.

Se em metaeditor.ini no campo [Especialistas] escrever OPTIMIZE=0, então a velocidade de compilação será como em 4. Tenho alguns projectos compilados em 20 segundos, e alguns entram em loop de optimização infinito :)

Exactamente! Dito isto, eu próprio o fixei em 1 há algum tempo atrás e simplesmente esqueci-me dele. ))

Alexey Navoykov:
... E ainda estamos a lutar aqui... O estranho é que os criadores não disseram nada sobre esta opção

O tópico foi discutido em detalhes:Teste de um novo compilador MQL5 para plataformas x64 - acelere de 2 a 10 vezes!>>>

>>> Esqueci-me disso. )

No início nem sequer tinha esta optimização a funcionar. Isto é, a compilação falharia em alguns casos. Mas depois consegui encontrar a razão. Depois foi fixado e eu fixei o parâmetro em 1 num dos terminais e esqueci-me dele. E ontem eu estava sentado a pensar porque é que num editor de MT5 a compilação é muito mais rápida do que noutro editor de MT5.

//---

Agora, se eu o definir para 0, a compilação é ~25 vezes mais rápida.

0 error(s), 0 warning(s), compile time: 668 msec                1       1
 
Anatoli Kazharski:

É claro que os meus projectos mais complexos no MetaTrader 5 também demoram muito tempo a compilar. Demora mesmo até 11 segundos. Exactamente as mesmas versões, mas no MetaTrader 4 pode ser até 25 vezes mais rápido.

No MT5, o compilador é mais avançado e optimiza o código para que funcione até 10 vezes mais rápido do que no MT5. Já escrevemos sobre o assunto e já o explicámos antes.

O compilador MQL5 tem de criar duas cópias do código para compatibilidade - para a antiga versão de 32 bits (sem optimização total) e a versão maximamente optimizada para 64 bits. A potência total da MQL5 é revelada apenas em 64 bits.

 
Renat Fatkhullin:

O compilador MT5 é mais avançado, optimiza o código para que funcione até 10 vezes mais rápido do que o MT5.

Além disso, o compilador tem de criar duas cópias do código para compatibilidade - para a antiga versão de 32 bits (sem optimização total) e a versão optimizada ao máximo para 64 bits. A potência total da MQL5 é revelada apenas em 64 bits.

Obrigado. Já refresquei a minha memória no fio onde tudo isto foi discutido.

Vou colocá-lo a 0 para o tempo de desenvolvimento, uma vez que muitas vezes tenho de fazer compilação e é muito cansativo esperar 10 segundos. E para o produto final antes da compilação final, vou colocar 1.

 
Renat Fatkhullin:

No MT5, o compilador é mais avançado e optimiza o código para que funcione até 10 vezes mais rápido do que no MT5. Já escrevemos e explicámos isto antes.

O compilador MQL5 tem de criar duas cópias do código para compatibilidade - para a antiga versão de 32 bits (sem optimização total) e a versão maximamente optimizada para 64 bits. A potência total da MQL5 é revelada apenas em 64 bits.

Se alterar o parâmetroOPTIMIZE quando o MetaEditor está a funcionar, precisa de o recarregar para aceitar as definições ou não?
 
coderex:
se o parâmetroOPTIMIZE for alterado quando o MetaEditor está a funcionar, é necessário recarregá-lo para aceitar as definições ou não?
É mais rápido experimentá-lo você mesmo. Acabei de o testar. Não é necessário reiniciar o editor.
Razão: