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
Gracias. Esperamos recibir ofertas comerciales. Buena suerte.
¿A qué se refiere con la velocidad de obtención de presupuestos? Si se trata de obtener ticks entonces ya escribí que trabajar con ticks de cotizaciones incluso directamente en MT4 es difícil.
La biblioteca no fue diseñada originalmente para atrapar garrapatas. Tiene que ver con el hecho de que el sistema puede simplemente colgarse cuando el mercado es muy activo, porque no puede seguir el ritmo de los ticks. Por eso, la biblioteca lleva incorporada una protección de software contra la avalancha de garrapatas.
Las ventajas de utilizar la memoria compartida son la alta fiabilidad de este sistema y la ausencia de atascos en el disco duro. Además, varios programas pueden acceder a la biblioteca, y no necesitan "conocer" la ubicación exacta de los archivos temporales. Buena suerte.
parece que el autor se excedió :)
según tengo entendido, si el EA está dentro de la función start() (y envía información sobre un tick al cliente de la API desde allí), entonces MT no dará un nuevo tick hasta que el EA salga de la función start(). Por eso no está claro cómo puede producirse una avalancha de ticks...
si el EA está en bucle y recibe ticks a través de RefreshRates, entonces primero debería salir de la API del cliente, y luego se produciría la llamada de RefreshRates. Por eso tampoco hay lugar para congelar aquí.
suena bien, pero no es la única forma de comunicación entre procesos.
así que el tema "¿Para qué sirve el uso de la memoria compartida?" no está resuelto :)
imho, MMF es bueno sólo en un caso cuando necesitas bombear grandes cantidades de datos entre procesos - la velocidad de bombeo es de ~150Mb/seg. (hace un par de meses tuve que hacer tal mecanismo sólo con MMF, porque según las pruebas esta es la manera más rápida).
en esta tarea (transferir parámetros para OrderSend etc.) - es como un pájaro por una pluma, más fácil crear una ventana y usar SendMessage con wm_copydata.
No creo que esté discutiendo que el algoritmo utilizado sea el mejor. Eso es lo bueno de la programación, que un problema así puede resolverse al menos de una docena de maneras. La variante con archivos temporales también funcionaba plenamente. Mi tarea consistía en desarrollar un sustituto fiable, viable y totalmente funcional de la API de MT3. Ahora la biblioteca trabaja con el programa de comercio práctico durante aproximadamente medio año. Y el principal problema en este caso no era la consecución de la máxima velocidad, sino la fiabilidad y la respuesta adecuada a un gran número de situaciones de emergencia. Así que, gracias por tus comentarios, son muy apropiados, pero esa es "otra historia". Buena suerte.
Incluir Mforex2.lib biblioteca de importación en el proyecto (para Delpi - sólo describir las funciones de la biblioteca),
Especificar el archivo de cabecera Mforex.h en el programa principal (por ejemplo: #include "Mforex.h" - sólo para Builder C++);
Estos 2 puntos son misteriosos para mí porque Omega es el programa listo, todos los demás archivos que he colocado como se describe, la función prescrita para iniciar MT4, y en el inicio me dio el mensaje de que es necesario prescribir la ruta exacta, pero también prescribí ruta. No sé qué hacer ahora.
Estos 2 puntos me desconciertan porque Omega es un programa ya hecho, todos los demás archivos los he colocado como se describe, la función prescrita de inicio de MT4 y en el inicio recibí el mensaje de que es necesario prescribir la ruta exacta, pero yo también he prescrito la ruta. No sé qué hacer ahora.
Omega tiene la posibilidad de importar funciones de DLLs externas. Por lo tanto, debe especificar Mforex2.dll como la biblioteca externa. Al mismo tiempo, este archivo debe estar en el "campo de visión" de los programas Omega. En los procedimientos de llamada, especifique el nombre de las funciones importadas de la DLL, como se indica en la documentación. Observe también que Omega "no conoce" las definiciones del archivo Mforex.h. Es decir, por ejemplo, cuando se llama a la función de abrir una posición, hay que especificar el código de operación para, por ejemplo, Vender - 1, en lugar de OP_SELL, etc. Para más detalles, consulte la documentación de DevKit, que describe la forma en que omega trabaja con las bibliotecas externas.
Buena suerte.
Buena suerte.
Así que prescribí lo siguiente en Omega:
DefineDLLfunc: "Mforex2.dll", int, "Start"; {Llamada a la DLL}
_gbp = Start(); {función de inicio del terminal}
Pero dices que aquí debemos escribir algo más en lugar de "Start()", ¿lo he entendido bien?
DefineDLLfunc: "Mforex2.dll", int, "Start"; {llamar a DLL}
_gbp = Start(); {función de inicio de terminal}
Pero dices que en lugar de "Start()" hay que escribir otra cosa, ¿tengo razón?
Yo mismo respondo: No tienes que escribir algo más en lugar de "Start()" - así es, Omega inicia MT4 sin problemas.
Pero es un poco más complicado en la función de apertura de posiciones, por lo que he prescrito la función:
Input: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple),
price(NumericSimple), sl(NumericSimple), tp(NumericSimple);
DefineDLLfunc: "Mforex2.dll", int, "NewPos",char, int, int, double, double, double;
_NewPos = NewPos(Symbol, Order, Lot, price, sl, tp);
Lógicamente todo se ajusta a la descripción del fabricante, pero en la práctica tenemos problemas: todo se establece en números...