Erros, bugs, perguntas - página 2613

 
Vladimir Pastushak:

Pergunta sobre GetMicrosecondCount()

E no final do vídeo, o registo impresso mostra

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

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

GQ 0 22:58:55.914 Teste (EURUSD,M15) 67867 A diferença entre este valor e o anterior é de 9 segundos, mas GetMicrosecondCount() mostra 67867 msec

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

 
Vladimir Pastushak:

E também no final do vídeo o registo impresso mostra

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

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

GQ 0 22:58:55.914 Teste (EURUSD,M15) 67867 A diferença entre este valor e o anterior é de 9 segundos, mas GetMicrosecondCount() mostra 67867 msec

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

overflow...os balcões devem ser comparados modulo

 
Vladimir Pastushak:

E também no final do vídeo o registo impresso mostra

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

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

GQ 0 22:58:55.914 Teste (EURUSD,M15) 67867 A diferença entre este valor e o anterior é de 9 segundos, mas GetMicrosecondCount() mostra 67867 msec

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

Infelizmente não mostrou o seu código completo.

Como vai discutir a medição de milionésimos de segundo, apresentando apenas vídeo e ignorando completamente o código?


Se definitivamente quiser discutir a precisão de uma medição de um temporizador de microssegundo, então execute o exemplo:

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

Não há erro de medição.

GetMicrosecondCount() funciona no QueryPerformanceCounter do sistema, e a referência à hora de início da aplicação é incorporada por conveniência.

Procure por um erro no seu código de tempo.

 
MetaQuotes Software Corp.:

Infelizmente, ainda não mostrou o seu código completo.

Como é que vai discutir medir milionésimos de segundo apresentando apenas um vídeo e ignorando completamente o código?


Se definitivamente quiser discutir a precisão da medição do temporizador de microssegundos, então execute o exemplo:

Não há erro de medição.

GetMicrosecondCount() funciona no QueryPerformanceCounter do sistema, e a referência à hora de início da aplicação é colocada por conveniência.

Procure erros no seu próprio código de medição do tempo.

Utilizei a biblioteca padrão. Vou publicar o código um pouco mais tarde, mas não há lá nada de novo.

 

Não seria uma má ideia manter a escolha da moeda e do país:

 
Após o último teste de atraso de actualização em modo de teste visual, durante 30-60 segundos, atira o gráfico para o início da história. Há um bug com a criação de objectos, por exemplo, criar um botão, posição em primeiro plano, criar uma posição de linha em segundo plano, mas se os objectos se cruzarem, quando se tenta premir o botão, a linha em primeiro plano, embora visualmente o botão em primeiro lugar. Se segurar o rato sobre o botão, aparece um menu com o nome da linha criada (está em segundo plano em relação ao botão).
 

Gostaria de poder ver os resultados da optimização para a frente antes de estar concluída.

Gostaria que estes resultados fossem exibidos da mesma forma que os resultados da optimização principal - imediatamente na janela. E agora não existe tal janela!

É estranho - porque há uma janela e não outra - no mesmo processo (essencialmente)...

 

Tanto quanto sei, na janela Visão Geral do Mercado, os símbolos têm agora preços de compra e venda que não estão desligados?

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

A leitura de um ficheiro binário de um indicador não funciona!!! O código semelhante da EA funciona sem 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));
}
A leitura do ficheiro binário do indicador não funciona, o mesmo código da EA funciona sem problemas!