Erros, bugs, perguntas - página 2050

 

Pode dizer-me se existe um servidor de demonstração MT4 e MT5 a funcionar com citações de fim-de-semana?

 
Kirill Belousov:

Existe um servidor de demonstração MT4 e MT5 em funcionamento com citações nos fins-de-semana?

O servidor demo é um servidor demo porque a negociação não é feita com dinheiro real mas com "demo" :), e tudo o resto (assim como o tempo das cotações) é quase como na vida real.

 
Kirill Belousov:

Pode dizer-me se existe um servidor de demonstração MT4 e MT5 a funcionar com citações de fim-de-semana?

Não há citações durante o fim-de-semana.
Pode emular a chegada das citações.
 

Desligue o MT5 (proxy da esquerda, por exemplo) e execute um EA como este

void OnInit()
{
  Print("Hello World!");
}

A impressão em log será apenas cinco segundos após o início do assessor - BAG.


Executar este indicador offline

#property indicator_chart_window

#property indicator_buffers 0
#property indicator_plots 0

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

void OnInit()
{
  const datetime LastBar = (datetime)SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE);

  Print(LastBar);
  Print(Bars(_Symbol, PERIOD_CURRENT, LastBar - 24 * 3600, LastBar)); // 0
  Print(GetLastError());                                              // ERR_HISTORY_NOT_FOUND
}

Ficamos aborrecidos nos bares. O mesmo aborrecimento acontecerá com repetidas chamadas, por exemplo, no OnTimer. Mas se telefonar aos bares do Expert Advisor, tudo irá funcionar. No caso do indicador, trata-se claramente de um bug.

2017.10.22 23:35:40.678 Terminal        Alpari Limited MT5 x64 build 1653 started (Alpari Limited)
2017.10.22 23:35:40.678 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K  @ 3.50 GHz, RAM: 11310 / 16301 Mb, HDD: 827 / 30000 Mb, GMT+02:00
A explicação na documentação não explica nada

Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, то функция вернет нулевое значение.

O envio do pedido de actualização das séries cronológicas com o mesmo período, como o indicador que chama a actualização, é extremamente indesejável. A indesejabilidade do pedido do mesmo período-símbolo que o indicador tem deve-se ao facto de a actualização dos dados históricos ser realizada no mesmo fio que executa o indicador. Portanto, há uma grande probabilidade de um confronto.

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Características da linguagem mql5, subtilezas e truques

fxsaber, 2017.10.17 15:07

As matrizes descendentes não são capazes de se converterem em matrizes de antepassados. Elemento por elemento, por outro lado, sim. Há uma limitação de ArrayCopy nisto, o que seria bom remover.

Algo está errado com a língua nesta situação

struct RATES : public MqlRates {};

void f1( RATES& ) {}

void f2( MqlRates& ) {}
void f2( MqlRates &[] ) {}

void OnStart()

{
  MqlRates a = {0};  
  
  f1(a); // 'a' - parameter conversion not allowed
  
  RATES b[1] = {0};
  
  b[0] = a; // no problem
  a = b[0]; // no problem
  
  f2(b[0]); // no problem
  f2(b);    // 'f2' - no one of the overloads can be applied to the function call
}


As cordas amarelas e vermelhas contradizem-se uma à outra. Se a herança de uma estrutura estiver em progresso e o construtor, o operador de atribuição e os campos não forem alterados, a transformação do descendente em pai e vice-versa deve ocorrer sem problemas. E as linhas amarelas provam-no. No entanto, nalgumas situações, ocorrem chatices - as vermelhas.
 
fxsaber:

Algo de errado com a língua nesta situação

O meu compilador deu


 
Kirill Belousov:

O meu compilador deu

Sim, corrigiu a mensagem.
 
   int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);
   int cur_tim=(int)TimeCurrent();

   RefreshRates();
   if(FileGetInteger(aFileName,FILE_EXISTS)==1)
      if(tim>0)
         if((cur_tim-tim)>120) 
           {
            Print(" ttt   "+TimeToString(cur_tim)+"  "+TimeToString(tim));
            FileDelete(aFileName);
            Print("Обновление файла ");
            return false;
           }

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); não actualiza o tempo.

Eu crio um ficheiro e quero apagá-lo após 60 segundos, o ficheiro é apagado eint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); retorna a hora do primeiro ficheiro após compilação. Vejo na janela do Windows que o ficheiro é apagado e criado com uma nova hora.

RefreshRates não ajuda...

 

int tim=(int)FileGetInteger(aFileName,FILE_MODIFY_DATE);

Funciona correctamente

 
Vladimir Pastushak:

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); não actualiza o tempo.

Eu crio um ficheiro e quero apagá-lo após 60 segundos, o ficheiro é apagado eint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); retorna a hora do primeiro ficheiro após compilação. Vejo na janela do Windows que o ficheiro é apagado e criado com uma nova hora.

RefreshRates não ajuda...

Onde está o código de criação do ficheiro?

Fecha o ficheiro antes de o apagar?

O que é que a RefreshRates tem a ver com isto?

Estamos a falar de um cinco ou de um quatro?