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

 
Alexey Viktorov:
A hora atual de 17:08 mostra 33. Portanto, o número do bar com horário de 01:00 será 32.
datetime t=StringToTime("01:00");

Esta não é a solução correta. Se você iniciar o teste às 00:00, esta variante dá 0 barras, e deve haver 46 M30 barras antes da 01:00 hora mais próxima.

 
Nauris Zukas:

Decisão equivocada. Se você iniciar o teste às 00h00, esta variante produz 0 barras, e deve haver 46 M30 barras antes da 01h00 mais próxima.

Eu lhe dei uma maneira de pensar, e você deve saber como fazer o bar mais próximo à 01:00 às 00:59 na ata. Não há nada de difícil nisso.

 
Alexey Viktorov:

Eu lhe dei uma linha de pensamento, e como fazer o bar mais próximo à 01:00 às 00:59 da ata é com você. Não há nada de difícil nisso.

Em qualquer caso, você terá que usar o laço e procurar pela hora mais próxima, não vejo outra maneira.

 
Alexey Viktorov:
O único problema é que eu nunca encho minha célula de memória com coisas desnecessárias como o que o valor obtido será igual, dada uma barra com um tempo especificado ou menos por 1. Eu apenas verifico todas as vezes.


Não tenho idéia de como encontrar o tempo especificado mais próximo para barras sem um ciclo. Se não há nada de complicado nisso, você pode me mostrar a função?

 

Caros especialistas, você poderia aconselhar como puxar os resultados dos testes para um arquivo em mt-4?

para processamento posterior, conforme descrito aqui https://www.mql5.com/ru/articles/1467?

Автоматическая оптимизация торгового робота в процессе реальной торговли
Автоматическая оптимизация торгового робота в процессе реальной торговли
  • 2007.04.16
  • Igor Malcev
  • www.mql5.com
В статье описана и представлена библиотека функций, позволяющая проводить оптимизацию входных параметров советника, запуская оптимизацию непосредственно из советника.
 
Nauris Zukas:


Não tenho idéia de como encontrar o tempo especificado mais próximo para barras sem um ciclo. Se não há nada de complicado nisso, você pode me mostrar a função?

..... apenas sem palavras....

Como é difícil adivinhar que se o tempo é menor que o tempo que você está procurando, então você tem que subtrair o tempo que você está procurando em 24 horas.

 string st = "1:00";// можно и так писать "01:00"
 datetime t = StringToTime(st);

 if(TimeCurrent() < t)
  {
   MqlDateTime mqlDateTime; 
   TimeToStruct(t, mqlDateTime);
   mqlDateTime.day -= 1;
   t = StructToTime(mqlDateTime);
  }
 int b = Bars(_Symbol, PERIOD_M30, t, TimeCurrent());

Feito sem levar em conta as saídas e verificações de possíveis erros de execução. Outras execuções são possíveis, e é por isso que tento não escrever códigos de exemplo. Hoje decidi fazer isso, amanhã posso encontrar outra variante mais conveniente.

 
Alexey Viktorov:

Como é difícil adivinhar que se o tempo é menor que o tempo que você está procurando, então você tem que subtrair o tempo que você está procurando em 24 horas.

É difícil de adivinhar por causa disso:

Alexey Viktorov:

Feito sem levar em conta fins de semana e verificações de possíveis erros de execução.

Quanto mais difícil deve ser o código para se obter um resultado desejável sem erros no final! Há fins de semana e feriados no código. Obrigado por dicas e exemplos, eu aprendi algo novo, vai dar jeito em algum lugar, mas até agora eu vejo que minha versão é a mais fácil e mais confiável.

 
Nauris Zukas:

É difícil de adivinhar só por causa disso:

Quanto mais complicado deve ser o código para se obter o resultado desejado sem erros no final! Há fins de semana e feriados quando o mercado abre em um horário diferente. Obrigado por dicas e exemplos, aprendi algo novo, com certeza será útil, mas até agora vejo que minha versão é a mais fácil e mais confiável.

Por que não? E essa opção tem direito à vida. E isso até me interessou. Com algumas correções, conseguimos a função que retorna o número de barras de um determinado tempo e período.

int findBar(string strTime, ENUM_TIMEFRAMES period = PERIOD_CURRENT)
 {
  MqlDateTime mqlTime, mqlFindTime;
  TimeToStruct(StringToTime(strTime), mqlFindTime);
  datetime arrTime[];
  int copy = PeriodSeconds(PERIOD_D1)/PeriodSeconds(period);
  CopyTime(_Symbol, period, 0, copy, arrTime);
  ArraySetAsSeries(arrTime, true);
   for(int i = 0; i < copy; i++)
    {
     TimeToStruct(arrTime[i], mqlTime);
      if(mqlTime.hour == mqlFindTime.hour && mqlTime.min <= mqlFindTime.min)
      return(i);
    }
  return(-1);
}/********************************************************************/

.

 
Alexey Viktorov:

Por que não? E essa opção tem direito à vida. E isso até me interessou. Com algumas correções, a função retorna o número de barras do tempo e do período especificados.

.

Muito obrigado!
Você mencionou "célula de memória", meu conhecimento sobre este assunto é até agora limitado. Tanto quanto sei, isso afeta a velocidade dos testes do Expert Advisor? É de alguma forma medido ou é apenas determinado pela velocidade dos testes?

 
Nauris Zukas:

Muito obrigado!
Você mencionou "célula de memória", meu conhecimento é limitado no momento. Tanto quanto eu entendo, isso afeta a velocidade dos testes do Expert Advisor? É de alguma forma medido ou é apenas determinado pela velocidade dos testes?

Eu estava falando de meu próprio chip de memória. :)))

Sobre não se lembrar de tais bagatelas, que podem ser facilmente checadas, esclarecidas, feitas conforme necessário e esquecidas novamente ao escrever o código.