Errori, bug, domande - pagina 2613

 
Vladimir Pastushak:

Domanda su GetMicrosecondCount()

E alla fine del video, il registro di stampa mostra

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

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

GQ 0 22:58:55.914 Test (EURUSD,M15) 67867 La differenza tra questo valore e quello precedente è di 9 secondi, ma GetMicrosecondCount() mostra 67867 msec

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

 
Vladimir Pastushak:

E anche alla fine del video il registro di stampa mostra

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

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

GQ 0 22:58:55.914 Test (EURUSD,M15) 67867 La differenza tra questo valore e quello precedente è di 9 secondi, ma GetMicrosecondCount() mostra 67867 msec

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

overflow..i contatori devono essere confrontati modulo

 
Vladimir Pastushak:

E anche alla fine del video il registro di stampa mostra

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

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

GQ 0 22:58:55.914 Test (EURUSD,M15) 67867 La differenza tra questo valore e quello precedente è di 9 secondi, ma GetMicrosecondCount() mostra 67867 msec

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

Purtroppo non hai mostrato il tuo codice completo.

Come si fa a discutere della misura dei milionesimi di secondo, presentando solo il video e ignorando completamente il codice?


Se volete assolutamente discutere la precisione della misurazione di un timer a microsecondi, allora eseguite l'esempio:

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

Non c'è nessun errore di misurazione.

GetMicrosecondCount() funziona sul QueryPerformanceCounter del sistema, e il riferimento all'ora di inizio dell'applicazione è incorporato per comodità.

Cercate un errore nel vostro codice di temporizzazione.

 
MetaQuotes Software Corp.:

Purtroppo non hai mostrato il tuo codice completo.

Come si fa a discutere della misurazione dei milionesimi di secondo presentando solo un video e ignorando completamente il codice?


Se volete assolutamente discutere la precisione della misurazione del timer a microsecondi, allora eseguite l'esempio:

Non c'è nessun errore di misurazione.

GetMicrosecondCount() funziona sul QueryPerformanceCounter del sistema, e il riferimento all'ora di inizio dell'applicazione è inserito per comodità.

Cercate un errore nel vostro codice di misurazione del tempo.

Ho usato la libreria standard. Posterò il codice un po' più tardi, ma non c'è niente di nuovo.

 

Non sarebbe una cattiva idea mantenere la scelta della valuta e del paese:

 
Dopo l'ultimo aggiornamento lag tester in modalità test visivo, per 30-60 secondi si blocca, lancia il grafico all'inizio della storia. C'è un bug con la creazione di oggetti, per esempio creare un pulsante, posizione in primo piano, creare una linea di posizione sullo sfondo, ma se gli oggetti si intersecano, quando si tenta di premere il pulsante, la linea in primo piano, anche se visivamente il pulsante in primo luogo. Se si tiene il mouse sul pulsante, appare un menu con il nome della linea creata (è sullo sfondo rispetto al pulsante).
 

Mi piacerebbe poter vedere i risultati dell'ottimizzazione in avanti prima che sia completata.

Vorrei che questi risultati fossero visualizzati allo stesso modo dei risultati dell'ottimizzazione principale - immediatamente nella finestra. E ora non c'è più questa finestra!

È strano - perché c'è una finestra e non un'altra - nello stesso processo (essenzialmente)...

 

Per quanto ho capito, nella finestra Panoramica del mercato, i simboli ora hanno prezzi bid e ask che non sono spenti?

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));
}

La lettura di un file binario da un indicatore non funziona!!! Il codice simile di EA funziona senza problemi

 
//+------------------------------------------------------------------+
//|                                                         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 lettura del file binario dall'indicatore non funziona, lo stesso codice dall'EA funziona senza problemi!