Errores, fallos, preguntas - página 2613

 
Vladimir Pastushak:

Pregunta sobre GetMicrosecondCount()

Y al final del vídeo, el registro de impresión muestra

OD 0 22:58:46.604 Prueba (EURUSD,M15) 66190

GJ 0 22:58:46.669 Prueba (EURUSD,M15) 65134

GQ 0 22:58:55.914 Prueba (EURUSD,M15) 67867 La diferencia entre este valor y el anterior es de 9 segundos, pero GetMicrosecondCount() muestra 67867 mseg

PD 0 22:58:56.715 Prueba (EURUSD,M15) 66139

 
Vladimir Pastushak:

Y también al final del video el registro de impresión muestra

OD 0 22:58:46.604 Prueba (EURUSD,M15) 66190

GJ 0 22:58:46.669 Prueba (EURUSD,M15) 65134

GQ 0 22:58:55.914 Prueba (EURUSD,M15) 67867 La diferencia entre este valor y el anterior es de 9 segundos, pero GetMicrosecondCount() muestra 67867 mseg

PD 0 22:58:56.715 Prueba (EURUSD,M15) 66139

desbordamiento..los contadores deben ser comparados modulo

 
Vladimir Pastushak:

Y también al final del video el registro de impresión muestra

OD 0 22:58:46.604 Prueba (EURUSD,M15) 66190

GJ 0 22:58:46.669 Prueba (EURUSD,M15) 65134

GQ 0 22:58:55.914 Prueba (EURUSD,M15) 67867 La diferencia entre este valor y el anterior es de 9 segundos, pero GetMicrosecondCount() muestra 67867 mseg

PD 0 22:58:56.715 Prueba (EURUSD,M15) 66139

Desgraciadamente no has mostrado tu código completo.

¿Cómo vas a discutir la medición de las millonésimas de segundo, presentando sólo el vídeo e ignorando completamente el código?


Si definitivamente quieres discutir la precisión de la medición de un temporizador de microsegundos, entonces ejecuta el ejemplo:

void OnStart()
  {
   ulong ticks;
//---
   ticks=GetMicrosecondCount();   
   Sleep(40);
   Print("40 ms = ",GetMicrosecondCount()-ticks," msc");
//---   
   ticks=GetMicrosecondCount();   
   Sleep(10);
   Print("10 ms = ",GetMicrosecondCount()-ticks," msc");
  }

40 ms = 40354 msc
10 ms = 10487 msc

No existe ningún error de medición.

GetMicrosecondCount() se ejecuta en el QueryPerformanceCounter del sistema, y la referencia a la hora de inicio de la aplicación se incrusta por conveniencia.

Busque un error en su código de sincronización.

 
MetaQuotes Software Corp.:

Lamentablemente, no has mostrado tu código completo.

¿Cómo vas a discutir la medición de millonésimas de segundo presentando sólo un vídeo e ignorando completamente el código?


Si definitivamente quieres discutir la precisión de la medición del temporizador de microsegundos, entonces ejecuta el ejemplo:

No existe ningún error de medición.

GetMicrosecondCount() se ejecuta en el QueryPerformanceCounter del sistema, y la referencia a la hora de inicio de la aplicación se introduce por comodidad.

Busque el error en su propio código de medición del tiempo.

He utilizado la biblioteca estándar. Publicaré el código un poco más tarde, pero no hay nada nuevo.

 

No sería mala idea mantener la elección de la moneda y el país:

 
Después de la última actualización lag tester en el modo de prueba visual, durante 30-60 segundos se cuelga, lanza el gráfico al principio de la historia. Hay un error con la creación de objetos, por ejemplo, crear un botón, la posición en el primer plano, crear una posición de la línea en el fondo, pero si los objetos se cruzan, cuando intenta pulsar el botón, la línea de primer plano, aunque visualmente el botón en el primer lugar. Si se mantiene el ratón sobre el botón, aparece un menú con el nombre de la línea creada (está en el fondo en relación con el botón).
 

Me gustaría poder ver los resultados de la optimización hacia adelante antes de que se complete.

Me gustaría que estos resultados se mostraran de la misma manera que los resultados de la optimización principal: inmediatamente en la ventana. Y ahora no hay ninguna ventana de este tipo.

Es extraño - por qué hay una ventana y no otra - en el mismo proceso (esencialmente)...

 

Según tengo entendido, en la ventana de Visión General del Mercado, los símbolos tienen ahora precios de compra y venta que no están desactivados?

Bild 2265.

 
//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   1
#property indicator_buffers 1
#include <Trident\TCoreMain.mqh>
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ::EventSetMillisecondTimer(500);
   return(INIT_SUCCEEDED);
  }
  
  void OnDeinit(const int reason) {
   ::EventKillTimer();
}

void OnTimer() {
   ::EventKillTimer();
   TestPhoto();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void TestPhoto() {
   string name;
   MqlDateTime  dtLocal;
   TimeToStruct(TimeLocal(), dtLocal);
   string date = IntegerToString(dtLocal.year) + IntegerToString(dtLocal.mon, 2, '0') + IntegerToString(dtLocal.day, 2, '0');
   string time = IntegerToString(dtLocal.hour, 2, '0') + "." + IntegerToString(dtLocal.min, 2, '0') + "." + IntegerToString(dtLocal.sec, 2, '0');
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png";
   
   if (!ChartScreenShot(0, name, 1920,1200, ALIGN_RIGHT))
      return;

   ResetLastError();
   
   for (int i=0; i < 100000; i++){
      if (FileIsExist(name,false) && FileSize(name) > 0)
         break;
   }
   //---
   int flags=FILE_READ|FILE_BIN|FILE_SHARE_READ;

   //---
   int file=FileOpen(name,flags);
   if(file<0) {
      Print("Операция FileOpen неудачна, ошибка ",GetLastError());
      return;
}
   uchar photo[];
   FileReadArray(file,photo);
   FileClose(file);
   
   Print(ArraySize(photo));
}

¡¡¡Leer un archivo binario de un indicador no funciona!!! Un código similar de EA funciona sin problemas

 
//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   1
#property indicator_buffers 1
#include <Trident\TCoreMain.mqh>
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ::EventSetMillisecondTimer(500);
   return(INIT_SUCCEEDED);
  }
  
  void OnDeinit(const int reason) {
   ::EventKillTimer();
}

void OnTimer() {
   ::EventKillTimer();
   TestPhoto();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void TestPhoto() {
   string name;
   MqlDateTime  dtLocal;
   TimeToStruct(TimeLocal(), dtLocal);
   string date = IntegerToString(dtLocal.year) + IntegerToString(dtLocal.mon, 2, '0') + IntegerToString(dtLocal.day, 2, '0');
   string time = IntegerToString(dtLocal.hour, 2, '0') + "." + IntegerToString(dtLocal.min, 2, '0') + "." + IntegerToString(dtLocal.sec, 2, '0');
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png";
   
   if (!ChartScreenShot(0, name, 1920,1200, ALIGN_RIGHT))
      return;

   ResetLastError();
   
   for (int i=0; i < 100000; i++){
      if (FileIsExist(name,false) && FileSize(name) > 0)
         break;
   }
   //---
   int flags=FILE_READ|FILE_BIN|FILE_SHARE_READ;

   //---
   int file=FileOpen(name,flags);
   if(file<0) {
      Print("Операция FileOpen неудачна, ошибка ",GetLastError());
      return;
}
   uchar photo[];
   FileReadArray(file,photo);
   FileClose(file);
   
   Print(ArraySize(photo));
}
¡La lectura del archivo binario del indicador no funciona, el mismo código del EA funciona sin problemas!
Razón de la queja: