Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 26

 
Roman:

Gracias, ahora sé cuál es la razón.
El paso del temporizador del sistema sigue siendo un múltiplo de 15,625

Añadido.
Pero he cambiado el período del temporizador del sistema de la función api de vino timeBeginPeriod(1)
es decir, el temporizador del sistema se incrementa ahora a 1 milisegundo.
Y el paso del temporizador del sistema debería ser de 1 milisegundo, ¿verdad?
¿Por qué se sigue congelando el contador en el comentario?
https://rsdn.org/forum/winapi/4159851.1
 
Y en Linux bajo Wine, el contador del comentario funciona sin problemas, incluso con EventSetMillisecondTimer(1);
Pero la carga del procesador crece hasta un 40%, con ocho hilos de procesador.
En general, cerrado el tema, off topic ))
 
Roman:
Y en Linux bajo Wine, el contador del comentario funciona sin problemas, incluso con EventSetMillisecondTimer(1);
Pero la carga de la CPU aumenta hasta un 40%, con ocho hilos de CPU.

A eso me refiero...
¿Por qué 64 veces por segundo?
Creo que para poder mostrar todo tipo de información en la pantalla. Ya está bien de frecuencia. No tiene sentido exhibirlo más a menudo, y sería demasiado caro.
Me pregunto siOnChartEvent, OnCalculate y OnTick se activan también 64 veces por segundo. - Creo que sí.

 
Nikolai Semko:

A eso me refiero...
¿Por qué 64 veces por segundo?
Creo que para poder mostrar todo tipo de información en la pantalla. Ya está bien de frecuencia. No tiene sentido exhibirlo más a menudo, y sería demasiado caro.
Me pregunto si OnChartEvent, OnCalculate y OnTick se generan también 64 veces por segundo.

El punto aquí no estaba en la carga, sino en las capacidades del manejador OnTimer()
Resulta que Windows limita estas capacidades, mientras que Linux no.

Pregunta, ¿OnChartEvent, OnCalculate y OnTick se generan también no más de 64 veces por segundo?
Probablemente sea mejor esperar una respuesta del desarrollador.

 
Roman:

A la pregunta, ¿también se generan OnChartEvent, OnCalculate y OnTick no más de 64 veces por segundo?
Probablemente sea mejor esperar una respuesta del desarrollador.

Comprobado OnChartEvent con el ratón.
Obtuve la frecuencia máxima de 124 hertzios. No más. Me pregunto por qué no es 128.

Archivos adjuntos:
 
Nikolai Semko:

Comprobado el OnChartEvent con el ratón.
La frecuencia máxima es de 124 hercios. No más que eso. Es extraño que no sea 128.

Cambié el algoritmo un poco. No tuve en cuenta que ese comentario consume mucho tiempo. Tengo 127 Hz.
Ya es lógico. El error de 1 Hz ya se puede explicar por el propio programa, por lo que es un poco fuera de 128.

Así que la frecuencia máxima de OnChartEvent es de 128 Hz.

Archivos adjuntos:
 
¿Es posible obtener un spread sintético utilizando MQL5?
En el propio terminal hay un diferencial sobre los sintéticos.
 
Aidas Geguzis:
¿Es posible obtener un spread sintético utilizando MQL5?
En el propio terminal hay un diferencial sobre los sintéticos.

En el caso de los programas de terceros, los símbolos personalizados difieren mínimamente de los originales. Así que no debería haber obstáculos.

 
Si se crea un instrumento personalizado a través de la interfaz del terminal y el símbolo personalizado tiene un valor negativo
En la interfaz del símbolo personalizado se deben permitir los precios negativos.
Si no especifica este ajuste, el historial no se calcula para el símbolo creado y el gráfico se muestra sólo desde el momento actual.
Durante mucho tiempo no pude entender la razón por la que no se calcula el historial, ya que el diario no muestra la advertencia de que los precios negativos deben estar habilitados.
Sería bueno tener una advertencia de este tipo en el registro.
 

Añadir ticks uno a uno (en particular de EURUSD en MQ Demo) a un nuevo símbolo personalizado vacío da el error 5310 (no inmediatamente, sino en un bucle desde una fecha arbitraria).

input int Limit = 10000;
input datetime Start = D'2020.06.01';

int fillArray(ulong &_start)
{
  MqlTick array[];
  int size = CopyTicks(_Symbol, array, COPY_TICKS_ALL, _start, Limit);
  if(size > 0)
  {
    _start = array[size - 1].time_msc + 1;
    if(CustomTicksAdd(symbolName, array) == -1)
    {
      Print("Error:", GetLastError());
      return -1;
    }
  }
  return size;
}

...
{
  ulong startMsc = (ulong)Start * 1000;
  while(fillArray(startMsc) > 0);
}

¿Qué pasa? ¿Cómo puedo saber qué garrapatas específicas están siendo regañadas? Salida de arrays al registro - no hay violación de la cronología allí.

Razón de la queja: