Características da linguagem mql5, subtilezas e técnicas - página 139

 
fxsaber:

Esta opção não funciona

Corrigido o código, agora está OK.
 
Alexey Navoykov:
Corrigido o código, agora está tudo bem.

Algo que postou com um erro, uma vez que não se compila de todo.

 
fxsaber:

Algo que postou com um erro, uma vez que não se compila de todo.

Sim, é uma gralha. Corrigido.
 
Alexey Navoykov:
Sim, é uma gralha. Corrigido.

Obrigado, funciona. Permanece para ser visto o efeito no desempenho.

 
Para aqueles que utilizam recursos dinâmicos (por exemplo, Kanvas), recomendo que se acelerem as populações de matriz desta forma

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

fxsaber, 2019.07.09 18:36

void FillArray1( int &Array[] )
{
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size; i++)
    Array[i] = i;
}

#define  ARRAY_SIZE 10000

void FillArray2( int &Array[] )
{
  int ArrayStatic[ARRAY_SIZE];
  
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size;)
  {
    const int Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
    
    for (int j = 0; j < Size2; j++)
      ArrayStatic[j] = i++;
      
    if (Size2)
      ArrayCopy(Array, ArrayStatic, i - Size2, 0, Size2);
  }
}

#define  BENCH(A)                                                               \
{                                                                              \
  const ulong _StartTime = GetMicrosecondCount();                              \
  A;                                                                           \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}

void OnStart()
{
  int Array1[];
  ArrayResize(Array1, 1 e7);

  int Array2[];
  ArrayResize(Array2, 1 e7);
  
  BENCH(FillArray1(Array1));
  BENCH(FillArray2(Array2));
}
Aceleração de dezenas de por cento.

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

fxsaber, 2019.07.09 19:40

Time[FillArray1(Array1)] = 39501
Time[FillArray2(Array2)] = 30304

A versão de lançamento está a correr. Optimização activada.


Encontrou um tamanho de matriz estática óptimo por experiência

#define  ARRAY_SIZE 256
 
fxsaber:
Para aqueles que utilizam recursos dinâmicos (por exemplo, Kanvas), recomendo a aceleração do enchimento das matrizes da seguinte forma
Uma aceleração de dezenas de por cento.


Encontrei o tamanho óptimo de uma matriz estática através da experimentação.

E se o comparar com oArrayFill de mql5, haverá um ganho de velocidade ou não?

 

Não li o tópico completo, talvez haja uma resposta a esta pergunta, MT5 não se comporta compreensivelmente com objectos gráficos, o terminal está fechado durante algum tempo e os objectos permanecem presos a alguns pontos obscuros. Como lidar com isto? Não é difícil de fazer nestes casos quando uma janela de gráficos está aberta. Eu pessoalmente acrescento uma transição ao OnDeinit no OnInit(), mas se a janela estiver marcada, não resolve o problema. Talvez alguém nos diga onde podemos "dar voz" às sugestões dos criadores do MT5.

.

 
Alexander Lasygin:

Não li o tópico completo, talvez haja uma resposta a esta pergunta, MT5 não se comporta compreensivelmente com objectos gráficos, o terminal está fechado durante algum tempo e os objectos permanecem presos a alguns pontos obscuros. Como lidar com isto? Não é difícil de fazer nestes casos quando uma janela de gráficos está aberta. Eu pessoalmente acrescento uma transição ao OnDeinit no OnInit(), mas se a janela estiver marcada, não resolve o problema. Talvez alguém nos diga onde podemos "dar voz" às sugestões dos criadores do MT5.

.

Fornecer dados exactos para reproduzir: por exemplo, um modelo de gráfico com objectos.

Suspeito que os objectos são desenhados pelo indicador, e é o indicador que rastreia incorrectamente pré_calculados.

 
Konstantin:

e se o comparar com oArrayFill a partir de mql5, haverá ou não um ganho de velocidade?

Penso que não haverá.

 
fxsaber:

Não creio que o faça.

então porquê reinventar o seu próprio lisepad quando já existe uma função produtiva?