Errores, fallos, preguntas - página 504

 
Vigor:

¿Tiene el optimizador de código limitaciones en cuanto al tamaño del árbol de objetos?

Obtengo un "error de optimización del árbol" en la fase de compilación cuando se aumenta el número de objetos.

P.D. En el modo de depuración se compila.

¿Puede adjuntar un ejemplo del código fuente en el ticket de servicedesk? El código se eliminará después de la verificación.

Lo más probable es que se deba a las funciones largas, pero será mejor que nos envíes el código para que podamos investigarlo nosotros mismos y solucionar el error. Ayudará a muchos comerciantes.

 
Valmars:

En primer lugar, ¿qué sentido tiene descargar a la fuerza el historial en el probador? El propio probador descargará del servidor el historial necesario y accesible, si hay solicitudes en el código u operaciones comerciales de los símbolos necesarios. Como su código está vacío, el probador no necesita simular ticks para otros símbolos, excepto para el símbolo, en el que se realiza la prueba. Y eso es lo que el probador descargó su historia. Y como no hay historia (en el probador), terminamos con 0.

En segundo lugar, aunque se aumente el código llamando a todo el historial para todos los símbolos, es poco probable que la descarga de todo el historial disponible para todos los símbolos tenga éxito, y se producirá un fallo en alguna parte. Dado que el probador utiliza la base de citas del terminal, necesita descargar el historial necesario.
El caso es que cuando el probador intenta simular ticks para otros símbolos, el log empieza a inundarse con mensajes como contiene 0 registros M1, porque no hay historial en esa fecha y el log crece hasta volúmenes inimaginables, y para evitar estos errores, necesito saber la fecha de inicio del historial, y cuando se solicita, la función SeriesInfoInteger(símbolo,0,SERIES_SERVER_FIRSTDATE) devuelve 0
 

¿Puede decirme qué significan los valores de la columna Resultado cuando se selecciona la función objetivo Saldo + Reducción mínima?

 
tol64:

¿Puede decirme qué significan los valores de la columna Resultado cuando se selecciona la función objetivo Saldo + Reducción mínima?

Si miras la Ayuda en el terminal, muchas preguntas desaparecerán porque todo está escrito allí

Criterio de optimización

Un criterio de optimización es un factor determinado, cuyo valor define la calidad del conjunto de parámetros de entrada probados. Cuanto mayor sea el valor del criterio de optimización, mejor se considerará el resultado de la prueba con el conjunto de parámetros dado. Este parámetro puede seleccionarse en la pestaña "Configuración", a la derecha del campo "Optimización".

El criterio de optimización sólo es necesario para el algoritmo genético.

Existen los siguientes criterios de optimización:

  • Saldo máximo: el indicador de optimización es el valor de saldo máximo;
  • Saldo + Rentabilidad máxima: el valor máximo del saldo multiplicado por la rentabilidad es el criterio optimizado;
  • Saldo + Remuneraciónmáxima esperada: el producto del saldo por la remuneración esperada se considera un indicador;
  • Saldo+ detracción mínima - nivel de detracción (100% - detracción)*Se tiene en cuenta el saldo, además del valor del mismo;
  • Saldo+ factor de recuperaciónmáximo: el valor es el producto del saldo por el factor de recuperación;
  • Saldo + ratio deSharpe máximo: el índice es el producto del saldo por el ratio de Sharpe;
  • Criterio de optimizaciónpersonalizado: al seleccionar esta opción, el valor de OnTester() en el Asesor Experto será considerado como el criterio de optimización. Esta opción permite al usuario utilizar cualquier indicador personalizado para la optimización.


 
sergey1294:

Gracias. )) Por alguna razón estaba pensando en el criterio de Disposición Mínima, no en el de Saldo + Disposición Mínima. ))

 
sergey1294:
El caso es que cuando el probador intenta simular ticks para otros símbolos, el log empieza a llenarse de mensajes como contiene 0 registros M1 porque no hay historia en esa fecha y el log crece hasta cantidades inimaginables y necesito saber la fecha de la historia para evitar estos errores, pero al solicitar la función SeriesInfoInteger(símbolo,0,SERIES_SERVER_FIRSTDATE) devuelve 0

Según tengo entendido, antes de realizar la prueba, el probador crea un entorno de mercado para la cuenta conectada (la última conectada si no hay conexión con el servidor), comprueba la sincronización de los datos con el servidor (de nuevo, si hay conexión), carga las cotizaciones que faltan desde la fecha de inicio de la prueba (si hay conexión), crea una secuencia de prueba de cotizaciones para todos los símbolos necesarios, y sólo entonces comienza la prueba. ¿Y si no consigue descargar el historial necesario (por ejemplo, por falta de historial en el servidor o por falta de conexión con el servidor)? ? Te lo dice sinceramente. No, no es necesario.

A continuación, desea obtener la fecha de inicio del historial en el servidor (en el probador). Parece que esta propiedad no está incluida en el entorno de mercado del probador, aunque podría haber sido guardada desde el servidor. ¿Es un error? Creo que no. Después del inicio de las pruebas, el probador no puede acceder al servidor (a través del terminal) para descargar las cotizaciones que necesita. Todo lo que está disponible, ya está cargado por el probador durante la fase de inicialización del proceso de prueba y la secuencia de prueba ya ha sido formada y no puede ser cambiada. En lugar de SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), en tu caso, creo que puedes utilizar SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), debería funcionar en el probador.

 
Renat:

¿Puede adjuntar un ejemplo del código fuente en el ticket de servicedesk? El código se eliminará después de la verificación.

Lo más probable es que se trate de funciones largas, pero será mejor que nos envíes el código para que podamos investigarlo y solucionar el error. Ayudará a muchos comerciantes.

Ok, adjunto 2 opciones con "error de generación de código" y "error de optimización del árbol". La función onInit es realmente larga (~1000 líneas de código generado).

Ticket #217917.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Vigor:

Ok, adjunto 2 variantes con "error de generación de código" y "error de optimización del árbol". La función onInit es realmente larga (~1000 líneas de código generado).

Billete #217917

Gracias, lo investigaremos el lunes.
 
Valmars:

Según tengo entendido, antes de realizar la prueba, el probador crea un entorno de mercado para la cuenta conectada (la última conectada si no hay conexión con el servidor), comprueba la sincronización de los datos con el servidor (de nuevo, si hay conexión), carga las cotizaciones que faltan desde la fecha de inicio de la prueba (si hay conexión), crea una secuencia de prueba de cotizaciones para todos los símbolos necesarios, y sólo entonces comienza la prueba. ¿Y si no consigue descargar el historial necesario (por ejemplo, por falta de historial en el servidor o por falta de conexión con el servidor)? ? Te lo dice sinceramente. No, no es necesario.

A continuación, desea obtener la fecha de inicio del historial en el servidor (en el probador). Parece que esta propiedad no está incluida en el entorno de mercado del probador, aunque podría haber sido guardada desde el servidor. ¿Es un error? Creo que no. Después del inicio de las pruebas, el probador no puede acceder al servidor (a través del terminal) para descargar las cotizaciones que necesita. Todo lo que está disponible, ya está cargado por el probador durante la fase de inicialización del proceso de prueba y la secuencia de prueba ya ha sido formada y no puede ser cambiada. En lugar de SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), en tu caso, creo que puedes utilizar SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), debería funcionar en el probador.


La misma función devuelve cero. También he probadoSERIES_TERMINAL_FIRSTDATE . La conclusión es que la función SeriesInfoInteger no funciona en el probador. Sólo funciona para el instrumento en el que se está ejecutando la prueba. Tal vez tenga alguna idea de cómo ejecutar la prueba para los instrumentos con diferente fecha de inicio del historial cuando se selecciona el intervalo "Todo el historial".
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
De nuevo la hora en el terminal ha saltado a GMT+0 y debería ser GMT+1, ya se ha comentado. Por favor, corríjalo.
Razón de la queja: