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

 
Anton:

A travagem ObjectGetInterger é a norma?

 
fxsaber:

A travagem ObjectGetInterger é a norma?

Os métodos de obtenção já estão sincronizados, então eles esperam. O trabalho com objetos é feito através de uma fila de comando especial, não através de acesso direto aos objetos.

Para informação, é altamente recomendável não misturar os métodos Set e Get. É melhor pluralizar a escrita e depois pluralizar a leitura. Ou vice versa.

 
Renat Fatkhullin:

Os métodos de obtenção já estão sincronizados, portanto, eles estão esperando. Os objetos são tratados por uma fila de comando especial, não por acesso direto aos objetos.

Para informação, não é recomendado misturar os métodos Set e Get. É melhor escrever set e depois ler set. Ou vice versa.

Tenho problemas com isso, infelizmente. Mostrado pelo código acima.

Obrigado pelos esclarecimentos.

 
Tirei-o do caminho em certas situações.

uma conta real.

2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryDealsTotal() = 99663
2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryOrdersTotal() = 174307

2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

A biblioteca é ~2500 vezes mais rápida que a implementação normal. Somente uma abordagem alternativa permite fazer alguns cálculos em tempo razoável.

 

Para forçar o terminal a alocar memória, você pode executar este script

void OnStart()
  {
   short arr[];
   ArrayResize(arr,INT_MAX);
   ArrayInitialize(arr,0);
   Print(ArraySize(arr));
   Sleep(5000);
  }

Ajuste otamanho da matriz ao seu tamanho de RAM

 
Rorschach:

Para forçar o terminal a alocar memória, você pode executar este script

Ajuste otamanho da matriz ao seu tamanho de RAM

Qual é a idéia?

 
fxsaber:

Qual é a idéia?

Aparentemente, coloque o terminal em uma falta de memória e veja se os mecanismos internos para libertá-lo funcionarão.

 
traveller00:

Aparentemente, se você colocar o terminal em condições de falta de memória, os mecanismos internos de liberação de memória funcionarão.

Sim, o terminal fica sem memória e começa a reiniciar os dados em cache

 

Surgiu uma situação não-padrão. O Expert Advisor tira uma captura de tela com base no sinal indicador e, se os filtros passarem, dá um comando para abrir/fechar posições.
O nome da imagem da tela contém hora: dia, hora e segundo, por exemplo, CHFJPY_d29_h10_m24_s17. O tempo é tirado da função TimeCurrent().

Há 28 instâncias do Expert Advisor funcionando no terminal. Em algum momento, durante 44 minutos, o terminal pareceu congelar e às 10:27 começou a funcionar normalmente novamente. Aqui está a parte do próprio registro terminal:


Nenhuma interrupção de conexão pode ser vista. A primeira entrada para o EURUSD às 10:27 é o fechamento das 10:14 sl na história da transação.

Abaixo está uma parte do registro da EA. Como você pode ver nos quadros vermelhos superiores, o tempo de registro e TimeCurrent() que está no nome da captura de tela são quase os mesmos.
E nos quadros inferiores, a diferença é de meia hora.


No símbolo CHFJPY, a formação de uma captura de tela com o sinal de abertura ocorreu às 10:12, enquanto que a segunda com o sinal foi formada às 10:24. Mas a abertura/fecho e nova abertura aconteceu em um minuto, às 10:27.

De qualquer forma, tal estranheza aconteceu das 9:43 às 10:27 :
1) TimeCurrent() funciona e recebe o tempo real do servidor, o Expert Advisor recebe sinais corretos do indicador.
2) O registro só foi escrito às 10:27. As capturas de tela foram escritas no meu disco rígido na pasta Arquivos às 10:27, novas ordens (baseadas em sinais antigos) foram abertas às 10:27.

Talvez alguém tenha encontrado isto, qual poderia ser a razão de tais soluços ou lentidões? Por favor, informe qual função deve ser usada para detectar o motivo? Esta situação tem se repetido várias vezes desde abril.

 
Vasiliy Pushkaryov:

Você pode me dizer quais funções usar para apanhar a causa?

Monitorar a discrepância entre TimeLocal e TimeCurrent.