Discusión sobre "Cómo escribir una DLL para MQL5 e intercambiar datos en 10 minutos". - página 2

 
Todavía no he probado nada con el paso de cadenas a dll en MQL5

He notado un problema de este tipo con el paso de cadenas en MQL4-DLL. En el código MQL4 llamo a la función en la DLL y paso la cadena:

#import "MyDll.dll"
 void passSymbol(string symb);






void start() {

    passSymbol(Symbol());

}

y en la dll recibo esta cadena con un nombre de herramienta.

_DLLAPI int __stdcall passSymbol(char* symbol) {
   указатель symbol в какой-то момент не содержит имени инструмента а левые символы вообще.
}


En un momento dado, en algún tick (puede funcionar bien durante medio día) el dll recibe de repente una cadena de caracteres poco claros en lugar del nombre del instrumento.
¿Tal vez puedas comprobar un código similar en mql5? El puntero de memoria parece ser incorrecto en MQL4 o a veces hay un conflicto de acceso a las líneas de flujo dentro de la terminal.

Las matrices dobles y las variables int pasan correctamente sin problemas.

Voy a escribir una prueba para MQL5-DLL tan pronto como el tiempo aparecerá. Pero si usted también está probando estas cosas, escribir una prueba para verificar la estabilidad de la cadena de pasar a la dll, repitiendo el proceso en cada garrapata por un largo período de tiempo.

 
GarF1eld:

Si es posible exportar las cotizaciones sólo a través de dll, entonces significa que se debe colocar un script en cada instrumento a exportar? ¿Y si son muchos? Por ejemplo, ¿50?

Entiendo que es posible pasar las cotizaciones de muchos instrumentos en un solo script, pero no será un sustituto completo de DDE, donde los ticks no se pierden.

Renat:

La cuestión es que no tenemos la tarea de "proporcionar la interfaz para dar cotizaciones".

Nuestra tarea es crear un entorno completo y autosuficiente para desarrollar sistemas analíticos. Un entorno de este tipo para que ni siquiera sea necesario utilizar programas de terceros.

La respuesta es ciertamente interesante. En el título del tema "Cómo escribir una DLL para MQL5 e intercambiar datos en 10 minutos" vale la pena ver este artículo "Transferencia de datos entre indicadores - una solución simple de un problema doloroso " y compararlo con el problema antes mencionado (en cursiva).
 
Renat:

La cuestión es que no se nos ha encomendado la tarea de "proporcionar una interfaz para la emisión de cotizaciones".

Nuestra tarea es crear un entorno completo y autosuficiente para el desarrollo de sistemas analíticos. Un entorno tal que incluso los programas de terceros no tienen mucha necesidad de ser utilizados.


La interfaz gráfica de usuario es muy débil - tomó 2 días para escribir la lógica, y tomó un día entero para mostrar la información calculada de alguna manera

Como resultado desactivé todo - construí el transporte de datos(https://www.mql5.com/ru/forum/382) y estoy feliz ahora.

¿No están los promotores poniendo las miras demasiado altas?

¿Y por qué reinventar la rueda, si ya se hizo todo hace mucho tiempo (C, Delphi, ...)?

 
yu-sha:

La interfaz gráfica de usuario es muy débil - me tomó 2 días para escribir la lógica, y me tomó un día entero para mostrar la información calculada de alguna manera

Al final lo dejé todo: construí el transporte de datos(https://www.mql5.com/ru/forum/382) y estoy disfrutando de mi vida

¿No están los promotores poniendo las miras demasiado altas?

¿Y por qué reinventar la rueda cuando todo se ha hecho ya hace mucho tiempo (C, Delphi, ...)?

En mi opinión, el problema de MT5 comenzó con su creación: la falta de una visión clara de lo que se supone que debe resolver este producto. O bien se trata de una versión actualizada y basada en MT4 pero elevada a una nueva versión en términos de velocidad y funciones ampliadas, o bien se trata de una nueva plataforma de negociación moderna con una estructura y extensibilidad bien pensadas (es decir, que contiene clases de negocio, o marco de negociación, para realizar clases de tareas específicas claramente definidas, y que se basa en algún lenguaje/entorno de programación moderno con su funcionalidad general y herramientas de soporte de software ampliamente disponibles). Resolver este dilema intentando combinar los opuestos, elaborando una especie de compota, por así decirlo, por el método de "improvisación de los solistas más talentosos", parece que no lo ha conseguido del todo.

Si a alguien le parece pura basura sin una sombra de constructividad, por segunda vez llévalo a una casa de baños, o dispárale para siempre :)

 

2pisara

Llega a la raíz del asunto.

MQL es más bien para los operadores con pocos conocimientos de programación. A la Basic for dummies.

No tengo nada en contra de esa posición - gracias también por eso.

Pero el posicionamiento de MQL5 como"un entorno completo y autosuficiente para el desarrollo de sistemas analíticos".Este es el tipo de entorno en el que ni siquiera es necesario aplicar programas de terceros."Esta es una petición seria. Harán falta años de trabajo, no sólo de entusiastas individuales, sino de un equipo de programadores profesionales bajo la dirección de un buen arquitecto para "atar" el núcleo con algún conjunto de sopa digerible. No puedo decir nada sobre el presupuesto y la gestión, eso es otro nivel del proyecto.

Quiero apoyar a los empleados de la empresa en su duro trabajo. Quiero darles las gracias por su duro trabajo. Pero seamos sinceros: MQL5 es sólo una etapa para lograr el objetivo.

P.D. Moscú no se construyó en un día

 
Sí, da miedo pensar o recordar cuántas cosas innecesarias ha hecho, hace y seguirá haciendo cada uno de nosotros.
 
Renat:

Es muy fácil comprobar la velocidad de las llamadas. Por ejemplo, se puede calcular aproximadamente así:

Conseguí 57.000 llamadas por segundo en un Quad Q9400 a 2,66Ghz. El mismo código da unos 20.000.000 de llamadas por segundo en MetaTrader 4, ya que no hay control ni canalización.

Definitivamente vamos a tratar de reducir la pérdida en las llamadas DLL en MetaTrader 5.

Sería bueno hacer una directiva especial al compilador que esté habilitada por defecto y que inserte estos wrappers a las llamadas de la DLL. Cuando se desactiva, es una buena idea no insertar estas envolturas. Como el modo de depuración y liberación. Aun así, a veces 57.000 no son suficientes. El mismo tiempo es consumido por el tiempo de ejecución de la dll.
 
HideYourRichess:
Es una buena idea hacer una directiva especial del compilador que esté activada por defecto y que inserte estas envolturas en las llamadas a la dll. Cuando se desactiva, es una buena idea no insertar estas envolturas. Como el modo de depuración y liberación. Aun así, a veces 57.000 no son suficientes. El mismo tiempo se lo come el tiempo de ejecución de la dll.
La compilación 240 ha simplificado las envolturas, ahora la tasa de llamadas es de 19.911.000 llamadas por segundo.
 
Sobre la discusión de MQL / MQL2 / MQL4 / MQL5: aparentemente, usted no conoce muy bien nuestra historia. Al menos ve a la página web de la empresa y léela.


Hemos creado metódicamente 4 generaciones de lenguajes de trading desde 2001 con una enorme comunidad de traders. Los competidores morían, sus lenguajes de control no se desarrollaban, mientras que nosotros hemos trabajado, trabajamos y seguiremos trabajando.

 

Renat: 

y hemos trabajado, estamos trabajando y seguiremos trabajando.

Como legó el Gran Abuelo Lenin.

;)

No lo recuerdo, creo que lo he preguntado antes...
¿Es posible crear dlls simples utilizando las herramientas de mcl5?
¿escribirlo en unitor y compilarlo?