Creación de una interfaz gráfica para los MQL en modo gráfico. - página 12

 
Yuriy Asaulenko:
En realidad, no. No hay diferencia entre un programa externo y un programa en MT. Las capacidades son las mismas, la interacción es la misma.
Por supuesto que no hay suficientes colbacs, pero tampoco los hay en la MT.
Pero en general es posible. Segundo EA y mutexes o temporizador corto. Funciona, pero no es necesario.

No has explicado nada en absoluto. ¿Cómo se obtienen los datos de MT* en el panel de Sharpe?

He estado haciendo la retroalimentación a través del Mapeo de la Memoria con un sondeo cronometrado. El panel sólo me envió diferentes configuraciones y resultados de cálculo lentos.

 
Renat Fatkhullin:
La ignorancia da confianza. Pero el conocimiento multiplica las penas.

¿Te importaría cuándo?
- una máquina virtual ajena y enorme se mete en tu proceso
- secuestra tus extractos y se cree el maestro
- se come un montón de memoria y se cree que es el maestro
- ejecutar un montón de hilos que tienen una vida propia.
- El recolector de basura crece al máximo y limita su proceso.
- todas las llamadas a través de la envoltura.

Por el bien de la guía, es definitivamente una exageración.

Ok, entonces voy a hacer el panel por separado, la comunicación a través de la asignación de memoria. A finales de los años 2000 lo hacía por tuberías, pero no me gustaba.

Conectado directamente, sin embargo, no notó ningún horror.

 
Maxim Kuznetsov:

La interfaz COM del terminal sería genial, aunque se está quedando rápidamente obsoleta.

Parece que no encaja con el tiempo real :-(.

La interfaz COM probablemente no estará disponible.

Pero, ¿puedo preguntar por qué está obsoleto?

Además, se está quedando rápidamente obsoleta.

 
Koldun Zloy:

La interfaz COM probablemente no estará disponible.

Pero, ¿puedo preguntar por qué está obsoleto?

Además, se está quedando rápidamente obsoleta.

ha sido sustituido por .net con sus interfaces de comunicación

 
Alexey Volchanskiy:

ha sido sustituido por .net con sus interfaces de comunicación

y en COM los GUIDs valen mucho por sí solos

MS sigue comprando los GUID no utilizados por un dólar cada 10. Si te sobra algo de los viejos tiempos, ¡puedes sacar un buen provecho!

 
Alexey Volchanskiy:

Y en COM, los GUIDs valen mucho por sí solos

MS sigue comprando los GUIDs no utilizados por un dólar la decena. Si te sobra algo de los viejos tiempos, ¡puedes sacar un buen provecho!

Tengo algunos por ahí :-) Te dejaré enviarlos a MS

066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb

si hay algo más, podría encontrarlo.

 

Colegas. Creo que la discusión sobre qué entorno de desarrollo es mejor y qué código es más rápido no tiene ningún sentido. Todo es cuestión de gustos y depende de las tareas a resolver. Independientemente del entorno de desarrollo, seguimos teniendo problemas de interacción entre una aplicación externa y una herramienta de MetaTrader. Veamos un ejemplo sencillo. Has implementado en un dll nativo un algoritmo de cálculos matemáticos complejos. Usted pasó los parámetros requeridos de la herramienta MT a esta biblioteca e inició el cálculo, la herramienta continuó su trabajo hasta que el cálculo se completó. Y, de nuevo, este problema no depende del entorno de desarrollo.

Veo varias opciones:

1. La posibilidad de llamar desde fuera del programa al método OnChartEvent, utilizando por ejemplo el PostMessage

2. Añadir a las herramientas de МТ nuevo método, como ofreció Renat: OnExternal, especificando el tipo de evento o los datos generalmente transferidos, es decir, en este método puede devolver los datos

3. Implantación en herramientas de MT de winsocket. Esto es similar al segundo punto, pero permite que la herramienta MT se conecte a un puerto específico para escuchar datos.

Si el primer y el segundo elemento permiten la interacción a nivel de una sola máquina, el tercer elemento proporcionará una red de herramientas de MT.

He aquí un ejemplo:https://www.mql5.com/ru/articles/2599

Pero aquí también tienes el problema de tener que comprobar si los datos de la toma están disponibles todo el tiempo.

Por lo tanto, el problema de la devolución de llamada se mantiene en todos los casos y no se resuelve.

El control del tiempo no es una solución, sino una muleta. Sí, a falta de otras opciones, así es como lo estamos resolviendo ahora.

Si los desarrolladores implementaran una solución para estos problemas a nivel de plataforma, entonces no habría necesidad de acceder al terminal de la API. Al fin y al cabo, no se pide por la buena vida, sino porque no hay una interacción plena entre la MT y las aplicaciones que se crean. Y repito: este problema existe independientemente del entorno de desarrollo de aplicaciones externas elegido.

Работа с сокетами в MQL, или Как стать провайдером сигналов
Работа с сокетами в MQL, или Как стать провайдером сигналов
  • 2016.07.12
  • ---
  • www.mql5.com
Сокеты… Что вообще сейчас в нашем информационном мире может без них существовать? Впервые появившиеся в 1982 г. и практически не изменившиеся до настоящего времени, они исправно работают на нас каждую секунду. Это основа сети, нервные окончания нашей Matrix, в которой мы живем. Утром вы включили терминал MetaTrader, и он сразу создал сокеты и...
 

Información sobre la posibilidad de utilizar bibliotecas de red )))https://www.mql5.com/ru/forum/13388

El tema es muy antiguo en principio. Los propios desarrolladores anunciaron en su día la posibilidad de trabajar con librerías de red sin ninguna dificultad... Mucha agua ha corrido desde entonces, pero la cuestión sigue sin resolverse...

O aquí, un mensaje del propio Renat:https://www.mql5.com/ru/forum/3153/page2#comment_298866

https://www.mql5.com/ru/forum/3153/page2#comment_298892

Встроенная поддержка .NET библиотек
Встроенная поддержка .NET библиотек
  • 2013.08.12
  • www.mql5.com
NET библиотеках функции могут быть только static методами или методами экземпляров класса.
 
Алексей Барбашин:

Colegas. Creo que la discusión sobre qué entorno de desarrollo es mejor y qué código es más rápido no tiene ningún sentido. Todo es cuestión de gustos y depende de las tareas a resolver. Independientemente del entorno de desarrollo, seguimos teniendo problemas de interacción entre una aplicación externa y una herramienta de MetaTrader. Veamos un ejemplo sencillo. Has implementado en un dll nativo un algoritmo de cálculos matemáticos complejos. Usted pasó los parámetros requeridos de la herramienta MT a esta biblioteca e inició el cálculo, la herramienta continuó su trabajo hasta que el cálculo se completó. Y, de nuevo, este problema no depende del entorno de desarrollo.

Veo varias opciones:

1. La posibilidad de llamar desde fuera del programa al método OnChartEvent, utilizando por ejemplo el PostMessage

2. Añadir a las herramientas de МТ nuevo método, como ofreció Renat: OnExternal, especificando el tipo de evento o los datos generalmente transferidos, es decir, en este método puede devolver los datos

3. Implantación en herramientas de MT de winsocket. Esto es similar al segundo punto, pero permite que la herramienta MT se conecte a un puerto específico para escuchar datos.

Si el primer y el segundo elemento permiten la interacción a nivel de una sola máquina, el tercer elemento proporcionará herramientas de MT con comunicación en red.

He aquí un ejemplo:https://www.mql5.com/ru/articles/2599

Pero aquí también tienes el problema de tener que comprobar si los datos de la toma están disponibles todo el tiempo.

Por lo tanto, el problema de la devolución de llamada se mantiene en todos los casos y no se resuelve.

El control del tiempo no es una solución, sino una muleta. Sí, a falta de otras opciones, así es como lo estamos resolviendo ahora.

Si los desarrolladores implementaran una solución para estos problemas a nivel de plataforma, entonces no habría necesidad de acceder a la API del terminal. Al fin y al cabo, no se pide por la buena vida, sino porque no hay una interacción plena entre la MT y las aplicaciones que se crean. Y repito: este problema existe independientemente del entorno de desarrollo de aplicaciones externas elegido.

Voy a añadir acerca de la supervisión y el sondeo, sólo que no todo el mundo lo sabe - para evitar sacudir la DLL en cada encuesta, puede tener int[] para "compartir" banderas. Dentro de la DLL todos los accesos a ellos como __atomic__ .
En principio esto funciona y es bastante económico en recursos, pero hay que contar con que en el lado de MQL los incrementos/decrementos son también atómicos y el optimizador no hace suposiciones sobre los valores.



int flags[1]={0};     // когда DLL досчитает она инкрементит флаг
handle=InitDLL(flags); //
...
// опрос типично выглядит так:
while ( flags[0] )   // проверить один int это очень быстро
{
   flags[0]--;
   ReadDataFromDLL(handle);
}

Para hacer las cosas realmente bien, bastaría con un atributo atómico (¿volátil?) y un conjunto de primitivas adecuadas. En mi opinión, es más fácil que construir un nuevo mecanismo en el sistema y no cambia el protocolo DLL existente

 
Maxim Kuznetsov:

Añadiré sobre la monitorización y el sondeo, no todo el mundo lo sabe - para no molestar a la DLL con cada sondeo, puedes crear int[] para "compartir" banderas. Dentro de la DLL todos los accesos a ellos como __atomic__ .
En principio esto funciona y es bastante económico en recursos, pero hay que contar con que en el lado de MQL los incrementos/decrementos son también atómicos y el optimizador no hace suposiciones sobre los valores.



int flags[1]={0};     // когда DLL досчитает она инкрементит флаг
handle=InitDLL(flags); //
...
// опрос типично выглядит так:
while ( flags[0] )   // проверить один int это очень быстро
{
   flags[0]--;
   ReadDataFromDLL(handle);
}

Para hacer las cosas realmente bien, bastaría con un atributo atómico (¿volátil?) y un conjunto de primitivas adecuadas. En mi opinión, es más fácil que construir un nuevo mecanismo en el sistema y no cambia el protocolo DLL existente

Maxim, ¿cómo es mejor esta solución? Al fin y al cabo, para comprobar el estado de una bandera, también hay que comprobarla periódicamente en MQL. Así, resulta que en todas partes hay que vigilar constantemente los cambios de estado de algo para entender que es el momento de recoger los datos. Y este fragmento puede ser almacenado en la propia dll y comprobado allí - eso es lo que yo hago. En tu ejemplo hay una llamada implícita a la dll para devolver el estado de la bandera.

Razón de la queja: