
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
He abandonado por completo la idea de enlazar MT5 y Quick, sólo me he conformado con Quick (servidor DEE + trans2quik.dll).
Estoy considerando la posibilidad de realizar este programa.
Selector1 obtiene constantemente datos del servidor DDE y los "almacena" en Storage y llama a la función OnTick en el Child correspondiente.
Cuando se llama a GetStorageData, el servidor DDE debe estar en pausa y los datos deben ser almacenados en Storage.
Cuando Selector2 llama a la devolución de llamada, el servidor DDE y la grabación de almacenamiento deben suspenderse y la llamada GetStorageData debe desactivarse
Es decir, Selector2 tiene alta prioridad, GetStorageData normal, y Selector1 baja.
Preguntas:
¿Cómo puedo sincronizar Selector1, Selector2 y GetStorageData con gracia?
¿Quizás haya ejemplos concretos de dicha sincronización (nunca he implementado algo así)?
Abandonamos la idea de enlazar MT5 y Quick, nos conformamos con Quick solamente (servidor DEE + trans2quik.dll)
Estoy considerando la posibilidad de realizar este programa.
1. la decisión muy acertada de dejar sólo a Quick.
2. La conexión mediante DEE es una solución muy controvertida. Mucha gente dice que el DDE es inestable, pero yo no lo sé.
En mi opinión, una solución mejor y más versátil, es una aplicación Lua-DLL. Yo uso esta opción. Por supuesto, depende del propietario.
1. la decisión de mantener sólo el Quick fue la correcta.
2. La comunicación a través del DDE es una decisión muy controvertida. Mucha gente dice que el DDE es inestable, pero, no lo sé.
En mi opinión, una solución mejor y más versátil, es una aplicación Lua-DLL. Yo uso esta opción. Por supuesto, depende del anfitrión.
Escribí hace mucho tiempo un servidor DDE para Quick - funciona sin problemas y lo suficientemente rápido (no más lento que Lua - DLL),
y no es necesario escribir código adicional para Lua y el receptor de datos DDL en absoluto.
Añadido
De hecho, ya escribí el programa que se muestra en el diagrama (y funciona), pero me encontré con un problema de sincronización.
Escribí hace mucho tiempo un servidor DDE para Quick - funciona sin problemas y lo suficientemente rápido (no más lento que Lua - DLL),
y no hay necesidad de escribir código adicional en Lua en absoluto.
Como no he hecho ningún DDE, la pregunta es: ¿cómo se hace el DDE? Creo que es necesario hacer una tabla con datos y luego pasarla por DDE.
Hay una confusión con los acontecimientos. Algo ha cambiado, y parece que toda la tabla se pasa al DDE. ¿O me equivoco?
Digamos que me equivoco. Entonces, ¿cómo identifico el evento en el lado receptor?
De hecho, ya he escrito el programa que se muestra en el diagrama (y funciona), pero me encontré con un problema de sincronización.
¿Sincronizar qué con qué?
Con Lua, este problema se resuelve con devoluciones de llamada desde la DLL a datos arbitrarios.
Como no he tratado con el DDE, la pregunta es ¿cómo se hace el DDE? Parece que hay que hacer una tabla con datos y luego pasarla por el DDE.
Hay una confusión con los acontecimientos. Algo ha cambiado, y parece que toda la tabla se pasa al DDE. ¿O me equivoco?
Digamos que me equivoco. Entonces, ¿cómo identificar el evento en el lado receptor?
En Quick, se genera la tabla requerida para la salida.
Por último, lanzamos nuestra propia aplicación con el servidor DDE y damos salida a esta tabla a través de DDE.
En la primera salida de Quick, toda la tabla se envía a DEE, luego sólo la fila de la tabla
en los que se produjeron cambios.
En la propia tabla (se transmite en su totalidad) hay (por ejemplo en mi caso) un nombre de herramienta - este es el identificador
El propio servidor DDE tiene unas pocas líneas (yo lo tengo en Pascal, pero hay muchos ejemplos en Internet en otros lenguajes)
Se crea una ventana secundaria con el nombre de la herramienta (como en MT 5)
¿Con qué?
He descrito el problema en el tema del diagrama
He descrito el problema en el tema del diagrama
Lo siento, no me di cuenta. Si lo he entendido bien:
En mi opinión, la solución es utilizar un DBMS comoalmacenamiento, por ejemplo MS SQL Server. Esto puede ser una solución parcial.
La segunda es utilizar topes intermedios-recogidas, como último en entrar, primero en salir. Bueno, y separación de hilos.
Entonces no hay necesidad de parar nada, todo se escribe simplemente en los buffers. Bueno, y el DBMS tiene acceso multiusuario.
Aplico todo esto, pero no soy amigo de Pascal desde el 6.
PS Dicen que se pueden utilizar las bibliotecas de NET desde Pascal. Para utilizarlo comoalmacenamiento, podría tener sentido utilizarSystem.Data,System.Data.DataSet ySystem.Data.Tabla de datos. Si no recuerdo mal, no había ningún problema con el acceso multiusuario enDataTable.
ZZY2 Ahora estoy intentando usar SQLite como base de datos, pero aún no hay resultados definitivos. Y ciertamente no es un SGBD, pero en una forma despojada es posible el acceso multiusuario, y es posible crear una base de datos en memoria.
No, sólo necesito sincronizar 3 hilos (básicamente escribir un sincronizador), pero
No sé cómo.