Discusión sobre "Cómo escribir una DLL para MQL5 e intercambiar datos en 10 minutos".

 

Artículo publicado ¿Cómo escribir una DLL para MQL5 en 10 minutos e intercambiar datos?:

Resulta que ahora pocos desarrolladores recuerdan cómo se escribe una simple DLL y cuáles son las peculiaridades de enlazar sistemas heterogéneos. En 10 minutos, trataré de demostrar todo el proceso de creación de DLLs simples y discutiré algunos detalles técnicos de nuestra implementación de binding. Mostraré el proceso paso a paso de la creación de DLL en Visual Studio con ejemplos de paso de diferentes tipos de variables (números, matrices, cadenas, etc.) y la protección del terminal del cliente frente a caídas en las DLL personalizadas.

Autor: Renat Fatkhullin

 

Un artículo muy interesante. Falta para completarlo:

1. ¿De dónde sacamos las cotizaciones, se pueden sacar de los archivos hst?

2. ¿Cómo hacer que esta biblioteca sea compatible con la del MateLab 2009a o 2009b? ¿No tienen también C y C++ allí?

Una petición muy grande.

 
  1. Las cotizaciones se toman del terminal: ahora son detalladas y profundas (10 años y más).

    Bajo ninguna circunstancia debemos mirar directamente en los archivos binarios de los almacenes de los terminales - sólo causará graves conflictos de acceso a los datos. Incluso si las pruebas mostraron "funcionó, sin problemas", todavía llegará un momento de acceso simultáneo a estos datos de la terminal y el programa externo, y alguien se estrellará como resultado. La gente ha tropezado con ella muchas veces.

  2. Acoplar las bibliotecas en MQL5 es ahora mucho más fácil, debido al soporte transparente para las convenciones stdcall / cdecl en las llamadas DLL.

    Si alguien escribe un artículo bueno y detallado sobre la vinculación de MetaTrader 4/5 y Matlab a través de DLL, ganará 200 dólares o más.

    La comunidad MQL4.ya tiene artículos sobre el paquete Matcad - MetaTrader 4:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, ¿qué pasa con la velocidad de las llamadas al dll?
Necesito enlazar dos terminales, para que traduzcan sus cotizaciones en Excel en tiempo real.
En MT4 se puede hacer con DDE. En MT5 parece que a través de DLL es la única salida.
Pero si cada tick entrante se pasa a la DLL... Creo que será algo inimaginablemente lento. Por supuesto, aún no he intentado ponerlo en práctica... pero honestamente, no quiero probarlo. Va a ser una pesadilla.
En resumen, devolvamos el DDE a MT5. Es un anacronismo, pero a veces puede ser necesario.

P.D. Gracias por este artículo, es muy oportuno. He echado de menos un material así.
 
¡¡¡Gracias!!!
 
benik:
Renat, ¿qué pasa con la velocidad de llamada de la dll?

Es muy fácil comprobar la velocidad de las llamadas. Por ejemplo, un cálculo aproximado puede hacerse así:

_DLLAPI int __stdcall fnCalcSpeed(int var1,int var2,int var3)
  {
   return(0);
  }


#import "MQL5DLLSamples.dll"
int  fnCalcSpeed(int var1,int var2,int var3);
#import

   int calls=0;
   int ticks=GetTickCount();
   
   while(GetTickCount()-ticks<1000)
     {
      for(int i=0;i<1000;i++)
         fnCalcSpeed(1,2,3);
      calls++;
     }
   Print(calls * 1000, "вызовов в секунду");

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

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

 
Renat писал(а) :

57.000 llamadas por segundo

Ah, bueno, si hay unas 50.000 llamadas por segundo, creo que también es posible emitir citas a través de la DLL. No habrá pérdidas.

Gracias por el código.

 
En la próxima compilación, la velocidad de las llamadas a la DLL se incrementará a 20 000 000 de llamadas "vacías" por segundo, como en MQL4.
 

Si es posible exportar las cotizaciones sólo a través de una dll, entonces resulta que hay que 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.

 

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

Nuestro objetivo es crear un entorno completo y autosuficiente para desarrollar sistemas analíticos. Un entorno de este tipo para que no sea necesario utilizar programas de terceros.

 
En cualquier caso, Mql5 es una alegría. Gracias