Fehler, Irrtümer, Fragen - Seite 2613

 
Vladimir Pastushak:

Frage zu GetMicrosecondCount()

Und am Ende des Videos zeigt das Druckprotokoll

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 Der Unterschied zwischen diesem Wert und dem vorherigen beträgt 9 Sekunden, aber GetMicrosecondCount() zeigt 67867 msec an

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

 
Vladimir Pastushak:

Und auch am Ende des Videos zeigt das Druckprotokoll

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 Der Unterschied zwischen diesem Wert und dem vorherigen beträgt 9 Sekunden, aber GetMicrosecondCount() zeigt 67867 msec an

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

Überlauf..Zähler müssen modulo verglichen werden

 
Vladimir Pastushak:

Und auch am Ende des Videos zeigt das Druckprotokoll

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 Der Unterschied zwischen diesem Wert und dem vorherigen beträgt 9 Sekunden, aber GetMicrosecondCount() zeigt 67867 msec an

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

Leider haben Sie Ihren Code nicht vollständig angegeben.

Wie wollen Sie über die Messung von Millionstelsekunden diskutieren, wenn Sie nur ein Video zeigen und den Code völlig ignorieren?


Wenn Sie unbedingt über die Genauigkeit einer Mikrosekunden-Zeitmessung diskutieren wollen, dann führen Sie das Beispiel aus:

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

Es gibt keinen Messfehler.

GetMicrosecondCount() wird auf dem QueryPerformanceCounter des Systems ausgeführt, und der Verweis auf die Startzeit der Anwendung ist der Einfachheit halber eingebettet.

Suchen Sie nach einem Fehler in Ihrem Timing-Code.

 
MetaQuotes Software Corp.:

Leider haben Sie Ihren Code nicht vollständig angezeigt.

Wie wollen Sie über die Messung von Millionstelsekunden diskutieren, wenn Sie nur ein Video zeigen und den Code völlig ignorieren?


Wenn Sie unbedingt über die Genauigkeit der Messung des Mikrosekunden-Timers diskutieren wollen, dann führen Sie das Beispiel aus:

Es gibt keinen Messfehler.

GetMicrosecondCount() wird mit dem QueryPerformanceCounter des Systems ausgeführt, und der Verweis auf die Startzeit der Anwendung wird der Einfachheit halber eingefügt.

Suchen Sie nach Fehlern in Ihrem eigenen Zeitmessungscode.

Ich habe die Standardbibliothek verwendet. Ich werde den Code etwas später posten, aber es gibt nichts Neues darin.

 

Es wäre keine schlechte Idee, die Wahl der Währung und des Landes beizubehalten:

 
Nach dem letzten Update lag tester im visuellen Testmodus, für 30-60 Sekunden hängt, wirft das Diagramm am Anfang der Geschichte. Es gibt einen Fehler bei der Erstellung von Objekten, z. B. erstellen Sie eine Schaltfläche, Position im Vordergrund, erstellen Sie eine Linie Position im Hintergrund, aber wenn die Objekte überschneiden, wenn Sie versuchen, die Schaltfläche drücken, die Vordergrundlinie, obwohl visuell die Schaltfläche in erster Linie. Wenn Sie die Maus auf der Schaltfläche halten, wird ein Menü mit dem Namen der erstellten Zeile angezeigt (es befindet sich im Hintergrund in Bezug auf die Schaltfläche).
 

Ich würde gerne die Ergebnisse der Vorwärtsoptimierung sehen, bevor sie abgeschlossen ist.

Ich möchte, dass diese Ergebnisse auf die gleiche Weise angezeigt werden wie die Ergebnisse der Hauptoptimierung - sofort im Fenster. Und jetzt gibt es überhaupt kein solches Fenster mehr!

Es ist seltsam - warum gibt es ein Fenster und nicht ein anderes - im gleichen (im Wesentlichen) Prozess...

 

Soweit ich das verstanden habe, haben die Symbole im Fenster Marktübersicht jetzt Geld- und Briefkurse, die nicht ausgeschaltet sind?

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

Das Lesen einer Binärdatei aus einem Indikator funktioniert nicht!!! Ähnlicher Code von EA funktioniert ohne Probleme

 
//+------------------------------------------------------------------+
//|                                                         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));
}
Das Lesen der Binärdatei aus dem Indikator funktioniert nicht, der gleiche Code aus dem EA funktioniert ohne Probleme!