Erros, bugs, perguntas - página 2313

 
Vladimir Karputov:

Tenho este problema no meu portátil, quando uma tarefa continua a contar com o agente (por exemplo, fiz asneira no código com a posição de abertura e o pobre agente envia e envia ordens de troca, mas ele recebe proibições em resposta, mas continua a bombardear, resultando em que todos os agentes acabaram os cálculos há muito tempo, mas este pobre tipo continua a martelar e a martelar).

Ou seja, em suma: o agente tem uma tarefa da última missão, e continua a lutar com ela.

Tive hoje o oposto, depois de os agentes terem estado fora de acção durante mais de 24 horas.

Penso que há uma falha na autorização e troca de dados, ou seja, se não for transmitida nenhuma EA/história durante muito tempo, o lado cliente volta a ligar-se e o agente continua à espera que os ficheiros cheguem.
 
fxsaber :

Quase três milhões de carraças e apenas 16K OrderSend. Mas estas ordens de comércio demoram um terço do tempo. E, em cada tick, há cálculos no Expert Advisor.

Daí a minha pergunta. Poderia executar o código de OrderSend no profiler? Em que lugar existe tal problema?

Presumo que se substituir a função padrão pela sua própria, ela funcionará mais rapidamente. Provavelmente, existem alguns controlos e gestos dispendiosos na OrderSend. Por exemplo, se não houver funções históricas e OnTrade* no Expert Advisor (+ indicadores), então a formação dos registos/eventos adequados é uma perda de tempo.

Compreendo que para algumas pessoas uma corrida dura muitos minutos. Mas há casos como os acima referidos - unidades de segundos, se prestar atenção à velocidade de execução. E aqui acontece que lanço Optimize durante três horas, e delas uma hora é OrderSend, cujo tempo médio de execução é de 69 µs (ver imagem do ecrã):

Hi,

Recebeu uma resposta útil de Metaquotes?

Tenho um cliente que quer usar o MT5 Strategy Tester para melhorar o desempenho. A estratégia da EA pode facilmente utilizar o modo "Apenas preços disponíveis". No entanto, o backtest, que leva 1,5 segundos com o MT4, é feito em 5 segundos com o MT5!

A estratégia utiliza uma paragem de reboque e parece utilizar OrderSend () durante 90% do tempo mais atrasado:


 
Alain Verleyen:

Hi,

Recebeu uma resposta útil de Metaquotes?

Tenho um cliente que quer utilizar o MT5 Strategy Tester para melhorar o desempenho. A estratégia da EA pode facilmente utilizar o modo "Apenas preços disponíveis". No entanto, o backtest, que leva 1,5 segundos com o MT4, é feito em 5 segundos com o MT5!

A estratégia usa uma paragem de reboque e parece usar OrderSend () durante 90% do tempo mais atrasado:

Todas as respostas foram dadas apenas neste tópico. Parece que algo foi feito.

MetaQuotes Software Corp.:
  1. Testador: testador de estratégia optimizado e acelerado.

Resolvi-o eu próprio através do Virtual.


ZZY Mostre o seu EA.

Библиотеки: Virtual
Библиотеки: Virtual
  • 2018.10.03
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: Virtual
 
fxsaber:

Parece que algo foi feito

1930

Core 1  pass 0 returned result 99753711.00 in 0:00:03.729
Core 1  pass 1 returned result 99753711.00 in 0:00:03.432
Core 1  pass 2 returned result 99753711.00 in 0:00:03.401
Core 1  pass 3 returned result 99753711.00 in 0:00:03.354
Core 1  pass 4 returned result 99753711.00 in 0:00:03.323
Core 1  pass 5 returned result 99753711.00 in 0:00:03.385
Core 1  pass 6 returned result 99753711.00 in 0:00:03.448
Core 1  pass 7 returned result 99753711.00 in 0:00:03.369
Core 1  pass 8 returned result 99753711.00 in 0:00:03.369
Core 1  pass 9 returned result 99753711.00 in 0:00:03.385
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 35 seconds
Statistics      shortest pass 0:00:03.323, longest pass 0:00:03.729, average pass 0:00:03.419


Virtual

Core 1  pass 0 returned result 99753711.00 in 0:00:02.231
Core 1  pass 1 returned result 99753711.00 in 0:00:01.217
Core 1  pass 2 returned result 99753711.00 in 0:00:01.217
Core 1  pass 3 returned result 99753711.00 in 0:00:01.185
Core 1  pass 4 returned result 99753711.00 in 0:00:01.170
Core 1  pass 5 returned result 99753711.00 in 0:00:01.201
Core 1  pass 6 returned result 99753711.00 in 0:00:01.186
Core 1  pass 7 returned result 99753711.00 in 0:00:01.201
Core 1  pass 8 returned result 99753711.00 in 0:00:01.185
Core 1  pass 9 returned result 99753711.00 in 0:00:01.202
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 13 seconds
Statistics      shortest pass 0:00:01.170, longest pass 0:00:02.231, average pass 0:00:01.299


Três vezes a diferença como era com 1881. Provavelmente, foi afinado noutro lugar. Mas o tópico OrderSend provavelmente não foi tocado.

 
fxsaber :

Todas as respostas só foram dadas neste tópico. Parece que algo foi feito.

Resolvi-o eu próprio através do Virtual.

Obrigado pela sua resposta.
 
Rapazes. Há novamente um erro no site.
Não posso responder a mensagens no mercado a partir do meu telefone. A lista não aparece.
Nas férias, não há computador.

Arquivos anexados:
 

A optimização gera pacotes de 128 empregos para cada Agente. É possível formar embalagens de tamanho diferente?

Esta é a situação

Todos os agentes, excepto um, completaram as suas tarefas. E temos de esperar que a optimização se complete por causa de um Agente. Mas foi possível conseguir a cessação quase simultânea do trabalho de todos os Agentes.

Consideremos, por exemplo, como na imagem do ecrã, 8 agentes e 5376 tarefas. 5376 / 8 = 672 tarefas. Assim, poderia formar fardos de tamanho 336 (=672/2), 168 (672/4) ou 84 (672/8) postos de trabalho em cada um. E então todos os Agentes chegariam à linha de chegada ao mesmo tempo.


O valor de 128, por outro lado, não leva em conta esta multiplicidade. Isto resulta em tempos de optimização mais longos se forem utilizados vários núcleos.

 

Queria pôr uma nota no KB e não funcionou. E a julgar pelo facto de as publicações recentes não terem qualquer classificação, parece que não sou o único com este problema.

E, ao mesmo tempo, quero admitir que o sistema de classificação(média aritmética simples ) faz com que se queira mais. Afinal, um código recentemente publicado com uma classificação de 5 estrelas será superior a um código que está na BE há vários anos e tem 49 classificações de 5 estrelas e uma classificação de 4 estrelas. Isto é justo?

Na minha opinião, pelo menos esta fórmula seria muito mais justa:

double R=Average*pow(N,0.1);

Onde:

R- a classificação que procura

Média aritmética da pontuação

N- número de classificações.

 
fxsaber:

A optimização gera pacotes de 128 empregos para cada Agente. É possível formar embalagens de tamanho diferente?

Esta é a situação

Todos os agentes, excepto um, completaram as suas tarefas. E temos de esperar que a optimização se complete por causa de um Agente. Mas foi possível conseguir a cessação quase simultânea do trabalho de todos os Agentes.

Consideremos, por exemplo, como na imagem do ecrã, 8 agentes e 5376 tarefas. 5376 / 8 = 672 tarefas. Assim, poderia formar fardos de tamanho 336 (=672/2), 168 (672/4) ou 84 (672/8) postos de trabalho em cada um. E então todos os Agentes chegariam à linha de chegada ao mesmo tempo.


O valor de 128, por outro lado, não leva em conta esta multiplicidade. Isto faz com que o tempo de optimização aumente se forem utilizados vários núcleos.

Em geral, apoio isto, mas penso que seria mais correcto permitir o cancelamento automático de postos de trabalho para os agentes (já implementado premindo o botão para desactivar a actividade dos agentes), se houvesse agentes livres e 5 vezes mais postos de trabalho e redistribuir novamente os postos de trabalho a todos os agentes, incluindo os remotos.

 

Boa tarde a todos! Desculpem a pergunta parva. Pessoal, poderiam por favor dizer-me como fazer com que um botão premido seja verdadeiro quando se clica com o botão esquerdo do rato e falso quando se clica com o botão esquerdo do rato. Agora a situação é tal, que nada acontece ao pressioná-lo, mas o Pressed muda o seu valor para o oposto ao libertá-lo.

Compreendo que preciso de anular o CButton::OnMouseUp e CButton::OnMouseDown manipuladores de eventos, mas não faço ideia de onde fazer isso. Uma dica, por favor. Obrigado de antemão!