![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Cansado de depurar os instantâneos. Por fim, tornou-o perfeito. Um conselheiro, nada. Dois - perfeito. 20 - desastre: A CPU está abaixo de 100%. HistóriaAtrasos de seleção por muitos milissegundos.
Parece que o MT5 não se destina a operar muitos Expert Advisors ao mesmo tempo.
Você está escrevendo um teste de estresse ou um Expert Advisor habitual?
O mais provável é que seja exatamente um teste de estresse com múltiplas roscas em uma única base. Portanto, vou repetir:
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
MT5 e Velocidade em Ação
Renat Fatkhullin, 2020.09.16 12:47
Se eu entendi corretamente, não há um EA lá, mas um testador de estresse em cada símbolo. Isto muda completamente o caso. E mostra a ocultação das condições iniciais.
Ou seja, em 8(4+HT) CPU 16 fios (+N fios do terminal do trabalhador em paralelo), sem parar e sem atraso, quebrar em um objeto de banco de dados de símbolos sincronizados. Os cadeados de leitura/escrita são misturados porque há uma escrita constante de carrapatos.
Normalmente em tal perfil, dependendo da inclinação do processador e seu domínio dos fios, cada fio pode passar de 60% a 80% do tempo de espera.
E isto é independente do tipo de tarefa.
Se você está realmente tendo uma batalha sem parar por um recurso em 20 fios, há várias opções:
Leia a caixa cuidadosamente. Se os fios N atingirem um único objeto de sincronização, a espera vazia será de 60-80%.
E o limite de eficiência multi-tarefa será em torno de 8-12 roscas. Conforme o número de roscas aumenta, a taxa de amostragem cairá. Em 2600k, o limite de eficiência é ainda mais baixo.
Você está escrevendo um teste de estresse ou um trabalho de um especialista comum?
Ordinário
Ao invés disso, é um teste de estresse com múltiplas roscas em uma única base. Portanto, vou repetir:
Se de fato você estiver fazendo uma batalha sem parar por um único recurso em 20 fios, há várias opções:
Leia a caixa cuidadosamente. Se os fios N atingirem um único objeto de sincronização, a espera vazia será de 60-80%.
E o limite de eficiência multi-tarefa será em torno de 8-12 roscas. Conforme o número de roscas aumenta, a taxa de amostragem cairá. Em 2600k, o limite de eficiência é ainda mais baixo.
Histórico de cache completo. Mas mesmo isto requer chamar HistorySelect(0, INT_MAX).
Como experiência, cortei todas as chamadas à história necessárias para a lógica comercial. A carga sobre a CPU diminuiu muito.
Geralmente, se existem 20 robôs, então chamá-los em toda a história significa que você pode causar um desastre com apenas um terminal. Sobre vários Terminais dos quais não podemos sequer falar.
E parece que o objeto sincrônico não é apenas história. SymbolInfoTick, CopyTicks e algo mais, ao que parece.
De qualquer forma, não consigo nem mesmo ter cinco Terminais funcionando com uma dúzia de robôs em cada um.
Olhar para o perfil de frenagem é um aborrecimento.
Ordinário
Caching completo da história. Mas mesmo isto requer chamar HistorySelect(0, INT_MAX).
Como experiência, eu cortei todas as chamadas históricas necessárias para a lógica comercial. A carga sobre a CPU diminuiu muito.
Geralmente, se existem 20 robôs, então chamá-los em toda a história significa que você pode causar um desastre com apenas um terminal. Sobre vários Terminais dos quais não podemos sequer falar.
E parece que o objeto sincrônico não é apenas história. SymbolInfoTick, CopyTicks e algo mais, ao que parece.
De qualquer forma, não consigo nem mesmo ter cinco Terminais funcionando com uma dúzia de robôs em cada um.
Olhar para o perfil de frenagem é um aborrecimento.
Nenhuma evidência, nem dados numéricos.
1) Quantas vezes por segundo cada EA faz consultas de HistorySelect?
2) Exatamente quais funções estão desacelerando?
3) Logs?
4) Qual é o princípio dos robôs?
No total, se existem 20 robôs, então, abordar a história neles é causar um desastre com apenas um Terminal. Os Terminais Múltiplos estão fora de questão.
Talvez pelo contrário - cada terminal suportará seu próprio objeto sincrônico, e não haverá uma fila de 20 EAs para ele?
Tente executar 1 robô em 1 terminal, será interessante ver o resultado.
Talvez pelo contrário - cada terminal suportará seu próprio objeto de sincronização e não haverá uma fila de 20 EAs para ele?
Tente executar 1 robô em 1 terminal, é interessante ver o resultado.
Infelizmente, o resultado desta experiência não responderá à pergunta: o que fazer?
Infelizmente, o resultado desta experiência não responderá à pergunta: o que fazer?
Reconsiderar o conceito do robô comercial
Adicionado
Eu tenho 3 terminais em demonstração real + 1 em que trabalho
Cada terminal tem 42 robôs que utilizam OnBoorEvent de 3 a 4 caracteres,
Além disso, a cada 0,5 segundos o temporizador aciona + cada robô acessa as Variáveis Globais do terminal,
e usa 8,34 GB de 32 GB de RAM e 6,7% de CPU
E nada abranda, exceto o servidor TM5 no início das sessões de negociação.
Não há provas, nem dados numéricos.
1) Quantas vezes por segundo cada especialista faz consultas de HistorySelect?
2) Quais são exatamente as funções que estão desacelerando?
3) Logs?
4) Qual é o princípio por trás dos robôs?
É muito difícil para mim responder a estas perguntas, porque nem eu mesmo consigo lidar com o que está diminuindo a velocidade. O perfilador nem sequer funciona. Suas medidas são batota, pois o atraso já vem da CPU. A redução do acesso às funções ambientais através de instantâneos e caching, infelizmente, não deu o efeito esperado. Estou esperando um profiler, que será capaz de compilar o Expert Advisor.
Enquanto eu estava ocupado, encontrei tal confusão no Strategy Tester com o histórico do comércio.
O resultado é
Eu mal tenho notado este erro e estou tentando escrever uma repetição há mais de uma hora. O código é idiota, mas mostra o problema. Não sei se há algo semelhante não no Testador, mas no Terminal.
Cadeia de busca: Oshibka 013.
ZS b2626 - fixo.
Reconsiderar o conceito do robô comercial
Apenas um robô que comercializa todos os símbolos?
Apenas um robô que comercializa todos os símbolos?
Robôs diferentes, mas todos construídos aproximadamente sobre o mesmo padrão.
Há 42 empregos envolvidos em um terminal de cada vez, e em três, 126 são cerca de 400 símbolos
Adicionado
Para repetir (eu)
Cada robô usa OnBoorEvent de 3 a 4 caracteres,
mais a cada 0,5 segundos um timer é acionado + cada robô acessa asVariáveis Globais do terminal,
8,34 GB de 32 GB de RAM é usado e 6,7% de CPU é usado
E nada fica mais lento, exceto o servidor TM5 (ou o hardware Openreach) no início das sessões de negociação.
Robôs diferentes, mas todos construídos aproximadamente de acordo com o mesmo esquema.
Há 42 empregos envolvidos em um terminal de cada vez, e em três - 126 é de cerca de 400 caracteres
Adicionado
Para repetir (eu).
Cada robô usa OnBoorEvent de 3 a 4 caracteres,
mais a cada 0,5 segundos um timer é acionado + cada robô acessa asVariáveis Globais do terminal,
8,34 GB de 32 GB de RAM é usado e 6,7% de CPU é usado
E nada está desacelerando, exceto o servidor TM5 (ou Open's iron) no início das sessões de negociação.
Aqui está o estranho, para mim é o oposto.
Meu dispositivo tem 4 terminais, reduzi o número de Expert Advisors para cerca de 200, cortei todos os OnBooks, mudei de volta para o OnTick e atualizei meu hardware, mas os problemas são os mesmos que com o fxsaber.
Mas já há muito tempo que não há atrasos pela manhã em meu Abridor. E o que eles costumavam ser! Até 75 segundos às vezes :)