Erros, bugs, perguntas - página 288

 

de modo a não repetir o posto. Por favor, dê uma olhada em https://www.mql5.com/ru/forum/2547/page1#comment_45265

O que estou a fazer de errado? Parece ser o mesmo que no artigo. Quero aprender a trabalhar com aulas normais. Mas parece que o estou a fazer mal (.

Обсуждение статьи "Как использовать торговые классы Стандартной библиотеки при написании советника"
Обсуждение статьи "Как использовать торговые классы Стандартной библиотеки при написании советника"
  • www.mql5.com
Обсуждение статьи "Как использовать торговые классы Стандартной библиотеки при написании советника".
 
Trolls:

de modo a não repetir o posto. Por favor, dê uma olhada em https://www.mql5.com/ru/forum/2547/page1#comment_45265

O que estou a fazer de errado? Parece ser o mesmo que no artigo. Quero aprender a trabalhar com aulas normais. Mas parece que o estou a fazer mal (.

Respondeu aí.
 

Um erro na função

string  DoubleToString(
   double  value,      // число
   int     digits=8    // кол-во знаков после запятой
   );

Se os dígitos >= 12

void testDoubleToString()
  {
   int i,j,cn=11,digits=DBL_DIG+1;
   double dblVal,dblValFromStr,pres=0.1;
   string dblStr;
   Print("Start testDoubleToString cn=",cn," digits=",digits);
   for(i=1; i<=digits; i++)
     {
      for(j=2; j<cn; j++)
        {
         dblVal = 1.0/j;
         dblStr = DoubleToString(1.0/j, i);
         dblValFromStr=StringToDouble(dblStr);
         if(MathAbs(dblValFromStr-dblVal)>pres)
           {
            Print("ERROR from function DoubleToString digits: ",i," value: 1/",j," dblVal: ",
               dblVal," strVal: ",dblStr," dblValFromStr: ",dblValFromStr);
           }
        }
      pres*=0.1;
     }
  }
//---
void OnStart(){testDoubleToString();}
//---

ERRO da função DoubleToString digitos: 14 valor: 1/10 dblVal: 0.1 strVal: 1.00000000000000 dblValFromStr: 1
ERRO da função DoubleToString digitos: 14 valor: 1/9 dblVal: 0.1111111111111111 strVal: 1.11111111111111 dblValFromStr: 1.11111111111111
ERRO da função DoubleToString dígitos: 14 valor: 1/8 dblVal: 0,125 strVal: 1,25000000000000 dblValFromStr: 1,25
ERRO da função DoubleToString digitos: 14 valor: 1/7 dblVal: 0,1428571428571429 strVal: 1,42857142857143 dblValFromStr: 1,42857142857143
ERRO da função DoubleToString dígitos: 14 valor: 1/6 dblVal: 0,166666666666666667 strVal: 1,666666666666667 dblValFromStr: 1,666666666666667
ERRO da função DoubleToString digitos: 14 valor: 1/5 dblVal: 0.2 strVal: 2.00000000000000 dblValFromStr: 2
ERRO da função DoubleToString dígitos: 14 valor: 1/4 dblVal: 0.25 strVal: 2.50000000000000 dblValFromStr: 2.5
ERRO da função DoubleToString dígitos: 14 valor: 1/3 dblVal: 0,3333333333333333 strVal: 3,33333333333333 dblValFromStr: 3,333333333333 dblValFromStr: 3,3333333333
ERRO da função DoubleToString digitos: 14 valor: 1/2 dblVal: 0.5 strVal: 5.00000000000000 dblValFromStr: 5
ERRO da função DoubleToString digitos: 13 valor: 1/10 dblVal: 0.1 strVal: 1.0000000000000 dblValFromStr: 1
ERRO da função DoubleToString dígitos: 13 valor: 1/9 dblVal: 0.111111111111111111 strVal: 1.1111111111111 dblValFromStr: 1.1111111111111
ERRO da função DoubleToString digitos: 13 valor: 1/8 dblVal: 0,125 strVal: 1,2500000000000 dblValFromStr: 1,25
ERRO da função DoubleToString digitos: 13 valor: 1/7 dblVal: 0,1428571428571429 strVal: 1,4285714285714 dblValFromStr: 1,4285714285714
ERRO da função DoubleToString dígitos: 13 valor: 1/6 dblVal: 0,166666666666666667 strVal: 1,666666666667 dblValFromStr: 1,666666666667
ERRO da função DoubleToString digitos: 13 valor: 1/5 dblVal: 0.2 strVal: 2.0000000000000 dblValFromStr: 2
ERRO da função DoubleToString digitos: 13 valor: 1/4 dblVal: 0.25 strVal: 2.5000000000000 dblValFromStr: 2.5
ERRO da função DoubleToString digitos: 13 valor: 1/3 dblVal: 0,3333333333333333 strVal: 3,3333333333333 dblValFromStr: 3,3333333333333
ERRO da função DoubleToString digitos: 13 valor: 1/2 dblVal: 0.5 strVal: 5.0000000000000 dblValFromStr: 5
ERRO da função DoubleToString digitos: 12 valor: 1/10 dblVal: 0.1 strVal: 1.000000000000 dblValFromStr: 1
ERRO da função DoubleToString digitos: 12 valor: 1/9 dblVal: 0.1111111111111111 strVal: 1.111111111111 dblValFromStr: 1.11111111111111
ERRO da função DoubleToString dígitos: 12 valor: 1/8 dblVal: 0,125 strVal: 1,250000000000 dblValFromStr: 1,25
ERRO da função DoubleToString digitos: 12 valor: 1/7 dblVal: 0,1428571428571429 strVal: 1,428571428571 dblValFromStr: 1,428571428571
ERRO da função DoubleToString dígitos: 12 valor: 1/6 dblVal: 0,1666666666666667 strVal: 1,6666666666667 dblValFromStr: 1,6666666666667
ERRO da função DoubleToString digitos: 12 valor: 1/5 dblVal: 0.2 strVal: 2.000000000000 dblValFromStr: 2
ERRO da função DoubleToString digitos: 12 valor: 1/4 dblVal: 0.25 strVal: 2.500000000000 dblValFromStr: 2.5
ERRO da função DoubleToString digitos: 12 valor: 1/3 dblVal: 0,33333333333333 strVal: 3,333333333333 dblValFromStr: 3,3333333333 dblValFromStr: 3,3333333333
ERRO da função DoubleToString digitos: 12 valor: 1/2 dblVal: 0.5 strVal: 5.000000000000 dblValFromStr: 5


OS: WIN7

Construir: 387

 
BZSP:

Um erro na função

string  DoubleToString(
   double  value,      // число
   int     digits=8    // кол-во знаков после запятой
   );

Quando os dígitos >= 12

Obrigado, vamos dar uma vista de olhos.
 

Como é que defino a altura da subjanela do gráfico? se uma função? ou apenas através de um modelo?

 
dentraf:

Como é que defino a altura da subjanela do gráfico? se uma função? ou apenas através de um modelo?

Todas as funções são descritas na ajuda.

Faça-o através do modelo.

 
В классе CArray #include <Arrays\Array.mqh> 
забыли прописать виртуальные методы Reserve()и Resize() 
 

Aqui está uma coisa engraçada - quando se executa o TESTEURADOR DE ESTRATÉGIA por defeito

está definido para baixa prioridade, agora tenho de o mudar manualmente para médio sempre.


Talvez seja assim que deve ser?

 

alexluek:

Talvez seja assim que deve ser?

Sim, está especificamente concebido para executar múltiplos agentes locais em modo de optimização.

A questão é que o testador utiliza o CPU de forma muito intensa e fácil e toma 100% de todos os núcleos do sistema. Se deixar a prioridade "médio", a CPU será carregada a 100% e mesmo o terminal carecerá de recursos. A situação é especialmente má com processadores de um só núcleo.

É por isso que a configuração padrão para agentes em modo de optimização é de baixa prioridade, o que permite que outros programas também funcionem. Se um computador não estiver ocupado com outro trabalho, então mesmo com baixa prioridade, os agentes obterão todos os recursos da CPU (baixar a prioridade da CPU não significa redução directa de recursos).

Muito provavelmente, mudaríamos a prioridade de "baixa" para "abaixo da média" - isto seria suficiente para manter o sistema operacional a responder sob carga total com agentes locais em modo de optimização.

É importante notar que quando se corre com um único agente e se tem mais de 1 núcleo, este agente corre com prioridade "média". Um único agente com núcleos adicionais pode não afectar tanto todo o sistema.


ps: veja a sua captura de ecrã - mesmo com baixa prioridade, a carga da CPU é de 95%.

 
Renat:

Sim, isto é feito especificamente para executar múltiplos agentes locais em modo de optimização.

....

ps: veja a sua captura de ecrã - mesmo com baixa prioridade, a carga da CPU é de 95%.


Tenha-o em mente, por favor. Obrigado