Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1007

 
Alexey Viktorov:

Tempo menos tempo dividido por PeríodoSegundos()

por isso pode ser a duração errada na transição de sexta-feira para segunda-feira (ou se houver barras perdidas na história)

é melhor ler o ponto de tempo e depois definir as barras

datetime time1=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,0);
datetime time2=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,1);

int bar1=iBarShift(_Symbol,_Period,time1);
int bar2=iBarShift(_Symbol,_Period,time2);
 
Taras Slobodyanik:

por isso pode ser a duração errada na transição de sexta-feira para segunda-feira (ou se houver barras perdidas na história)

é melhor ler o tempo dos pontos e depois identificar as barras

De acordo. Não me incomodou nem ao meu cérebro. Então é melhor levar o número de barras entre as datas.

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Esta parte diz erro



Você pode me dizer como iniciar o robô?


 
Ivan Butko:

Esta parte escreve um erro

Como faço para o robô começar?

Aqui a variável é declarada e imediatamente é dividida:

double spred = spred/Point*(tot-1); 

O erro mostra que o compilador trata esta variável (spred) como não declarada. Isto também não é bom, pelo menos porque ela (variável) não é inicializada - como não éuma variável global, pode ter um valor indefinido...

Tente declará-lo mais cedo e atribuir um valor a ele
 
Yevhenii Levchenko:

Aqui uma variável é declarada e imediatamente é compartilhada:

O erro mostra que o compilador trata esta variável (spred) como não declarada. Isto também não é bom, pelo menos porque ela (a variável) não é inicializada - como não é uma variável global, pode haver um valor indefinido...

Tente declará-lo mais cedo e atribuir um valor a ele

Eugene, do fundo do meu coração!
Está ligado, obrigado.

 

O que fazer se na MQL5 ...

if(BarsCalculated(handle) == -1)

... já passou cerca de um minuto e o problema é o mesmo. Por que tanto tempo?


Erro 4806 - Dados solicitados não encontrados ... - ...como faço para que minha EA a encontre?

 
Ivan Butko:
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Esta parte diz erro



Você pode me dizer como iniciar o robô?


Linha 61, qual é a linha?
 

Como eu pego o erro de memória?


O que poderia estar causando esta mensagem em primeiro lugar?


Eu escrevi um programa de cerca de 20 mil linhas. Eu tenho muitas classes, matrizes e estruturas diferentes.

Aproximadamente uma vez a cada dois ou três dias, a mensagem "fora da memória" aparece.

Eu não sei como rastrear qual função é responsável pelo vazamento de memória.

 
Sergey Likho:

Como eu pego o erro de memória?


O que poderia estar causando esta mensagem em primeiro lugar?


Eu escrevi um programa de cerca de 20 mil linhas. Eu tenho muitas classes, matrizes e estruturas diferentes.

Aproximadamente uma vez a cada dois ou três dias aparece a mensagem de falta de memória.

Não sei como capturá-lo, qual função é responsável pelo vazamento de memória.

Certifique-se de que cada novo tenha sua própria exclusão

Ou seja, somente através da leitura cuidadosa de seu código. Para facilitar a leitura e torná-la mais divertida, você pode comentá-la :-)

Também é uma boa idéia escrever roteiros de teste para cada classe e verificar vazamentos dentro das classes dessa forma.

 
Maxim Kuznetsov:

certificar-se de que cada novo tenha sua própria eliminação

Ou seja, apenas pela leitura cuidadosa do código. Para facilitar e tornar a leitura mais divertida, você também pode comentar :-)

É também uma boa idéia escrever scripts de teste para cada classe e verificar vazamentos dentro das classes dessa maneira.

Novo, apagar não são usados. Os elementos de classe são definidos no início e eu não os recrio.

Na maioria das vezes trabalho com arrays.


O que sãoscripts de caso de teste ?