Teste o novo compilador MQL5 para plataformas x64 - cálculos 2 a 10 vezes mais rápidos! - página 2

 
Yury Kulikov:
Por exemplo, as comunicações interterminais.

Bem, se você torcer assim, então é claro que a DLL é uma característica útil...

Mas eu pessoalmente para esta mesma tarefa decidi que não preciso realmente de uma DLL para isso. Neste momento estou pensando em uma EA que pegaria citações de uma corretora e enviaria sinais para outra, e que não tem nem mesmo MetaTrader. (DucaCopi, a propósito, pergunto-me se a MetaQuotes concordará com este venerável corretor...).

Estava pensando na direção da DLL. Mas decidiu que os arquivos compartilhados são muito mais seguros e mais razoáveis. Deixe MetaTrader escrever sinais para o arquivo. E deixe outro MetaTrader (ou JForex ou outra pessoa) lê-los e executá-los.

 

A propósito, estive pensando em referências de matriz...

Renat, eu faço uma sugestão:

Como temos uma Biblioteca Padrão, não deveríamos acrescentar uma variante da função OnCalculate() com o seguinte protótipo:

intOnCalculate(constint rates_total,//size of input timeseries
constint prev_calculado,// barras processadas na chamada anterior
const CiTime* ptTime,// Tempo
const CiOpen* poOpen,// Aberto
const CiHigh* phHigh,// Alto
const CiLow* plLow,// baixo
const CiClose* pcClose,// Fechar
const CiTickVolume* ptvTickVolume,// Volume do Tick
const CiRealVolume* prvRealVolume,// Volume real
const CiSpread* psSpread// Spread
);

?

Na minha opinião, isto exigiria mudanças muito pequenas no MetaTrader, mas, por outro lado, simplesmente fornece indicações para as matrizes, que podem ser passadas para as classes de manipuladores sem cópia. E a idéia da própria Biblioteca Padrão é popularizada.

 

Obteve os primeiros resultados de comparar o desempenho do antigo e do novo compilador, por exemplo, de um projeto realmente grande (~20.000 linhas de código fonte).

Resultados do tempo de execução do programa compilado com a versão antiga do compilador (4 execuções):

2015.05.02 13:48:46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.443 sec. 116 MB RAM used.
2015.05.02 13:48:27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.427 sec. 116 MB RAM used.
2015.05.02 13:48:12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.287 sec. 116 MB RAM used.
2015.05.02 13:47:49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 8.751 sec. 116 MB RAM used.

Resultados do tempo de execução de um programa compilado na nova versão do compilador (4 execuções):

2015.05.02 13:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.475 sec. 116 MB RAM used.
2015.05.02 13:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.616 sec. 116 MB RAM used.
2015.05.02 13:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.444 sec. 116 MB RAM used.
2015.05.02 13:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.147 sec. 116 MB RAM used.

*A segunda e a próxima execução do programa foram realizadas em cache aquecido - como se vê, o cache aquecido aumenta a produtividade em 15-30%.

Como você pode ver, os resultados são melhores no novo compilador: levou ~6,4 segundos para analisar mais de 20000 negócios e pedidos na primeira execução e ~5,4 segundos na segunda, ou seja, o ganho de desempenho de 15-20%.

A melhoria do desempenho poderia ter sido maior, mas a maior parte do tempo é ocupada por chamadas de funções do sistema.

 

O novo compilador não detectou erros no projeto, totalizando mais de 20.000 linhas de código fonte. Este é um excelente resultado, levando em conta que este projeto foi criado para a versão antiga do compilador.

Entretanto, o novo compilador gerou várias mensagens de aviso relacionadas à exibição incorreta de caminhos de arquivos (exigência de fuga de barra):

Esta é uma exigência justa, que pode ser facilmente atendida com algumas pequenas modificações.

Assim, podemos concluir que mesmo grandes projetos escritos em MQL5 estão prontos para o novo compilador e a mudança para ele não será um problema para os desenvolvedores profissionais.

 
Sergey Eremin:
...
Eu recebo"erro de geração de código 1 1".

...

Eu também recebo este erro.
 
O principal ganho está na matemática e em seus próprios cálculos.

Se a maior parte do trabalho árduo estiver em chamadas de sistema, a aceleração será pequena.
 
Renat Fatkhullin:
O principal ganho está na matemática e nos próprios cálculos.

Se a maior parte do trabalho árduo estiver em chamadas de sistema, a aceleração será pequena.

Ainda é bom, porque você pode criar seu próprio ambiente com o mínimo de chamadas de função do sistema.

(copiando o ambiente uma vez em suas aulas e trabalhando com ele diretamente).

 
George Merts:

Bem, se você torcer assim, então é claro que a DLL é uma característica útil...

Mas eu pessoalmente para esta mesma tarefa decidi que não preciso realmente de uma DLL para isso. Neste momento estou pensando em uma EA que pegaria citações de uma corretora e enviaria sinais para outra, e que não tem nem mesmo MetaTrader. (DucaCopi, a propósito, pergunto-me se a MetaQuotes concordará com este venerável corretor...).

Pensei em dll. Mas eu decidi que é mais seguro e mais sensato usar arquivos compartilhados. Deixe MetaTrader escrever sinais para o arquivo. E outro MetaTrader (ou JForex, ou outra pessoa) - deixe-os ler e executar.

Há uma opção com canais nomeados, mas há a necessidade de um servidor intermediário,

Há exemplos de como fazer isso no fórum.

 
Yury Kulikov:
Por exemplo, as comunicações interterminais.

Alexandr Bryzgalov:

Há uma opção com canais nomeados, mas você precisa de um servidor intermediário,

Há exemplos de como fazer isso no fórum.

Não é necessário nenhum canal nomeado! Estamos esperando que o suporte a SQL seja adicionado. Troca de dados através de uma tabela. SQL é um suporte integrado para sistemas com múltiplas roscas e alta carga.
 
Vasiliy Sokolov:

Não há necessidade de nenhum canal nomeado! Esperando para adicionar suporte SQL. Troca de dados através de uma tabela. SQL é um suporte integrado para sistemas de alta carga multi-tarefa.
Eu estava falando do que temos e se acrescentarmos sql podemos falar sobre isso também )
Razão: