Executando seu EA on Idle-CPU, RannForex-Server, 6 gráficos com símbolos diferentes. Quando voltei ao meu computador, vi muitos destes.
2020.10.3013:50:21.852 Test9 (GBPUSD,H1) SymbolInfoTick max bad time: 2.008 ms; avr bad time: 2.008 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:22.142 Test9 (EURUSD,H1) GetBid max bad time: 1.125 ms; avr bad time: 1.125 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:23.072 Test9 (USDCHF,H1) SymbolInfoTick max bad time: 2.245 ms; avr bad time: 2.245 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:23.288 Test9 (USDCAD,H1) GetBid max bad time: 1.298 ms; avr bad time: 1.182 ms; bad iterations: 2 total iterations: 100000002020.10.3013:50:23.297 Test9 (AUDCAD,H1) GetBid max bad time: 0.977 ms; avr bad time: 0 ms; bad iterations: 0 total iterations: 100000002020.10.3013:50:24.393 Test9 (EURUSD,H1) SymbolInfoTick max bad time: 3.400 ms; avr bad time: 2.862 ms; bad iterations: 2 total iterations: 10000000
Eu tenho uma condição de mau tempo como essa.
if(end>1000)
{
avr_time+=end;
counter++;
}
SZZ I anexou o código de objetividade por parte dos membros do fórum.
Executando seu EA on Idle-CPU, RannForex-Server, 6 gráficos com símbolos diferentes. Quando voltei ao meu computador, vi muito disso.
Se entendi corretamente, neste teste há 6 EAs em laço rodando em 4 núcleos de CPU, e cada um deles está tentando carregar um núcleo 100%. Isto é, este é definitivamente um teste de estresse, muito longe das condições normais de operação.
Sob tais condições, 1 ou 2 ejeções de 1-2ms para 10 milhões de consultas é um excelente resultado.
E mais uma vez, deixe-me lembrá-lo: quanto maior a carga, mais você testa a eficiência do programador de tarefas do sistema operacional, não do terminal. Não se deixe enganar.
Se eu entendi corretamente, neste teste há 6 EAs em laço rodando em 4 núcleos de CPU, e cada um deles está tentando carregar um núcleo 100%. Isto é, este é definitivamente um teste de estresse, muito longe das condições normais de operação.
Este EA é um teste de estresse? Estou lhe perguntando isto porque tem medido
#include <fxsaber\BenchMark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279void GetMarketWatch( MqlTick &Ticks[] )
{
for (int i = ArrayResize(Ticks, Size2) - 1; i >= 0; i--)
_B(SymbolInfoTick(Symbols[i], Ticks[i]), 100);
}
Este é um bug bastante típico. A implementação atual da ArrayPrint imprime cordas através de chamadas consecutivas para várias impressões. Você deve primeiro formar uma grande cadeia com todos os dados e depois imprimi-la através de apenas uma impressão.
19 ms e 48 ms para a execução do SymbolInfoTick. Houve várias dezenas de casos em que a duração foi de centenas de microssegundos. Mas eu não os citei.
Aparentemente, a fim de reproduzi-lo, precisamos dirigir assessores de combate por 24 horas, e depois apenas assistir. Na minha opinião, é irrealista descobrir o que inicia tais desfasamentos.
Veja o código Test9 no topo da página. Por que 10 milhões de vezes sem dormir para solicitar carrapatos de um símbolo? O que este teste tem a ver com o comércio real?
Acho que o teste deve ser parecido com o seguinte: Pedimos um tique de cada símbolo na análise do mercado. Fazemos uma pausa para dormir(1) e assim por diante. Refaça levemente seu código:
intOnInit()
{
string Symbols[];
int TotalSymbol= SymbolsTotal(true);
ArrayResize(Symbols,TotalSymbol);
for(int i=0;i<TotalSymbol;i++)
Symbols[i]= SymbolName(i, true);
MqlTick Tick;
//---double temp=0;
ulong start,end,max_time=0,avr_time=0,counter=0;
int count=1 e4;
for(int i=0; !IsStopped() && (i<count); i++)
{
Sleep(1);
for(int j=0;j<TotalSymbol;j++)
{
start=GetMicrosecondCount();
SymbolInfoTick(Symbols[j], Tick);
// temp++;
end=GetMicrosecondCount()-start;
//---if(end>max_time)
max_time=end;
if(end>1000)
{
avr_time+=end;
counter++;
}
}
}
Comment("SymbolInfoTick max bad time: ",DoubleToString(max_time/1000.0,3)," ms; avr bad time: ",counter ? DoubleToString(avr_time/1000.0/counter,3):"0"," ms; bad iterations: ",counter," total iterations: ",count);
Print("SymbolInfoTick max bad time: ",DoubleToString(max_time/1000.0,3)," ms; avr bad time: ",counter ? DoubleToString(avr_time/1000.0/counter,3):"0"," ms; bad iterations: ",counter," total iterations: ",count);
returnINIT_FAILED;
}
Teste 55 símbolos na visão geral.
SymbolInfoTick max bad time: 0.212 ms; avr bad time: 0 ms; bad iterations: 0 total iterations: 10000
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.
Anton:
Executando seu EA on Idle-CPU, RannForex-Server, 6 gráficos com símbolos diferentes. Quando voltei ao meu computador, vi muitos destes.
Eu tenho uma condição de mau tempo como essa.
SZZ I anexou o código de objetividade por parte dos membros do fórum.
Executando seu EA on Idle-CPU, RannForex-Server, 6 gráficos com símbolos diferentes. Quando voltei ao meu computador, vi muito disso.
Se entendi corretamente, neste teste há 6 EAs em laço rodando em 4 núcleos de CPU, e cada um deles está tentando carregar um núcleo 100%. Isto é, este é definitivamente um teste de estresse, muito longe das condições normais de operação.
Sob tais condições, 1 ou 2 ejeções de 1-2ms para 10 milhões de consultas é um excelente resultado.
E mais uma vez, deixe-me lembrá-lo: quanto maior a carga, mais você testa a eficiência do programador de tarefas do sistema operacional, não do terminal. Não se deixe enganar.
Tenho uma pergunta sobre a relevância dos carrapatos dados pela SymbolInfoTick.
Situação:
1. Fazemos TimeCurretn(); temos tempo 18:00:00
2. Do SymbolInfoTick em um símbolo inválido. Recebemos um tique com o horário 17:58:00.
3. dormir(1)
4. Adiciona um SymbolInfoTick para o símbolo não-esquerdo. Recebemos um tique com o horário 17:59:00.
Isto é, no quarto item temos um novo tick, que é um minuto diferente do TimeCurretn().
Você vê algum problema nesta situação?
Como chegar a esta situação mais raramente?
Teste EA.
Eu não tenho Alertite. Resultado (corrido em seis gráficos).
Há um problema. É difícil dizer quão sério é.
Se eu entendi corretamente, neste teste há 6 EAs em laço rodando em 4 núcleos de CPU, e cada um deles está tentando carregar um núcleo 100%. Isto é, este é definitivamente um teste de estresse, muito longe das condições normais de operação.
Este EA é um teste de estresse? Estou lhe perguntando isto porque tem medido
está emitindo um mar de alertas.
Há um bug na saída do registro em série do ArrayPrint.
É claro que isto é um erro, já que este é o código fonte.
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
MT5 e Velocidade em Ação
fxsaber, 2020.10.30 15:04
Eu tenho Alerta disparado a cada segundo muitas vezes.
19 ms e 48 ms para a execução do SymbolInfoTick. Houve várias dezenas de casos em que a duração foi de centenas de microssegundos. Mas eu não os citei.
Aparentemente, a fim de reproduzi-lo, precisamos dirigir assessores de combate por 24 horas, e depois apenas assistir. Na minha opinião, é irrealista descobrir o que inicia tais desfasamentos.
Veja o código Test9 no topo da página. Por que 10 milhões de vezes sem dormir para solicitar carrapatos de um símbolo? O que este teste tem a ver com o comércio real?
Acho que o teste deve ser parecido com o seguinte: Pedimos um tique de cada símbolo na análise do mercado. Fazemos uma pausa para dormir(1) e assim por diante. Refaça levemente seu código:
Teste 55 símbolos na visão geral.
Agora vamos testar temp++ ao invés de SymbolInfoTick;
Veja o código Test9 no topo da página. Por que 10 milhões de vezes sem dormir para solicitar carrapatos de um personagem?
De forma alguma. Leia a filial para maiores detalhes.
Não em igualdade de condições. Leia a linha para obter detalhes.
Você não está confuso com o fato de que mesmo o tempo máximo de execução da temp++ leva dezenas de microssegundos, com esta técnica de medição?