Características del lenguaje mql5, sutilezas y técnicas - página 139

 
fxsaber:

Esta opción no funciona

Corregido el código, ahora está bien.
 
Alexey Navoykov:
Corregido el código, todo está bien ahora.

Algo que has publicado con un error, ya que no compila en absoluto.

 
fxsaber:

Algo que has publicado con un error, ya que no compila en absoluto.

Sí, es una errata. Lo he corregido.
 
Alexey Navoykov:
Sí, es una errata. Corregido.

Gracias, funciona. Queda por ver el efecto en el rendimiento.

 
Para aquellos que utilizan recursos dinámicos (por ejemplo, Kanvas), recomiendo acelerar las poblaciones de array de esta manera

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

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));
}
Aceleración de decenas de puntos.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2019.07.09 19:40

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

Versión de lanzamiento en marcha. Optimización habilitada.


Encontrado el tamaño óptimo de la matriz estática por la experiencia

#define  ARRAY_SIZE 256
 
fxsaber:
Para aquellos que utilizan recursos dinámicos (por ejemplo, Kanvas), recomiendo acelerar el llenado de las matrices de la siguiente manera
Una aceleración de decenas de puntos.


He encontrado el tamaño óptimo de una matriz estática mediante la experimentación.

Y si lo comparas conArrayFill de mql5, ¿habrá una ganancia de velocidad o no?

 

No he leído todo el tema, tal vez haya una respuesta a esta pregunta, MT5 no se comporta de forma comprensible con los objetos gráficos, el terminal se cierra durante algún tiempo y los objetos permanecen adheridos a algunos puntos oscuros ¿Cómo se soluciona esto? No es difícil de hacer en esos casos cuando la ventana del gráfico está abierta. Personalmente añado una transición a OnDeinit en OnInit(), pero si la ventana está marcada no resuelve el problema. Tal vez alguien nos diga dónde podemos "expresar" las sugerencias a los creadores de MT5.

.

 
Alexander Lasygin:

No he leído todo el tema, tal vez haya una respuesta a esta pregunta, MT5 no se comporta de forma comprensible con los objetos gráficos, el terminal se cierra durante algún tiempo y los objetos permanecen adheridos a algunos puntos oscuros ¿Cómo se soluciona esto? No es difícil de hacer en esos casos cuando la ventana del gráfico está abierta. Personalmente añado una transición a OnDeinit en OnInit(), pero si la ventana está marcada no resuelve el problema. Tal vez alguien nos diga dónde podemos "expresar" las sugerencias a los creadores de MT5.

.

Proporcionar datos exactos para reproducir: por ejemplo, una plantilla de gráfico con objetos.

Sospecho que los objetos son dibujados por el indicador, y es el indicador el que hace un seguimiento incorrecto de prev_calculado.

 
Konstantin:

y si lo comparas conArrayFill de mql5, ¿habrá una ganancia de velocidad o no?

No creo que lo haya.

 
fxsaber:

No creo que lo haga.

¿por qué reinventar su propia lista cuando ya existe una función productiva?