Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Aquí está el código para leer de un archivo:
¿Por quéFileReadString() ?
Puedes usarFileReadArray(), entonces no necesitas hacer un bucle.
¿Por quéFileReadString() ?
¿No sería mejor utilizarFileReadArray(), entonces no hay necesidad de hacer un bucle.
Rosh:
Escribir los valores de la equidad en un archivo. A continuación, construya el indicador según estos valores. Sin embargo, el archivo de datos tiene que ser movido manualmente. Los archivos se escriben en la carpeta Nombre_del_agente/MQL5/Archivos durante la prueba.
Sólo ahora me he dado cuenta de lo complicado que es todo.
Pero está claro que manualmente no es la solución a este problema, ya que estamos hablando de cientos de pruebas.
Y así parece: al principio hay datos disponibles, pero -¡oh, milagro! - ¡el programa está diseñado de tal manera, que no hay posibilidad de guardarlos de alguna manera y en algún lugar hasta que se extraigan y se usen programáticamente!
No soy un programador profesional, pero esta situación es difícil de comprender.
Enorme documentación..., vastas posibilidades en la construcción, al parecer, de todo y de todos..., gestión de la memoria, OOP, y aquí, en lo fundamentalmente simple y críticamente necesario (que, espero, ya he explicado) - un punto muerto.
...Y sin embargo... ¡Pregunta!
¿No existe la posibilidad de escribir en modo de prueba en algunas matrices de programa forzadas, que posteriormente podrían utilizarse para construir un indicador?
¿Incluyendo la posibilidad de pasar a través de una variable global un puntero a dicha matriz?
¿Y cuál es el problema del almacenamiento y la transferencia de datos entre la fase de pruebas y el momento del trabajo principal, no en términos de aplicación actual, sino en principio?
Renat mencionó cientos de megabytes de datos, pero, en primer lugar, por qué deberíamos recargar siempre los datos cuando podemos prever esa posibilidad sólo por deseo explícito del programador y, en segundo lugar, la cantidad de datos en términos de la tarea que nos ocupa es mucho menor y asciende a unos miles de dígitos.
Una vez más declaro que desde el punto de vista del usuario, la opción de transferencia manual de archivos durante las pruebas múltiples (y el mercado, debido a su complejidad, requiere de pruebas múltiples) es absolutamente inconveniente y poco prometedor, mientras que estoy dispuesto a discutir con cualquiera que la dinámica de los indicadores de la cuenta en su correlación directa con la dinámica de los precios en el historial de pruebas es uno de los más importantes en general.
¿Cuál es la cuestión de la ampliación de la visibilidad en el modo principal de las operaciones de apertura de archivos en modo de lectura a la carpeta de los archivos del probador? ¿Cuál sería incluso una hipotética amenaza en esto?
¿Y cuál es el problema de no poder forzar el almacenamiento de los datos necesarios entre el modo principal y el modo de prueba en la RAM?
Utilice la dll para escribir y leer archivos de carpetas arbitrarias en el disco. Simplemente mueve las funciones de escritura y lectura de archivos a la dll y listo.
...Y sin embargo... ¡Pregunta!
¿No existe la posibilidad de escribir en el modo de prueba en algunas matrices de programa forzadas y estrechas, que posteriormente podrían utilizarse para construir un indicador?
Intente establecer la bandera FILE_COMMON al abrir el archivo - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Identificador
Valor
Descripción
FILE_COMMON
4096
Ubicación de un archivo en la carpeta compartida de todos los terminales cliente. Esta bandera se utiliza al abrir archivos (FileOpen()), al copiar archivos (FileCopy(), FileMove()) y al verificar la existencia de archivos (FileIsExist())
Intente especificar la bandera FILE_COMMON al abrir un archivo - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Ejecute este script y vea dónde escribe
joo, Rash, ¡gracias!
La opción de la carpeta compartida parece más... integrado.
Lo único que sorprende es que al ejecutar este código, dentro del indicador aparece un mensaje de escritura fallida, aunque la escritura en sí se sigue realizando. Además - sigue siendo una pregunta abierta cómo y cuándo exactamente es mejor escribir los datos (por separado para cada garrapata, pero es intensivo en recursos, o al final - toda la matriz, pero con la escritura de la matriz algo no está muy claro todavía y, además, es difícil de entender cómo OnCalculated trabajará en este caso para su extracción - en el segundo, resulta que el pasaje ya después de las pruebas?)
Y otra pregunta, algo fuera de tema, pero sobre la cuestión ya tocada ayer.
Insertado en OnTick y en OnCalculated:
pero tras la finalización de la prueba, a pesar de la presencia de objetos relacionados con las posiciones de apertura y cierre (flechas y líneas - visibles en Terminal: Gráficos>Objetos>Lista de objetos), el valor de retorno es 0 por alguna razón.Es mejor escribir en el archivo lo menos posible, por lo que es mejor hacerlo como una matriz de enteros. Los valores deben medirse con una frecuencia no superior a un minuto, ya que de lo contrario habrá problemas para visualizarlos en el gráfico (además de que se consumirán muchos recursos). Es decir, al final de la carrera. Pero también es posible:
El algoritmo es el siguiente:
1) Ejecute el experto en el probador.
2) Medir el valor de interés.
3) Se registra el valor en el archivo.
4) Escribir true en un archivo separado, lo que significa que registramos un nuevo valor.
5) Iniciar un bucle infinito, la condición de salida es falsa en el archivo de banderas.
6) En un gráfico separado el script lee el archivo con la bandera, si hay un nuevo valor, dibuja un riesgo en el gráfico, escribe false en el archivo.
Esto es aproximadamente lo que parecerá el modo visual de las pruebas en el probador.
Espere un poco, el concurso terminará, tal vez se presenten soluciones más elegantes y hermosas.
joo, Rash, ¡gracias!
La opción de la carpeta compartida parece más... integrado.
Lo único sorprendente es que al ejecutar este código dentro del indicador muestra un mensaje de escritura fallida, aunque la escritura en sí se realiza.
No tengo nada de esa salida. Pruébalo:
No entiendo nada de eso. Deberías probarlo:
Rosh
No puedo entender cuál es la razón, pero a diferencia de mis indicadores, cuando lo inicio con el tuyo, me sale un mensaje:Ahora he hecho un simple Asesor Experto similar, basado en su código, que debe escribir todos los valores de la equidad en el archivo (he cambiado sólo la salida de todos los valores, incluyendo cero bytes escritos, hizo las variables globales, y dividió la apertura del archivo y la escritura en OnInit y OnTick), pero aunque no se escribe ningún error y el archivo se crea, los registros y el archivo están vacíos.