[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 426

 
ikatsko >>:

Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.


Хотя:

datetime TimeCurrent( )

Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Замечание: при тестировании последнее известное время сервера моделируется


Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?

¿Te refieres a establecer la hora de la negociación del día?

Si es así

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=8;
extern int        окончание=20;


//B start

if(Hour()>= начало&&Hour()< окончание)//если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >>:

Вы имеете ввиду задавать время торгов внутри дня?

Если так то


Me gustaría optimizar los parámetros de un EA en marcos temporales cortos en un pequeño periodo de tiempo cercano a la hora actual. Por otro lado, el Probador de Estrategias permite establecer la fecha de inicio y finalización del proceso de optimización. Cuando el TF es de 15 minutos (por ejemplo), entonces en un día (y este es el mínimo que permite el probador para establecer) habrá 96 barras. Y creo que es mucho. Me gustaría que este TF se optimizara en las últimas 2 horas, es decir, en 8 barras por ejemplo.


He insertado dicho fragmento en el EA:

extern int History=100; //Historia en barras, sobre la que trabaja el Asesor Experto
StartDateTime=HoraActual()-Historia*Periodo()*60;
if(TimeCurrent()<StartDateTime) // La hora de inicio no ha llegado
{
Alert("La hora de inicio no ha llegado. EA no funcionó",": ",Symb,", ",Period());
return; // Salir de start()

}

Esperaba que el EA en el probador de estrategias no funcionara antes de StartDateTime. ¡Pero no!

 
ikatsko >>:

Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=22;
extern int        окончание=0;


//B start

if(Hour()>= начало&&Hour()< окончание)//на интервале  меж 22:00 - 00:00
{
//условия
}

int Hora( )
Devuelve la hora actual (0,1,2,...23) de la última hora conocida del servidor al inicio del programa (este valor no cambia durante la ejecución del programa).

Nota: al realizar las pruebas, se simula la última hora conocida del servidor.


El probador es compatible con M1 TF, no lo vincules a las barras, vincula al tiempo, tal vez también lo necesites.

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

La frase: al probar, se simula la última hora conocida del servidor está presente y en TimeCurrent( ) sin embargo no funciona. Su variante es buena, pero hay que comprobar si funciona... En segundo lugar, al cambiar de TF es necesario cambiar un trozo de código o debe reconocer en qué TF funciona, para percibir adecuadamente los números "inicio" y "fin". En tercer lugar, creo que es mucho más conveniente establecer el número de baro hacia atrás - no hay necesidad de calcular el "inicio" manualmente. En MQL nos ocupamos de las barras. Y lo último: ¿cuál es la desventaja de este código? (Excepto que no funciona en el probador de estrategias. Y esa es mi pregunta)

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

extern int History=100; //История в барах, на которой работает советник
StartDateTime=TimeCurrent()- History*Period()*60;//...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert("TimeCurrent()    "+TimeCurrent()+" < StartDateTime    "+ StartDateTime);//...проверим соотношение datetime 

if(TimeCurrent()< StartDateTime) // Время старта не наступило...
{
Alert("Время старта не наступило. Эксперт не работает.",": ", Symb,", ",Period());
return; // Выход из start()

} 
 
costy_ >>:

Algo así como:

datetime es la fecha y la hora, un entero sin signo que contiene el número de segundos transcurridos desde las 0 horas del 1 de enero de 1970.

и

Los datos de tipo color y fecha se representan como enteros. Los tipos enteros, junto con los tipos de punto flotante, se denominan tipos aritméticos (numéricos).

Si no, cómo salir de ella.

No obstante, gracias por el consejo sobre el formato de los números. Hay una dirección de búsqueda. Si todavía hay una solución lista será agradecido

 

En realidad, es mejor utilizar Time[0] en lugar de TimeCurrent() en el probador, me pareció que TimeCurrent() funcionaba antes en el probador...

y ahora TimeCurrent() en el probador (o no en el probador) dará muy probablemente la hora en que se produjo la última cita...


en este caso funcionará

extern int History=100; // Historia en barras, sobre la que trabaja el Asesor Experto
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // La hora de inicio no ha llegado
{
Alert("La hora de inicio no ha llegado. EA no funciona.",": ",Symb,", ",Period());
return; // Salir de start()
}

 
ikatsko >>:

Вроде как:

datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.

и

Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.

А если нет, то как выйти из этого положения.

Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен

Pues bien, en el comentario anterior, el error se mostraba a través de la alerta.

La ayuda dice "Nota: al probar, se simula la última hora conocida del servidor", pero si no se simula todas las preguntas al editor de la ayuda.

Lo has comprobado, has encontrado el error...

Sólo usted conoce la solución, ya que no conocemos la dirección posterior de la lógica.

No entiendo por qué hay tanto texto

StartDateTime=HoraActual()-Historia*Periodo()*60;

cuando todo se puede hacer mucho más fácil?

 
costy_ >>:

Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.

Estoy completamente de acuerdo con tu solución en la respuesta anterior: ¡es una incompatibilidad de formato de datos! La petición de una solución estándar se reduce a resolver el problema de la conversión de formatos. Pero obviamente MQL4 no tiene esas opciones. Por ejemplo, hoy es el 43º día del año, es decir, la 43ª barra en el marco temporal diario desde el comienzo del año. Supongamos que quiero optimizar mi Asesor Experto en 60 barras. Significa que el probador debe empezar a trabajar con 365-(60-43)=348º día (barra) del año anterior. Es decir, deberíamos tomar TimeDayOfYear(TimeCurrent()) (¡es un int!) y compararlo con 348. Evidentemente, también hay que tener en cuenta el valor del año (el año pasado). En definitiva, creo que lo tengo. Sólo tenemos que aplicarlo. Será mucho más difícil en TFs pequeños, cuando uno tiene que probar un gran número de barras, que (por ejemplo, 5 minutos) irán más allá de la hora anterior, o tal vez el día anterior.

 

Todo tu problema está en el planteamiento del problema, acláralo a los demás... Sinceramente no entendí a partir de qué hora necesitas hacer la prueba...

Si tienes que empezar con una barra de 60, empieza con 60 barras.

int startTime = iTime(NULL,PERIOD_D1, N); // N - número de la barra desde el momento actual en el marco temporal diario

Razón de la queja: