Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 255

 
Alexey Viktorov:
La hora actual de 17:08 muestra 33. Así, el número de compás con una hora de 01:00 será 32.
datetime t=StringToTime("01:00");

Esta no es la solución correcta. Si se inicia la prueba a las 00:00, esta variante da 0 barras, y debería haber 46 barras M30 antes de la hora 01:00 más cercana.

 
Nauris Zukas:

Decisión equivocada. Si se inicia la prueba a las 00.00 horas, esta variante produce 0 barras, y debería haber 46 barras M30 antes de las 01.00 horas más cercanas.

Te he dado una forma de pensar, y deberías saber cómo hacer la barra de la 01:00 más cercana a las 00:59 en los minutos. No hay nada difícil en ello.

 
Alexey Viktorov:

He dado la dirección del pensamiento, y cómo hacer que la barra de 01:00 más cercano a las 00:59 en los minutos es hasta usted. No hay nada difícil en ello.

En cualquier caso tendrás que usar el bucle y buscar la hora más cercana, no veo otra forma.

 
Alexey Viktorov:
El único problema es que nunca lleno mi celda de memoria con cosas innecesarias como lo que el valor obtenido será igual, dada una barra con un tiempo especificado o menos por 1. Sólo compruebo cada vez.


No tengo ni idea de cómo encontrar el tiempo especificado más cercano para las barras sin ciclo. Si no es nada complicado, ¿puede mostrarme la función?

 

Estimados expertos, ¿podrían aconsejarnos cómo extraer los resultados de las pruebas a un archivo en mt-4?

para su posterior procesamiento como se describe aquí https://www.mql5.com/ru/articles/1467?

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


No tengo ni idea de cómo encontrar el tiempo especificado más cercano para las barras sin ciclo. Si no es nada complicado, ¿puede mostrarme la función?

..... solo sin palabras....

Es difícil adivinar que si la hora es menor que la que se busca, hay que restar 24 horas a la hora que se busca.

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

Realizado sin tener en cuenta las salidas y comprobaciones de posibles errores de ejecución. Otras ejecuciones son posibles, por lo que intento no escribir códigos de ejemplo. Hoy he decidido hacerlo, mañana puede que encuentre otra variante más conveniente.

 
Alexey Viktorov:

Es difícil adivinar que si la hora es menor que la hora que se busca, entonces hay que restarle 24 horas a la hora que se busca.

Por ello, es difícil de adivinar:

Alexey Viktorov:

Realizado sin tener en cuenta los fines de semana y las comprobaciones de posibles errores de ejecución.

¡Cuánto más difícil debe ser el código para obtener un resultado deseable sin errores al final! Hay fines de semana y días festivos en el código. Gracias por los consejos y ejemplos, he aprendido algo nuevo, me vendrá bien en algún sitio, pero de momento veo que mi versión es la más fácil y fiable.

 
Nauris Zukas:

Es difícil de adivinar sólo por eso:

¡Cuánto más complicado debe ser el código para obtener el resultado deseado sin errores al final! Hay fines de semana y días festivos en los que el mercado abre a una hora diferente. Gracias por los consejos y los ejemplos, he aprendido algo nuevo, sin duda será útil, pero hasta ahora veo que mi versión es la más fácil y fiable.

¿Por qué no? Y esa opción tiene derecho a la vida. Y hasta me interesó. Con algunas correcciones, obtuvimos la función que devuelve el número de barra de un tiempo y periodo especificados.

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 qué no? Y esa opción tiene derecho a la vida. Y hasta me interesó. Con algunas correcciones, la función devuelve el número de barra de la hora y el periodo especificados.

.

¡Muchas gracias!
Has mencionado la "célula de memoria", mis conocimientos sobre este tema son hasta ahora limitados. Según tengo entendido, ¿afecta a la velocidad de las pruebas del Asesor Experto? ¿Se mide de alguna manera o sólo se determina por la velocidad de las pruebas?

 
Nauris Zukas:

¡Muchas gracias!
Has mencionado la "célula de memoria", mis conocimientos son limitados por el momento. ¿Afecta, según tengo entendido, a la velocidad de las pruebas del Asesor Experto? ¿Se mide de alguna manera o sólo se determina por la velocidad de las pruebas?

Estaba hablando de mi propio chip de memoria. :)))

Sobre no recordar tales nimiedades, que pueden ser fácilmente revisadas, aclaradas, hechas como sea necesario y olvidadas de nuevo al escribir el código.

Razón de la queja: