Discussão do artigo "Distribuições estatísticas no MQL5 - tirando o melhor de R" - página 5

 
Renat Fatkhullin:
  1. Presença de bibliotecas MQL5 no código-fonte, o que permite que você incorpore nativamente o código delas diretamente no local de chamada e maximize o uso do ambiente const do local chamado.

Muitas funções padrão também serão incluídas em bibliotecas para inlining?

 
Renat Fatkhullin:

Isso não é sério.

Em wyne, e até mesmo em 32 bits. Um compilador antigo semelhante ao MT4 é usado para 32 bits do MT5. Ele é algumas dezenas de vezes mais lento do que o código de 64 bits, que é criado por um novo compilador especialmente para a versão de 64 bits do MT5. Publicamos um relatório comparando a velocidade dos programas MQL5 de 32 e 64 bits.

Na verdade, cada programa MQL5 contém duas cópias do código compilado: 32 bits para sistemas antigos, para fins de compatibilidade, e 64 bits para os novos.

Abandonamos completamente o desenvolvimento de compiladores de 32 bits, pois não faz sentido e não tem futuro.

É por isso que você deve usar apenas versões de 64 bits do MetaTrader 5 se quiser obter o máximo desempenho.


A propósito, uma informação para aqueles que usam o MT4 - lá também a velocidade de execução do código MQL4 é algumas dezenas de vezes mais lenta do que no MetaTrader 5 de 64 bits.

Inesperadamente... Para mim, esse é um motivo realmente sério para finalmente reconsiderar meus hábitos e mudar para o MT5. Anteriormente, eu não via muito sentido nisso....
 
fxsaber:

Muitas funções padrão também serão colocadas em bibliotecas para serem incorporadas?

Exatamente.

Nas próximas duas compilações, chegaremos a esse ponto. Adicionaremos fontes de funções aos programas durante a compilação, o que permitirá que o otimizador trabalhe com todo o seu potencial.

É fundamental minimizarmos o número de chamadas para o kernel da plataforma.

 
Реter Konow:
Inesperadamente... Para mim, esse é realmente um motivo sério para finalmente reconsiderar meus hábitos e mudar para o MT5. Anteriormente, eu não via muito sentido nisso....

Se você se aprofundar na latência dos processos internos do MT4 e do MT5, incluindo a negociação, você fugirá do MT4. Há um abismo na qualidade e na organização dos processos.

Somos tão fanáticos pelo desempenho e otimização do MT5 por um motivo. É uma enorme vantagem tecnológica.

 
Renat Fatkhullin:

R considerou o tempo mínimo de várias partidas, não a primeira partida e o tempo máximo.

Portanto, não, a "inicialização a frio" não explica o fato aqui. E mesmo em condições em que todo o código da biblioteca está em DLL. Não há praticamente nada para aquecer.

Mas o que de fato explica o fato:

  1. Ausência de sobrecarga em objetos dinâmicos, como no R, devido ao trabalho com dados duplos puramente tipados
  2. Um compilador terrivelmente eficiente em MQL5. É realmente assustador olhar para o código asm resultante.
  3. Presença de bibliotecas MQL5 no código-fonte, o que lhe permite incorporar nativamente o código delas diretamente no local da chamada e usar ao máximo o ambiente const do local chamado.

    É aqui que o compilador tem muito espaço em comparação com as implementações realmente não otimizadas em DLLs, que não têm chance de aprender o ambiente e se ajustar a ele.

O que está sendo medido aqui? Isso me lembra os holivares C++ vs Lisp - é apenas um para um, exceto que um dos "comparadores" é quase ++ e o outro é Schema :-)) São apenas coisas fundamentalmente diferentes....
 
Renat Fatkhullin:

Se você se aprofundar na latência dos processos internos do MT4 e do MT5, incluindo a negociação, você fugirá do MT4. Há um abismo na qualidade e na organização dos processos.

Somos tão fanáticos pelo desempenho e otimização do MT5 por um motivo. É uma enorme vantagem tecnológica.

Agora eu saberei. É claro que a portabilidade de todo o código não será fácil, mesmo com compatibilidade suficiente de idiomas, mas acredito que o resultado valerá a pena. Sempre busco maior eficiência e a questão da diferença de desempenho e velocidade sempre foi de grande interesse para mim. Se eu soubesse dessa diferença antes, já teria esquecido a plataforma menos rápida há muito tempo. Obrigado pelas informações.
 
Maxim Kuznetsov:
O que está sendo medido aqui? Isso me lembra os holivares C++ vs. Lisp - exatamente o mesmo, exceto que um "compara" quase ++ e o outro é um esquema superdesenvolvido :-) São apenas coisas fundamentalmente diferentes.....

Essa é apenas uma prova pura, na prática e na teoria, da falácia da posição expressa por alguns operadores no tópico https://www.mql5.com/ru/forum/96176/page10 (houve uma menção em algum lugar):

  • no R, todas as bibliotecas são otimizadas e tão rápidas quanto possível
  • há muitas otimizações no R, incluindo Intel Threading Building Blocks, etc.


Descobriu-se que isso não é verdade. Na função mais simples, isso acabou se revelando um dreno e a MQL5 é mais eficiente. Além disso, fundamentei teoricamente por que ela é mais rápida. Além dos resultados práticos.

Используете ли вы CExpert при создании роботов?
Используете ли вы CExpert при создании роботов?
  • www.mql5.com
Да Нет, пишу класс робота с нуля Нет, у меня есть свой базовый класс робота Нет, я не использую ООП Хочу посмотреть результат...
 
Renat Fatkhullin:

Se você se aprofundar na latência dos processos internos do MT4 e do MT5, incluindo a negociação, você fugirá do MT4. Há um abismo na qualidade e na organização dos processos.

A negociação é, de certa forma, esquecida

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Erros, bugs, perguntas

fxsaber, 2016.10.09 09:39 pm

O MT5-OrderSend NÃO está totalmente sincronizado - não há sincronização com o ambiente de negociação. Isso significa que as leituras do histórico não correspondem ao estado real das coisas.

Qualquer tempo limite está fora de questão. Não há solução confiável para o problema, porque as questões de sincronização devem ser tratadas no nível do terminal, não no nível do servidor.

Na verdade, os usuários do MT5 enfrentaram o que os desenvolvedores da ponte MT4 enfrentaram.

Se um OrderSend for enviado, é preciso LEMBRAR (aqui está uma vulnerabilidade em potencial) que ele foi feito. Em seguida, ignorar o histórico atual (ambiente de negociação) até que a mensagem correspondente chegue ao OnTrade. Quando ela chegar, o NADA precisa ser ESQUECIDO.

Quando não há dados FORGOTTEN, você pode confiar no histórico, assim como no MT4.

O MT4-OrderSend é TOTALMENTE sincronizado.

Sim e com o resto, muito mais simples, como se vê, problemas

 
fxsaber:

De alguma forma, a negociação é esquecida

Você está confundindo processos assíncronos com o desejo de ver a sincronização.

A tarefa do OrderSend é fazer uma solicitação e receber a confirmação o mais rápido possível. E o sistema lida com isso perfeitamente.

Mas para obter uma transação/negócio concluído, colocá-lo no histórico e, em seguida, fornecê-lo a você mediante solicitação - esse é outro processo e não tem o direito de retardar o trabalho do OrderSend.

É por isso que tudo está certo: você executa a transação rapidamente e, em um milissegundo (na verdade, antes), no pacote vizinho, recebe uma atualização do tíquete e trabalha com ela.


E com o restante, muito mais simples, como se viu, também há problemas

Escrever um compilador e, principalmente, implementar modelos maléficos de C++ são coisas simples????

De qualquer forma, muito obrigado pela paciência do A100 - ele foi muito útil na detecção de bugs.


Mas isso é offtopic, se você quiser discutir essas questões, faça-o em tópicos nativos. Aqui sobre o R.
 
Os comentários não relacionados a este tópico foram movidos para "How to properly work in MT5 with OrderSend".