Erreurs, bugs, questions - page 2613

 
Vladimir Pastushak:

Et aussi à la fin de la vidéo le journal d'impression montre

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 différence entre cette valeur et la précédente est de 9 secondes, mais GetMicrosecondCount() montre 67867 msec

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

débordement...les compteurs doivent être comparés modulo

 
Vladimir Pastushak:

Et aussi à la fin de la vidéo le journal d'impression montre

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 différence entre cette valeur et la précédente est de 9 secondes, mais GetMicrosecondCount() montre 67867 msec

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

Malheureusement, vous n'avez pas montré votre code complet.

Comment allez-vous discuter de la mesure des millionièmes de seconde en ne présentant que la vidéo et en ignorant complètement le code ?


Si vous voulez absolument discuter de la précision de la mesure d'une minuterie à la microseconde, exécutez l'exemple :

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

Il n'y a pas d'erreur de mesure.

GetMicrosecondCount() s'exécute sur le QueryPerformanceCounter du système, et la référence à l'heure de démarrage de l'application est intégrée pour des raisons de commodité.

Cherchez une erreur dans votre code de synchronisation.

 
MetaQuotes Software Corp.:

Malheureusement, vous n'avez pas montré votre code complet.

Comment allez-vous discuter de la mesure des millionièmes de seconde en ne présentant qu'une vidéo et en ignorant complètement le code ?


Si vous voulez absolument discuter de la précision de la mesure du minuteur à la microseconde, exécutez l'exemple :

Il n'y a pas d'erreur de mesure.

GetMicrosecondCount() s'exécute sur le QueryPerformanceCounter du système, et la référence à l'heure de démarrage de l'application est ajoutée par commodité.

Recherchez une erreur dans votre code de mesure du temps.

J'ai utilisé la bibliothèque standard. Je posterai le code un peu plus tard, mais il n'y a rien de nouveau.

 

Ce ne serait pas une mauvaise idée de conserver le choix de la monnaie et du pays :

 
Après la dernière mise à jour lag tester en mode test visuel, pour 30-60 secondes se bloque, jette le graphique au début de l'histoire. Il y a un bug avec la création d'objets, par exemple créer un bouton, position dans le premier plan, créer une ligne position dans l'arrière-plan, mais si les objets se croisent, lorsque vous essayez d'appuyer sur le bouton, la ligne de premier plan, bien visuellement le bouton en premier lieu. Si vous maintenez la souris sur le bouton, un menu s'affiche avec le nom de la ligne créée (il est en arrière-plan par rapport au bouton).
 

J'aimerais pouvoir voir les résultats de l'optimisation prospective avant qu'elle ne soit terminée.

Je voudrais que ces résultats soient affichés de la même manière que les résultats de l'optimisation principale - immédiatement dans la fenêtre. Et maintenant, cette fenêtre n'existe plus du tout !

C'est étrange - pourquoi il y a une fenêtre et pas une autre - dans le même processus (essentiellement)...

 

D'après ce que j'ai compris, dans la fenêtre Market Overview, les symboles ont maintenant des cours acheteur et vendeur qui ne sont pas désactivés ?

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 lecture d'un fichier binaire à partir d'un indicateur ne fonctionne pas !!! Le code similaire d'EA fonctionne sans problème

 
//+------------------------------------------------------------------+
//|                                                         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 lecture du fichier binaire de l'indicateur ne fonctionne pas, le même code de l'EA fonctionne sans problème !
 
Andrei Kossarev:
La lecture du binaire de l'indicateur ne fonctionne pas, le code similaire de l'EA fonctionne sans problème !

Le ChartScreenShot dans les indicateurs fonctionne très probablement de manière asynchrone.

Raison: