Ошибки, баги, вопросы - страница 2613

 
Vladimir Pastushak:

Вопрос по GetMicrosecondCount()

И еще в конце видео лог принтов показывает 

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  Разница между этим значением и предыдущим 9 секунд, но GetMicrosecondCount() показывает 67867 мк/сек

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

 
Vladimir Pastushak:

И еще в конце видео лог принтов показывает 

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  Разница между этим значением и предыдущим 9 секунд, но GetMicrosecondCount() показывает 67867 мк/сек

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

переполнение..счётчики надо сравнивать по модулю

 
Vladimir Pastushak:

И еще в конце видео лог принтов показывает 

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  Разница между этим значением и предыдущим 9 секунд, но GetMicrosecondCount() показывает 67867 мк/сек

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

К сожалению, вы не показали своего полного кода.

Как вы собрались обсуждать замер миллионных долей секунды, представляя лишь видео и полностью игнорируя код?


Если вы точно хотите обсудить точность замера микросекундного таймера, то запустите пример:

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

Ошибки замеров нет.

GetMicrosecondCount() работает на системном счетчике QueryPerformanceCounter, а отсылка к времени старта приложения заложена для удобства.

Поищите ошибку в своем коде замера времени.

 
MetaQuotes Software Corp.:

К сожалению, вы не показали своего полного кода.

Как вы собрались обсуждать замер миллионных долей секунды, представляя лишь видео и полностью игнорируя код?


Если вы точно хотите обсудить точность замера микросекундного таймера, то запустите пример:

Ошибки замеров нет.

GetMicrosecondCount() работает на системном счетчике QueryPerformanceCounter, а отсылка к времени старта приложения заложена для удобства.

Поищите ошибку в своем коде замера времени.

Я использовал стандартную библиотеку. Код скину чуть позже, но там ничего нового нет.

 

Не плохо было бы сохранять выбор валюты и страны:

 
После последнего обновления лагает тестер в режиме визуального тестирования, секунд на 30-60 зависает, пролистывает график в начало истории. Есть баг с созданием объектов, например создаём кнопку, положение на переднем плане, создаём линию положение на заднем плане, но если объекты пересекаются, при попытке нажать кнопку ,на переднем плане линия, хотя визуально кнопка на первом месте. Если задержать мышь на кнопке, всплывающее меню с именем созданной линии (она на заднем плане по отношению к кнопке).
 

Хотелось бы иметь возможность видеть результаты форвард оптимизации ранее, чем она завершена. 

Хотелось бы, чтобы эти результаты отображались также, как и результаты основной оптимизации - сразу в окне. А сейчас этого окна и вовсе нет!

Это странно - почему одно окно есть, а другого- в том-же (по сути) процессе нет... 

 

Насколько я понимаю, в окне "Обзор рынка" у символов теперь цены бид и аск неотключаемые?

Билд 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));
}

Не работает чтение бинарного файла из индикатора!!! Аналогичный код из советника работает без проблем

 
//+------------------------------------------------------------------+
//|                                                         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));
}
Не работает чтение бинарного файла из индикатора, аналогичный код из советника работает без проблем!