La llegada de una nueva generación de software de comercio. ¿Cómo debería ser la interfaz de EA? - página 12

 
Yury Kulikov:
Qué desordenado está todo :)
Me refería a un ejemplo de creación de interfaz utilizando su indicador de navegador de archivos, implementado en Expert Advisor. Pero no te aferres a las palabras "navegador de archivos", es un ejemplo de una tarea, y puede haber muchas tareas similares en Expert Advisors: navegador de ventanas de terminal, objetos en el gráfico, indicadores en el terminal ... Y esto es sólo una pequeña capa de tareas que se pueden implementar a través de una lista (tabla) de cadenas que desea obtener en su indicador a través de variables globales.
Ahora mismo estoy un poco confuso y se me escapa parte del sentido de tus posts. Mis disculpas. Un poco más adelante describiré en detalle el concepto de motor, estudio, interfaz y EA. Después podemos discutirlo. :)
 

1. El concepto de motor gráfico.

2. Concepto de núcleo gráfico.

3. fases de creación de un estudio visual para la plataforma MT.

4. Descripción del mecanismo de creación de la interfaz EA.


1. El motor gráfico es un programa realizado como indicador. Este programa está diseñado únicamente para la gestión de la interfaz de usuario. Realiza un conjunto de funciones básicas:

  • Carga del núcleo de la interfaz gráfica desde un archivo.
  • Guardar la configuración de la interfaz de usuario.
  • Implementación de un control único y coherente de todos los procesos de la interfaz. Implementa la "mecánica" de la interfaz, incluyendo: abrir y cerrar ventanas, cambiar el tamaño de las ventanas, mover ventanas, fusionar ventanas, hacer zoom, reproducir scripts, cambiar los estados de los objetos, los enlaces de los objetos, controlar los valores de los parámetros de los controles según sus tipos y propiedades, crear y eliminar variables globales.

El motor gráfico se añade al gráfico como cualquier otro indicador. Incluye el siguiente conjunto de ventanas:

  • Barra de tareas, en cuya parte derecha se añadirán varios iconos para llamar a las ventanas de servicio del propio motor.
  • Navegador de archivos, que se utilizará para seleccionar el archivo de arranque de una lista de archivos con interfaces ubicados en una carpeta especial.
  • Ventanas de configuración opcionales, que no juegan un papel principal en esta etapa.

Esto, en principio, es el fin del concepto de motor gráfico. Lo importante es que la interfaz no puede funcionar sin ella.



2. Un núcleo gráfico es un bloque de información que contiene datos de todos los objetos y ventanas de una interfaz, que se registra en una matriz y se guarda en un archivo.

Este bloque es una representación digital de la interfaz gráfica. El motor gráfico lo carga siguiendo las instrucciones del usuario. El propio motor gráfico tiene su propio núcleo gráfico interno que asegura el funcionamiento de sus propias ventanas y dentro de este núcleo se asigna el espacio libre para la integración de la interfaz de usuario (en forma digital) en él. La integración se realiza en el proceso de carga del núcleo gráfico desde un archivo.


3. La creación de un estudio visual en la plataforma MT, según tengo entendido, se divide en dos etapas:

  • En la primera etapa, se creará una versión basada en archivos del constructor de interfaces. En él, el usuario trabajará con plantillas de tablas. En las tablas, el usuario escribirá los tipos y nombres de los elementos de la interfaz y establecerá las propiedades de sus parámetros. La creación será un proceso extremadamente fácil de usar, en el que el usuario no tendrá que preocuparse por el posicionamiento correcto de sus elementos en las ventanas (el motor lo calculará todo automáticamente) y sólo tendrá que disponer los elementos en el orden requerido.
  • En la segunda fase, se creará un entorno visual que implementa el mismo método de construcción de interfaces que el constructor de archivos, sólo que será más fácil y cómodo de usar. También añadirá la posibilidad de cambiar la apariencia de los controles. En general, el usuario tendrá más opciones gráficas.


4. Quiero esbozar el mecanismo de creación de la interfaz en términos generales, y levantar ligeramente el velo sobre su tecnología. Explica de dónde vendrá la facilidad de crear una interfaz a través de un archivo.

Este es el caso: el motor tiene una función especial que crea un núcleo gráfico completo basado en un único archivo con una cantidad mínima de información de carga. La información de arranque en este archivo se explica por sí misma y es legible para las personas. Es fácil de escribir y editar. Por ejemplo, es necesario escribir "_CREATE_NEW_WINDOW" para crear una ventana, y "_CHECKBOX" y el nombre de la casilla de verificación, (el motor reconoce automáticamente el nombre del elemento, como nombre del propio elemento y como nombre de su parámetro).

Esta función se llama "G_CORE_BUILDER()" y construye el núcleo gráfico tomando datos de dos fuentes principales: un archivo de arranque creado por el usuario y el array "CONTENT[]", que contiene todos los grupos de objetos estándar incluidos en las plataformas de ventanas y controles. "CONTENT[]" también contiene estados y scripts de objetos. Todo en una sola matriz. En general, el material de origen de "CONTENT[]" + el archivo de carga creado por el usuario es utilizado por "G_CORE_BUILDER()" para construir el núcleo gráfico con el que trabaja el motor.

 

Para evitar confusiones, me gustaría añadir que el archivo de arranque puede estar en dos formatos:

1. En forma de un conjunto de instrucciones definidas por el usuario, que describen ventanas, controles y propiedades de sus parámetros. En este caso, en la fase de carga, la función "G_CORE_BUILDER()" se lanza y construye el núcleo gráfico.

2. En forma de núcleo gráfico listo que se carga directamente en el motor. En esta variante, no es necesario utilizar la función "G_CORE_BUILDER()".

La primera opción se utilizaría en el constructor de la interfaz y la segunda para ejecutar la interfaz ya hecha de cualquier aplicación.

Una versión simplificada del motor cargará el núcleo gráfico listo, del que se eliminará el sistema de construcción del núcleo ("G_CORE_BUILDER()" y la matriz "CONTENT[]") con el fin de simplificar su funcionamiento.
 
Реter Konow:
Dibujar una imagen no es una interfaz todavía, la cuestión más importante que no estás mencionando es cómo el Asesor Experto interactuará con el indicador, las"variables globales" suena de alguna manera vaga.
 
Yury Kulikov:
Dibujar una imagen no es la interfaz todavía, la cuestión más importante que no está mencionando - cómo el EA interactuará con el indicador, a través de las"variables globales" suena de alguna manera vaga.
De momento el sistema de interacción del Asesor Experto con la interfaz implementada en el indicador a través de globals está sólo en el papel, y no he tenido ninguna experiencia en su creación. Intentaré describir mi idea con más detalle, y si encontráis contradicciones o errores en ella, por favor comentad.

1. Permítame recordarle lo que todo el mundo sabe: cada variable global está en el ámbito de todos los programas cargados en el gráfico. Para crear una variable global, debe llamar a la función especial y pasarle el nombre de la variable y su valor.

2. Las variables globales serán creadas por el motor en la fase de carga de la interfaz, que leerá el archivo de arranque. Los nombres de las variables globales y sus valores guardados (o preestablecidos) se escribirán en el propio archivo de arranque.

3. Hay un bloque especial dentro del motor que se encarga de controlar los valores de los parámetros de los controles según el tipo de elemento, el tipo de valor y las propiedades del parámetro. Cuando el usuario marca una casilla de verificación o reasigna un valor en un elemento de "edición giratoria", el bloque de interacción de parámetros del control realiza acciones específicas sobre un valor concreto, una variable específica.

4. Debido a que la variable es global, su valor será constantemente "observado" por el Asesor Experto, y reaccionará a los cambios del valor de cada una de las variables globales según los algoritmos incorporados en ella.

5. El Asesor Experto no sólo "observa" las variables globales, sino que trabaja completamente con sus valores desde su funcionalidad. En este caso, es importante entender que las variables globales se dividirán condicionalmente en dos tipos: variables "controladas" por el usuario, cuyos valores serán establecidos por el usuario a través de los controles de la interfaz, y variables "controladas" por la funcionalidad del EA, cuyos valores serán establecidos por las funciones del usuario.

6. El motor, a su vez, trabajará con ambos tipos de variables globales condicionales. He descrito el principio de trabajar con valores de variables "bajo control" del usuario, y el principio de trabajar con valores "bajo control" de la funcionalidad de EA será el siguiente: el mismo bloque divide condicionalmente los controles en dos categorías: los que controlan el valor, y los que muestran el valor (mostrándolo de cualquier manera). Cada uno de estos controles (campo de entrada, barra de progreso, etc...) está suscrito al evento de cambio de valor de su variable. En cuanto el valor de cualquier variable cambia, el bloque se refiere al elemento correspondiente y realiza la manipulación con ese elemento, que se proporciona en el tipo de elemento por defecto.

Obsérvese que el bloque recorre todas las variables globales a la frecuencia del temporizador, con lo que "sigue" el comportamiento de los valores de las variables controladas funcionalmente.

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.D. En cuanto a la pregunta sobre cómo cargar la configuración de EA desde la interfaz de usuario, en mi opinión, se hará de la siguiente manera:

Los valores de todas las variables globales, con las que opera el EA (incluyendo las que representan la configuración del EA), se almacenarán en el archivo de carga antes de ser destruidos en el evento de descarga del EA. En cada carga de la interfaz, estas mismas variables globales se crearán de nuevo y tomarán sus valores originales. Entonces el Asesor Experto se cargará y accederá a sus variables.
 
Реter Konow:

¿Cómo se puede pasar un texto (por ejemplo, el nombre de un archivo) a través de una variable global?

¿Cómo puede el Asesor Experto activar/desactivar una ventana?

¿Cómo puede el Asesor Experto crear una nueva ventana mientras el Asesor Experto está funcionando?

...

 
Yury Kulikov:

1. ¿Cómo puedo pasar un texto (por ejemplo, un nombre de archivo) a través de una variable global?

2. ¿Cómo puede el experto activar/desactivar la ventana?

3. ¿Cómo puede el Asesor Experto crear una nueva ventana mientras el Asesor Experto está funcionando?

...

1. Esta tarea aún no ha sido resuelta. Puedo sugerir un par de variantes en una suposición:

a) Pasando la cadena mediante el propio nombre de la variable global. Dado que las variables están indexadas, el motor y el Asesor Experto siempre necesitan "conocer" el índice de la variable glob que se va a borrar y crear de nuevo para transferir el texto, cambiando su nombre cada vez y pasando la cadena por ella. A primera vista, la opción parece desordenada, pero quién sabe, tal vez se pueda mejorar...

b) Transmitir una cadena con valor de una variable, consecutivamente con letras, donde en lugar de las propias letras se transmitirán los números correspondientes, y el proceso de transmisión se realizará en n-número de periodos de temporizador.

2. Por el momento, mi concepto carece de método de activación/desactivación de ventanas en el lado de EA. Para ser sincero, no estoy muy seguro de lo que quieres decir. Las ventanas sólo serán tratadas por el usuario y el motor. El Asesor Experto sólo se ocupa de las variables y de sus propias funciones. Todavía no tiene acceso a la interfaz. (¿Y qué sentido tiene?).

3. las nuevas ventanas (compuestas), que el usuario puede agrupar conjuntos de ventanas (componentes) a su discreción, serán creadas por el motor y no por el Asesor Experto. por ejemplo, haciendo clic en el elemento del menú principal "nueva ventana". Es importante que todas las ventanas agrupadas estén ya creadas en la interfaz y el número de ventanas compuestas utilizadas para agrupar la información requerida por el usuario puede ser (condicionalmente) ilimitado. Los conjuntos de ventanas y su contenido se guardarán en un archivo.

 
Реter Konow: Todavía no tiene acceso a la interfaz. (¿Y qué sentido tiene eso?)

La cuestión es fundamental. Los eventos no sólo ocurren en la interfaz.

Habrá más de un iceberg en el camino de su Titanic. Has empezado el proyecto por el lado equivocado y las variables globales no te ayudarán aquí.

 
Yury Kulikov:

La cuestión es fundamental. Los eventos no sólo ocurren en la interfaz.

Habrá más de un iceberg en el camino de su Titanic. Has empezado el proyecto por el lado equivocado y las variables globales no te ayudarán.

Bien, ¿en qué arista crees que debería haber empezado el proyecto y qué puede ayudarme?
 
Реter Konow:
De acuerdo, pero ¿dónde crees que debería haber empezado el proyecto, y qué puede ayudarme?

Creo que deberíamos empezar con el Experto. He dado tres tipos de tareas que son relevantes para el experto, pero resulta que no son factibles en su interfaz.

¿Qué podría ayudar? Tal vez una integración más profunda, o limitar el proyecto al "control remoto".

Razón de la queja: