[¡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 428

 
keekkenen >>:

боюсь эта конструкция if(Time[0]>iTime(0,1440,60)) всегда будет возвращать истину, т.к. это iTime(0,1440,60) значение будет на 60 баров левее, чем Time[0]..

что показывает тест ?




Planteamiento del problema: Tengo un EA y quiero optimizarlo en las últimas 40 barras (ver hilo) en el probador de estrategias, por ejemplo.

if(Time[0]>iTime(0,1440,60))

Si el tiempo(simulado) se hizo más largo que el tiempo de apertura de la barra 60 en la barra diaria, entonces ejecute la función ¡¿qué está mal?!

 
correcto, entonces debe definir de antemano el momento en que el EA debe comenzar a probar
ya que sabes cuándo debe terminar, entonces haz lo siguiente

digamos que las pruebas terminan 2010.02.10 0:00


hacer un script a partir del siguiente código

#property show_inputs
// время окончания тестировани						
extern string 		endTestTime 		= "2010.02.10 0:00";
// название пары
extern string		symbolTest			= "";
// период на котором ищем нужное время по номеру testBarCount бара относительно времени endTestTime
extern int 			periodTest		   = 0;
// количество баров в прошлое относительно времени endTestTime
extern int 			testBarCount 		= 60;

int init(){
	if ( symbolTest == "") symbolTest = Symbol();
	// искомое время
	Print(TimeToStr(iTime( symbolTest, periodTest,	iBarShift( symbolTest, periodTest,StrToTime( endTestTime)) + testBarCount)));
}
 

este script le permite encontrar el tiempo a partir del cual quiere probar el EA...

establecer un par de variables en el EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

este script le permite encontrar el tiempo a partir del cual quiere probar el EA...

establecer un par de variables en el EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
En el startTime registramos la hora obtenida por el script, y en el endTime registramos la hora introducida en la variable endTestTime del script...
 
costy_ >>:

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

por lo que los 60 bares también se modulan con respecto a los 0 bares modulados

 

Enunciado de la tarea: Tengo un EA y quiero optimizarlo en las últimas 40 barras en el probador de estrategias, por ejemplo, en relación con el tiempo actual. Estas cuarenta barras pueden ser horarias, de 4 horas, diarias o de otro tipo. El probador de estrategias funciona: El intervalo de tiempo en el que funciona se muestra en el panel del probador. Esta forma de ajustar el tiempo de funcionamiento no cumple con la tarea mencionada anteriormente: realizar una prueba de 40 bares. Significa que tenemos que cambiar el Asesor Experto para que no sea el probador el que defina el tiempo de prueba (no se satisfacen sus capacidades), sino el propio código.

Su sugerencia no funcionará, ya que para el probador, la hora que había hace N bares es la hora actual.


T.K.

Para la hora actual, el comprobador calculará la hora de apertura de la barra especificada (hacia atrás) a partir de la hora actual. Es decir, de nuevo no resolverá el problema. Debe ser N barras atrás desde la barra de hoy (momentánea) , no desde la hora actual del probador


Lo he entendido bien.

 
keekkenen >>:
допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

El script es bueno, PERO!!! dará un valor de tiempo que posteriormente debe ser "puntuado" en el panel del probador. Esto no es bueno.... Pero en TF pequeños y con poca cantidad de baro mostrará ese tiempo, que no se puede "marcar" en el probador, porque en el probador se da la fecha y sólo la fecha. Las pruebas se realizan desde las 00:00 de la fecha de inicio hasta las 00:00 de la fecha de finalización. ¡¡¡¡Es imposible especificar la hora, especialmente en los minutos!!!!

 

La sencilla razón es que el probador vive en su propio tiempo, mientras que nosotros y las citas reales vivimos en un tiempo diferente y estos espacios temporales se superponen sólo en nuestra imaginación...


está bien que no puedas poner la hora exacta en el probador, pon el principio del día actual o el día anterior a la hora de inicio - ya es un coste...


Este trozo de código cortará el tiempo extra antes de la hora de inicio de la optimización requerida (lo que establezcamos en los parámetros) y después de la hora de finalización de la optimización...

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

Mira la figura ind. Comenzó a dibujar sólo con un desplazamiento de 60 barras el otro día. A continuación se muestra parte del código. ¿Has probado alguna de las recomendadas? Pruébalo y lo conseguirás.

int start()  {
double stoch1, stoch2;
   int pos = Bars-IndicatorCounted() ;  
//----

if(Time[0]>iTime(0,1440,60)) 
   for(int b=0; b<= pos; b++)
   {    
 
keekkenen >>:

этот кусок кода будет отсекать лишнее время до требуемого времени начала оптимизации (то что мы задаем в параметрах) и после времени окончания оптимизации..

Mi entendimiento es que el EA irá al script por los datos, las barras de vuelta deben ser establecidas en el script.

¡И! Lo siento, ¿podría publicar el código completo del script? Para mi vergüenza, nunca he escrito un guión en mi año y medio de MQL.