Leia primeiro sobre alocação de memória no computador, depois como e por que meios é feita, depois como limpar e ler de e para não é difícil. Pelo menos sugestões mais razoáveis para os desenvolvedores são possíveis
Você não saberia disso no mt4 ? Você mesmo usa o Ask Bid pré-definido ? Em mt5 para toda aestrutura MqlTick eles estão faltando por alguma razão. Chame a função, preencha a estrutura e só então obtenha o valor. Ou imediatamente obter o valor, há alguma diferença?
Ou não está na minha direção? Você deve ao menos indicar para quem você está escrevendo ))
Os desenvolvedores já explicaram anteriormente que existe uma limitação fundamental ao acesso direto
e em geral t1 não é igual a t2. Além disso, os valores de campo dentro de t1 e t2 podem se referir a diferentes carrapatos, embora sejam campos ligados (eles devem se referir ao mesmo carrapato).
Brr, qual é a limitação fundamental? A estrutura em seu exemplo é desnecessária, não precisa ser preenchida.
Um valor veio do soquete e foi escrito na variável _Ask, _Bid, etc., de acordo com a estrutura. _Ask != _Ask na sua opinião? Uma restrição ocorre se você preencher a estrutura, o que leva algum tempo. Você não precisa preenchê-lo, mas dê_Ask, _Bid, etc. diretamente.
Você também pode reescrevê-lo sem a estrutura. No caso geral, perguntar1 não é igual a perguntar2
Isto é, são solicitações ao ambiente não-síncrono, e a resposta é recebida pelo estado atual do ambiente? E OnTick está pegando o tique atual e trabalhando na EA, mas ao mesmo tempo os pedidos pela estrutura do tique quando a EA está trabalhando podem obter respostas a partir dos próximos tiquetaques?
Você também pode reescrevê-lo sem a estrutura. Em geral, pedir1 não é igual a pedir2
Assim você não precisa usar 100500 dígitos, onde o último dígito de um número real difere 0,0000000000000000000001 Para cada variável um dígito diferente, para o preço dobrar no máximo 8.
acesso ao SymbolInfoTick com uma velocidade dramática.
22% bom.
SymbolInfoTick - na minha máquina de casa, notei de perto que não alertava. No entanto, fez um filtro desses alertas no Diário de Bordo e viu que havia muito mais do que os 2650 emitidos durante o mesmo período vinte e quatro horas atrás.
Isto é, são solicitações a um ambiente não-síncrono, e a resposta é baseada no estado atual do ambiente? E OnTick está pegando o tick atual e trabalhando na EA, mas as solicitações pela estrutura do tick quando a EA está trabalhando pode obter respostas a partir dos próximos tick?
4gb (preço de 20 euros) está longe de ser bom em 2020 quando se trata de análise e pesquisa.
Estamos falando de uma chamada única para CopyTicks. É feito para fazer um backtest virtual destes carrapatos no OnInit, e depois para continuar em tempo real, alimentando apenas carrapatos frescos.
Como um compromisso, proponho liberar a memória no Terminal imediatamente após os CopyTicks terem sido chamados no OnInit. Então não temos que introduzir uma função de resfriamento forçado para o CopyTicks.
Neste momento, a versão de esfriamento do sono é muito mudo. Mas eu mostrei acima como esta muleta salva a memória.
Agora acontece que 20 Expert Advisors correm rápido mesmo em VPS lentos. Mas iniciá-los é um problema sério.
Aqui está um Expert Advisor que mostra o problema.
// Демонстрация 10-ти секундного удержания в памяти ненужных данных CopyTicks.#define PRINT(A) Print(#A + " = " + (string)(A))
inputdatetime inFrom = D'2020.06.01'; // С какой даты анализировать историюintOnInit()
{
MqlTick Ticks[];
Print("Before CopyTicks:");
PRINT(MQLInfoInteger(MQL_MEMORY_USED));
PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (long)inFrom * 1000));
ArrayFree(Ticks);
Print("After CopyTicks:");
for (int i = 0; i < 10; i++)
{
PRINT(i);
PRINT(MQLInfoInteger(MQL_MEMORY_USED));
PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
Sleep(1000);
}
return(INIT_FAILED);
}
Resultado.
2020.10.1408:49:24.016 Before CopyTicks:
2020.10.1408:49:24.016MQLInfoInteger(MQL_MEMORY_USED) = 02020.10.1408:49:24.031TerminalInfoInteger(TERMINAL_MEMORY_USED) = 8642020.10.1408:49:25.399CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 143721192020.10.1408:49:25.465 After CopyTicks:
2020.10.1408:49:25.465 i = 02020.10.1408:49:25.465MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:25.499TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:26.594 i = 12020.10.1408:49:26.594MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:26.630TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:27.729 i = 22020.10.1408:49:27.729MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:27.762TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:28.852 i = 32020.10.1408:49:28.852MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:28.884TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:29.977 i = 42020.10.1408:49:29.977MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:30.009TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:31.102 i = 52020.10.1408:49:31.102MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:31.136TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:32.224 i = 62020.10.1408:49:32.225MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:32.257TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:33.348 i = 72020.10.1408:49:33.348MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:33.381TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:34.468 i = 82020.10.1408:49:34.468MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:34.501TerminalInfoInteger(TERMINAL_MEMORY_USED) = 17962020.10.1408:49:35.593 i = 92020.10.1408:49:35.593MQLInfoInteger(MQL_MEMORY_USED) = 12020.10.1408:49:35.605TerminalInfoInteger(TERMINAL_MEMORY_USED) = 860
SymbolInfoTick - na máquina doméstica notei a olho nu que não havia alertas. No entanto, fez um filtro desses alertas no Diário de Bordo e viu que havia muito mais do que os 2650 emitidos durante o mesmo período vinte e quatro horas atrás.
Enviou ambos os logs para o PM.
Aceleração por um fator de dez em casos de acesso paralelo em massa.
Para outros casos somente atualização de processador, memória e sistema operacional.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Cavalheiros do programa...
Você não saberia disso no mt4 ?
Você mesmo usa o Ask Bid pré-definido ?
Em mt5 para toda aestrutura MqlTick eles estão faltando por alguma razão.
Chame a função, preencha a estrutura e só então obtenha o valor.
Ou imediatamente obter o valor, há alguma diferença?
Ou não está na minha direção?
Você deve ao menos indicar para quem você está escrevendo ))
Variáveis pré-definidas, para o tick atual, provavelmente seriam melhores.
Os desenvolvedores já explicaram anteriormente que existe uma limitação fundamental ao acesso direto
e em geral, t1 não é igual a t2. Além disso, os valores de campo dentro de ambos t1 e t2 podem acabar se referindo a diferentes carrapatos
Os desenvolvedores já explicaram anteriormente que existe uma limitação fundamental ao acesso direto
e em geral t1 não é igual a t2. Além disso, os valores de campo dentro de t1 e t2 podem se referir a diferentes carrapatos, embora sejam campos ligados (eles devem se referir ao mesmo carrapato).
Brr, qual é a limitação fundamental?
A estrutura em seu exemplo é desnecessária, não precisa ser preenchida.
Um valor veio do soquete e foi escrito na variável _Ask, _Bid, etc., de acordo com a estrutura.
_Ask != _Ask na sua opinião?
Uma restrição ocorre se você preencher a estrutura, o que leva algum tempo.
Você não precisa preenchê-lo, mas dê_Ask, _Bid, etc. diretamente.
Brr, qual é a principal limitação?
A estrutura em seu exemplo é desnecessária aqui, não precisa ser preenchida.
Você pode reescrevê-lo sem estrutura. No caso geral, perguntar1 não é igual a perguntar2
Você também pode reescrevê-lo sem a estrutura. No caso geral, perguntar1 não é igual a perguntar2
Isto é, são solicitações ao ambiente não-síncrono, e a resposta é recebida pelo estado atual do ambiente? E OnTick está pegando o tique atual e trabalhando na EA, mas ao mesmo tempo os pedidos pela estrutura do tique quando a EA está trabalhando podem obter respostas a partir dos próximos tiquetaques?
Você também pode reescrevê-lo sem a estrutura. Em geral, pedir1 não é igual a pedir2
Assim você não precisa usar 100500 dígitos, onde o último dígito de um número real difere 0,0000000000000000000001
Para cada variável um dígito diferente, para o preço dobrar no máximo 8.
Lançado o beta 2652, de importância:
22% bom.
SymbolInfoTick - na minha máquina de casa, notei de perto que não alertava. No entanto, fez um filtro desses alertas no Diário de Bordo e viu que havia muito mais do que os 2650 emitidos durante o mesmo período vinte e quatro horas atrás.
Enviou ambos os logs para o PM.
Isto é, são solicitações a um ambiente não-síncrono, e a resposta é baseada no estado atual do ambiente? E OnTick está pegando o tick atual e trabalhando na EA, mas as solicitações pela estrutura do tick quando a EA está trabalhando pode obter respostas a partir dos próximos tick?
Sim.
Para trabalho em massa, coloque mais memória.
4gb (preço de 20 euros) está longe de ser bom em 2020 quando se trata de análise e pesquisa.
Estamos falando de uma chamada única para CopyTicks. É feito para fazer um backtest virtual destes carrapatos no OnInit, e depois para continuar em tempo real, alimentando apenas carrapatos frescos.
Como um compromisso, proponho liberar a memória no Terminal imediatamente após os CopyTicks terem sido chamados no OnInit. Então não temos que introduzir uma função de resfriamento forçado para o CopyTicks.
Neste momento, a versão de esfriamento do sono é muito mudo. Mas eu mostrei acima como esta muleta salva a memória.
Agora acontece que 20 Expert Advisors correm rápido mesmo em VPS lentos. Mas iniciá-los é um problema sério.
Aqui está um Expert Advisor que mostra o problema.
Resultado.
22% - multa.
SymbolInfoTick - na máquina doméstica notei a olho nu que não havia alertas. No entanto, fez um filtro desses alertas no Diário de Bordo e viu que havia muito mais do que os 2650 emitidos durante o mesmo período vinte e quatro horas atrás.
Enviou ambos os logs para o PM.
Aceleração por um fator de dez em casos de acesso paralelo em massa.
Para outros casos somente atualização de processador, memória e sistema operacional.