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
Mike = Terranin = yo :) Y ya te he dado el emulador en el foro de Alpari. El MTS no me interesa mucho, si supieras la cantidad de ellos que se estrellan en mi emulador... :)
:)) Eso es lo que pensé. Si te interesa, puedes ver mi sistema aquí
http://forum.alpari-idc.ru/viewtopic.php?t=45555
Es un poco desordenado, por supuesto...
Si quieres, te describo el sistema, ya que me ayudaste con el emulador.
Si quieres usar una DLL externa, sólo tienes que activar el botón "Confirmar cada llamada a una función DLL" y ver qué se llama allí. Esto también es protección. Así como la protección de todas las operaciones de archivos incrustados con acceso sólo a los directorios /historia y /archivos.
Si alguna persona ofrece el Asesor Experto al público con su DLL, el usuario confía en esta DLL o no. Si no se fía, no lo descargará. Si se fía, tendrá que marcar la casilla "Permitir la importación de funciones DLL", de lo contrario el experto no funcionará. Los nombres de las funciones a las que se llama tampoco serán útiles para el Asesor Experto, porque para saber lo que hace una función, tendrá que desmontar la DLL, y no todo el mundo podrá hacerlo. Y en esta DLL se pueden hacer un montón de cosas desagradables, y el terminal MT no puede impedirlo. Por lo tanto, la "protección" es muy condicional y no es una protección real en este contexto. Creo que esto es lo que quería decir Mike.
La posibilidad de llamar a funciones desde DLLs personalizadas en МТ 4 Expert Advisors se posiciona como un reemplazo de API que está presente en MT 3. Así que, de todos modos, hay una oportunidad para transformar el terminal MT 4 en un datafeed y colocar órdenes, que fue una de las razones (a juzgar por varios temas en los foros) por las que se eliminó la API. Pero la API se mantuvo, es muy incómoda, muchos usuarios hablan de ella, y recuerda a la situación del chiste: ".... No me importa, mientras te aburras". Y este tema es una confirmación de ello. El autor no ha recibido ninguna respuesta concreta e informativa a sus preguntas. Estas preguntas también son relevantes para mí, las respuestas son aún más relevantes :-).
Tal vez yo tampoco sea un programador experimentado, pero en el actual sistema Expert Advisor<->DLL, por definición, no se puede tener una solución simple y bonita. Para ser más exactos, en el ámbito de MQL4 puede haber una bonita solución, pero en el ámbito de la integración del terminal MT4 con el software personalizado no es nada, por decirlo suavemente. Hay otras soluciones más funcionales, sólo hay que encontrarlas :-). Por ejemplo, podemos crear una DLL con funciones como en mtapi.dll, pero no interactuará con el servidor del centro de operaciones, sino con el terminal cliente. En este caso, tanto los intereses de los desarrolladores serán preservados (sin el terminal MT4 la DLL no será capaz de operar) y las personas, que son capaces de crear algo más complejo que los Asesores Expertos MQL4, tendrán una buena oportunidad de integrar su propio software (incluyendo su propia gui) con el sistema de comercio. Si tal variante ha sido considerada y discutida, por favor dame un enlace (no he encontrado tal variante). Si no es así, me gustaría conocer la opinión de los desarrolladores sobre este tema.
P.D. La línea "posibilidad de utilizar la API del cliente" en la descripción del terminal de comercio es muy atractiva. Eso es lo que me atrajo a MetaTrader, y me decepcionó mucho la falta de API en la versión 4 del terminal. Espero que los desarrolladores, por un lado, y los usuarios de la API, por otro, lleguen a un compromiso. El estado actual de las cosas (llamar a funciones DLL desde ekperts) es insatisfactorio.
Tengo una dll compilada para VC++
hay una función:
void __stdcall process_arr(double *in, double *out, int size);
hay una declaración de este tipo en el Asesor de Expertos:
#importar "algo.dll"
void process_arr(double in[], double& out[], int size);
se declaran las matrices a continuación:
doble arr1[100];
doble arr2[100];
entonces inicializo el primer array y paso ambos a la función
process_arr(arr1,arr2,100);
se pasa todo, pero la función se niega a devolverlo
Después de regresar de la función, emito el valor de la prueba:
Print(arr2[1]);
y aparece la siguiente entrada en el registro
2005.09.19 18:30:03 arrtest EURUSD,H1: 2147483647
este no es el punto, ¿qué tiene que ver 2^31....?
funciona de la misma manera con cualquier otro elemento de la matriz.
aunque bajo el depurador antes de salir de la función los valores en el array out son como deberían ser (cerca del precio - ~1.2)
2^31-1 para ser exactos, que debería ser como el cero.
Esta es la declaración en el Asesor Experto:
#importar "algo.dll"
void process_arr(double in[], double& out[], int size);
Sólo una sugerencia (porque no estoy familiarizado con MQL): ¿es realmente necesario & para el segundo parámetro?
void process_arr(double in[], double& out[], int size);
a VicK, el ampersand es todo el punto, gracias a él puedo realmente cambiar el contenido del array...
la segunda matriz es una matriz con valores de retorno
En este caso no hay esencia en el ampersand (acabo de probarlo yo mismo), y puedes cambiar el contenido del array gracias a otra cosa :-). ¿Has mirado el ejemplo de DLL en el directorio? Allí todo funciona bien. Hazlo de la misma manera.
pero todo funciona bien con int[]. Tengo la sospecha de que aquí empieza a oler a bug.... :(
Me gustaría conocer los comentarios de los desarrolladores
si esta cosa viniera con el código fuente, nadie se molestaría, pero... adelante, estoy pidiendo ayuda.