MT5 e velocidade em ação - página 25

 
A100:
Naturalmente, nenhum especialista/indicador/escrito está em execução - apenas construções manuais. A latência indicada é reprodutível em qualquer comprimido moderno médio de 64 bits. Se você tem um computador i7, não creio que tenha encontrado este atraso.

o apk ou o ex-sistema está desacelerando?

 
Hoje é o dia de folga. Apenas um símbolo em Market Watch. A EA está executando o OnTimer uma vez por segundo. Encontrei este registro.
2020.09.06 00:37:09.187         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.09.06 03:57:17.902         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1731 ms.
2020.09.06 03:57:18.463         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2292 ms.
2020.09.06 03:59:49.233         Alert: Time[MT4Orders.mqh 1788: ::PositionGetTicket(Index)] = 2 ms.
2020.09.06 04:35:54.170         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 04:55:34.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 211 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 895 ms.
2020.09.06 05:23:20.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:24:41.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:47:41.492         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:50:41.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:55:45.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:57:32.169         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:17:11.177         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:28:03.184         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:30:22.482         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:48:07.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 07:45:12.490         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:23:24.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:24:26.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:37:57.183         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:08:37.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:12:58.497         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:57:20.486         Alert: Ping = 10000.000
2020.09.06 09:57:21.680         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 195 ms.
2020.09.06 09:57:54.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 10:47:56.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:06:21.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:11:50.208         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1023 ms.
2020.09.06 11:11:50.537         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1049 ms.
2020.09.06 11:11:51.502         Alert: Ping = 10000.000
2020.09.06 11:11:52.370         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 187 ms.
2020.09.06 11:19:41.502         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:38:00.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 13:49:02.493         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:03:28.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:45:05.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 16:43:51.196         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:00:17.494         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:40:02.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:54:00.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 18:16:47.173         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.

No outro Terminal, a Otimização está sendo executada em paralelo em seis Agentes locais de um possível oito.

Se são quebras de rede, por que isso afeta a obtenção do último tick da Market Watch e a obtenção do último tick da história do tick?


ZZY O Diário de bordo do Terminal está no mesmo trecho.

2020.09.06 01:48:38.338 Network '': scanning network for access points
2020.09.06 01:48:40.195 Network '': scanning network finished
2020.09.06 03:57:04.504 Network '': connection to RannForex-Server lost
2020.09.06 03:57:15.249 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.41 ms, build 2560)
2020.09.06 03:57:15.249 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.05 21:59:42
2020.09.06 03:57:15.678 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 03:57:15.678 Network '': trading has been enabled - hedging mode
2020.09.06 03:57:17.500 Network '': scanning network for access points
2020.09.06 03:57:20.416 Network '': scanning network finished
2020.09.06 05:10:52.296 Network '': connection to RannForex-Server lost
2020.09.06 05:10:53.033 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.31 ms, build 2560)
2020.09.06 05:10:53.033 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 05:10:59
2020.09.06 05:10:53.299 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 05:10:53.299 Network '': trading has been enabled - hedging mode
2020.09.06 09:57:18.310 Network '': scanning network for access points
2020.09.06 09:57:20.396 Network '': scanning network finished
2020.09.06 09:57:20.396 Network '': auto connecting to a better access point with 93 % quality (previous: 77 %)
2020.09.06 09:57:20.397 Network '': connection to RannForex-Server lost
2020.09.06 09:57:21.151 Network '': authorized on RannForex-Server through as.eu 5 (ping: 41.60 ms, build 2560)
2020.09.06 09:57:21.151 Network '': previous successful authorization performed from 
xx.xx.xx.xx  on 2020.09.06 05:10:59
2020.09.06 09:57:21.208 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 09:57:21.208 Network '': trading has been enabled - hedging mode
2020.09.06 11:08:16.952 Network '': connection to RannForex-Server lost
2020.09.06 11:11:48.892 Network '': authorized on RannForex-Server
2020.09.06 11:11:48.892 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:48.970 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:48.970 Network '': trading has been enabled - hedging mode
2020.09.06 11:11:49.152 Network '': scanning network for access points
2020.09.06 11:11:51.319 Network '': scanning network finished
2020.09.06 11:11:51.319 Network '': auto connecting to a better access point with 92 % quality (previous: 91 %)
2020.09.06 11:11:51.320 Network '': connection to RannForex-Server lost
2020.09.06 11:11:52.035 Network '': authorized on RannForex-Server through as.eu 5 (ping: 43.31 ms, build 2560)
2020.09.06 11:11:52.035 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:52.088 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:52.088 Network '': trading has been enabled - hedging mode
2020.09.06 17:11:49.928 Network '': scanning network for access points
2020.09.06 17:11:52.112 Network '': scanning network finished
 
fxsaber:

Se são quebras de rede, por que isso afeta a obtenção do último tick da Market Watch e a obtenção do último tick da história do tick?

Uma análise cuidadosa mostrou que o CopyTicks está diminuindo a velocidade quando há quebras de rede.

2020.09.06 21:22:24.105         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1619 ms.
2020.09.06 21:22:24.515         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2347 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 274 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 686 ms.

2020.09.06 21:20:59.301 Network connection to RannForex-Server lost
2020.09.06 21:22:21.043 Network authorized on RannForex-Server
2020.09.06 21:22:21.043 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:59
2020.09.06 21:22:21.508 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:21.508 Network trading has been enabled - hedging mode
2020.09.06 21:22:21.915 Network scanning network for access points
2020.09.06 21:22:28.819 Network scanning network finished
2020.09.06 21:22:45.523 Network connection to RannForex-Server lost
2020.09.06 21:22:52.951 Network authorized on RannForex-Server through as.eu 6 (ping: 56.55 ms, build 2560)
2020.09.06 21:22:52.951 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 21:22:28
2020.09.06 21:22:53.024 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:53.024 Network trading has been enabled - hedging mode
 
fxsaber:


if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Antes de mais nada, FYI.

"Se averificação da estrutura básica (verificação de ponteiro) for bem sucedida, a verdade é devolvida -não indica a execução bem sucedida da operação comercial. Para obter uma descrição mais detalhada do resultado da execução da função, os campos da estrutura deresultadosdevem ser analisados."


Em segundo lugar, de acordo com sua lógica, se uma ordem é aberta, você não a adiciona à lista de ordens, mas invalida completamente o cache)?

Você pode TALVEZAR todo o código, que você tem HistorySelect será o último lugar para perguntas sobre o tempo de execução) Use caching. Você pode invalidá-la, por exemplo, uma vez por dia, mas isso irá acelerar significativamente sua EA.

 
Andrey Pogoreltsev:

Bem, antes de mais nada

Você tem que executar o código para entendê-lo corretamente, ou lê-lo muito bem a partir de uma folha de trabalho.

Em segundo lugar, de acordo com sua lógica, se uma ordem é aberta, você não a adiciona à lista de ordens, mas invalida totalmente o cache)?

A lista de pedidos não muda. Leia o código.

 
fxsaber:

para entender o código corretamente, é preciso executá-lo ou lê-lo muito bem a partir da folha.

A lista de pedidos não muda. Leia o código.

Aqui

if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Eu vejo esta lógica:

  1. Se uma solicitação comercial for enviada com sucesso para o servidor
  2. Selecionamos toda a história

Mas pode ser que o pedido já tenha sido rejeitado no servidor - não há nenhuma verificação para isso neste código. Qual é o objetivo de selecionar a história? O que queremos ver lá?

Aqui, nestas duas linhas de código, eu pessoalmente não vejo o ponto. Eu o veria se houvesse um cheque para mudar a história antes de selecioná-la. Talvez, é claro, estas duas linhas não lhe dêem uma visão completa da tarefa. Mas a conexão entre o envio de um pedido ao servidor e a seleção de todo o histórico não está clara para mim. Mesmo se o servidor enviar uma solicitação com sucesso, a lista de ordens e posições do mercado será alterada. O que a lista histórica tem a ver com isso?

 
Artyom Trishkin:

Aqui é onde

Eu vejo esta lógica:

  1. Se a solicitação comercial for enviada com sucesso para o servidor
  2. Selecione a história completa

Mas pode ser que o pedido já tenha sido rejeitado no servidor - não há nenhuma verificação para isso neste código. Qual é o objetivo de selecionar a história? O que queremos ver lá?

Aqui, nestas duas linhas de código, eu pessoalmente não vejo o ponto. Eu o veria se houvesse um cheque para mudar a história antes de selecioná-la. Talvez, é claro, estas duas linhas não lhe dêem uma visão completa da tarefa. Mas a conexão entre o envio de um pedido ao servidor e a seleção de todo o histórico não está clara para mim. Mesmo se o servidor enviar uma solicitação com sucesso, a lista de ordens e posições do mercado será alterada. O que isso tem a ver com a lista histórica?

Se - para se livrar do aviso do compilador. Não tem mais nada a fazer.

Este tópico não é para ensinar-lhe como escrever EAs. O objetivo é eliminar os pontos fracos do Terminal. Os desenvolvedores precisam de um código simples, conciso e reprodutível para entendê-lo. Não escrevo nada desse tipo para mim, é claro. O fato é que o Combat Advisor registra os freios. Eu começo a cavar e percebo que a desaceleração ocorre quando alguém (pelo menos à mão) modifica uma posição. Isto restabelece o cache da história, embora a história não mude, é claro.


O código demonstra o problema perfeitamente. Nunca há necessidade de desorganizar o código de replay com qualquer verificação desnecessária. Seu trabalho é mostrar claramente o problema. E quando fixado - para provar que tudo funciona corretamente agora.

 
fxsaber:

para entender o código corretamente, é preciso executá-lo ou lê-lo muito bem a partir da folha.

A lista de pedidos não muda. Leia o código.

Considere que sou muito bom a ler a partir da folha :)


Este código que você tirou de outro lugar e você tem lá uma nova criação de posição, que é executada, certo?

Caso contrário, todo o objetivo de seu código se resume a atualizar o TP da posição atual e invalidar o cache por causa disso, o que também é muito estranho.

Em um desses dois casos, nenhuma lógica é utilizada para otimizar a operação de cache. Além disso, sua solução não é escalável, pois leva a uma maior frenagem à medida que a história cresce.

 
fxsaber:

O código demonstra perfeitamente o problema. Nunca há necessidade de desorganizar o código de repetição com quaisquer verificações desnecessárias. Seu trabalho é mostrar claramente o problema. E quando corrigido - para provar que tudo funciona corretamente agora.

Portanto, por sua lógica, este código aqui

int v = 0.0;

for (int i = 0; i < 1000000; i++) {
    v = i;
}

std::cout << "The last number: " << v << std::endl;

demonstra a lentidão do processador?

 
Andrey Pogoreltsev:

Você recebeu este código de algum lugar e o tem lá criando uma nova posição, que é executada, certo?

Pergunta retórica: o que você está tentando alcançar aqui?
Andrey Pogoreltsev:

Portanto, de acordo com sua lógica, este código aqui

mostra a lentidão do processador?

Eu não respondo mais, pois você está falando bobagens.
Razão: