Discusión sobre el artículo "Desarrollando las interfaces gráficas para los Asesores Expertos e indicadores a base de .Net Framework и C#" - página 14

 

Se ofrece un ejemplo en el anuncio https://www.metatrader5.com/ru/releasenotes/terminal/1898.

MQL5

  1. Añadido soporte nativo para librerías .NET con importación "inteligente" de funciones. Ahora usted puede utilizar las bibliotecas .NET sin escribir envolturas especiales - MetaEditor se encarga de ello.

    Para trabajar con las funciones de la biblioteca .NET, basta con importar la propia DLL sin especificar funciones específicas. MetaEditor importa automáticamente todas las funciones con las que es posible trabajar:
    .
    • Estructuras simples (POD, plain old data) - estructuras que contienen sólo tipos de datos simples.
    • Funciones estáticas públicas, en cuyos parámetros sólo se utilizan tipos simples y estructuras POD o sus matrices
      .

    Para llamar a funciones de la biblioteca, basta con importarla:
    .
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Función de inicio del programa de script|
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    El código C# de la función Inc de la clase TestClass tiene el siguiente aspecto:
    .
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    El script devolverá el valor 42.

    Se está trabajando en el soporte de las librerías .NET, y se prevén futuras versiones para ampliar su uso.

  2. Se ha añadido a la librería estándar soporte para trabajar con funciones WinAPI. Ahora no es necesario importar manualmente las bibliotecas y describir las firmas de las funciones para utilizar las funciones del sistema operativo en un programa MQL5. Es suficiente con conectar el archivo de cabecera desde el catálogo MQL5\Include/WinAPI.

    Las funciones WinAPI están agrupadas en archivos separados por propósito:

    .
    • libloaderapi.mqh - trabajo con recursos
    • memoryapi.mqh - manejo de memoria
    • processenv.mqh - trabajo con el entorno
    • processthreadsapi.mqh - trabajo con procesos
    • securitybaseapi.mqh - trabajo con el sistema de seguridad del SO
    • sysinfoapi.mqh - obtener información del sistema
    • winbase.mqh - funciones generales
    • windef.mqh - constantes, estructuras y enumeraciones
    • wingdi.mqh - trabajo con objetos gráficos
    • winnt.mqh - manejo de excepciones
    • winreg.mqh - trabajo con el registro
    • winuser.mqh - gestión de ventanas e interfaces
    • errhandlingapi.mqh - manejo de errores
    • fileapi.mqh - manejo de archivos
    • handleapi.mqh - manejo de handles
    • winapi.mqh - conexión de todas las funciones (archivos de cabecera WinAPI).

    La vinculación sólo funciona con arquitectura de 64 bits.


MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.26
  • MetaQuotes
  • www.metatrader5.com
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
 
Nextor Visual Studio 2022, creado un formulario con un botón, ejecutarlo en MetaTrader 5, me sale un error....

En Visual Studio community 2019 todo funciona como el autor, pero cuando escribe:

"Cada formulario tiene una lista pública de elementos que contiene. Recorriendo la lista de elementos, el método encuentra aquellos que el controlador es capaz de soportar y se suscribe a los eventos que necesita. Si un elemento del formulario no es soportado por el controlador, simplemente será ignorado. "

Desgraciadamente, si colocas un SplitContainer o un DataGridView en el formulario de prueba, el formulario no se inicia en absoluto, no se sabe muy bien por qué, pero un componente tan complejo como Chart SE INICIA.

Adjunto un ejemplo de prueba de los componentes que se pueden utilizar para la modificación (¡aunque el formulario se inicia!).

Archivos adjuntos:
TESTGUIC.zip  706 kb
 

al intentar crear un controlador GuiController controller = new GuiController(assembly, form, m_global_events);
da Unexpected exception: The key with this name already exists (for DataGridView) and the controller is NOT created (the form is created, probably it can be shown, but without the controller how to control it?).

Una vez más todo está bien si no hay componentes SplitContainer y/o DataGridView.

 
Nikolai Karetnikov #:

quizás alguien más tropiece

este es el lugar en el artículo

"Como puedes ver, el compilador entiende las enumeraciones externas definidas en Net-libraries y sabe cómo trabajar con ellas."

No sé por qué razón, pero el compilador se niega obstinadamente a entender las enumeraciones de C#, así que arrastramos enum de C# a Mql5 y todo funciona.

Sólo que, Vasily, has colocado los botones de compra y venta en el panel de operaciones al revés ))

Pero en general, la cosa más cool ha resultado. ¡Gracias por tu duro trabajo!)

Yo tenía el mismo problema.

Lo resolví un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, realmente no está claro cómo funcionó para Vasily. Quizás hice algo mal...

Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).

 
MQL_User #:

Yo tuve el mismo problema.

Resolví este problema un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, es realmente poco claro cómo funcionó para Vasily. Quizás he hecho algo mal...

Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).

Tuve un error de este tipo:

@MQL_User, hice como tú: " ...en lugar de ClickOnElement escribí GuiEventType::ClickOnElement" - ¡todo funcionó!

 
Mano parámetros de entrada y salida.

Esto no funciona para MT4. He intentado sin ningún resultado.

 
Pete #:

¡Soy relativamente nuevo en MQL5 y he aprendido mucho de este artículo! ¡Muchas gracias!


Tengo una pregunta. He estado luchando un poco durante los últimos 2 días para averiguar esto a continuación.


He completado con éxito cada paso un par de veces, incluso en otro equipo, pero cada vez que intento compilar el código me sale un mensaje de error.


El compilador MQL estados : "Identificador no declarado" para cualquiera de las enumeraciones de abajo.


Si "comentario" estas enumeraciones de MQL5 entonces funciona en consecuencia, que es interesante ya que esto significa que el código funciona, pero no puede leer las enumeraciones que es mi conjetura?

Si alguien me puede ayudar se lo agradeceria mucho :)


Gracias,

He leido que necesitas declarar los enums tambien en el archivo MQH de la misma manera exacta que fueron declarados dentro de la DLL.

 
Mano parámetros de entrada y salida.

string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects

¿Cómo utilizo esto dentro de OnTimer()?

Estoy utilizando el mismo enfoque que se explica en el artículo

void OnTimer()
{
   CJAVal data;
   
   for(static int i = 0; i < EventsTotal(); i++)
   {
      data.Deserialize(ReceiveEvent(i));
      Print(data.["id"].ToStr());
        
   }   
}


Mi pregunta es: ¿qué int tengo que pasar dentro de la función ReceiveEvent?
Perdón por mi ignorancia pero no lo entiendo.
 
¡¡¡Hola!!! Es un artículo muy útil ya que somos capaces de integrar la aplicación dot net en MT5/4.
Muchas gracias al autor.

No estoy acostumbrado a c# pero vb. He intentado crear un formulario con vb dot net y tenerlo en el terminal MT5. pero no lo he conseguido.

¿Alguien me puede ayudar?
¿Este conector solo soporta c#?
¿Alguna posibilidad de trabajar con vb.net?
Aprecio su ayuda.
Gracias de antemano.
 

Por favor, ¿podéis decirme qué le pasa al programa GuiMtController.mq5 que informa de un error al ejecutarse?

GuiMtController.mq5
ClickOnElement'-identificador no declarado
1 errores,0 advertencias
Archivos adjuntos:
k9un.jpg  160 kb