Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 855

 

Es importante para mí obtener una respuesta a estas preguntas.

Para los métodos CTrade::Buy, CTrade::Sell, CTrade::ClosePosition

¿Significa que si se devuelve false, Retcode debe ser ignorado?

¿Significa que si se devuelve true, Retcode se rellena siempre con el valor correcto?

Gracias.

 

Colegas, ayúdenme.

Estoy tratando de averiguar cómo trabajar con el registro, he hecho un simple Asesor Experto para la prueba. La lectura de datos del registro del sistema va sin problemas, pero hay problemas con la escritura, la MT y los fallos de memoria... (((

Quizás mi ojo ya está empapado y no veo lo evidente...

Archivos adjuntos:
TestReg.mq5  25 kb
 
Алексей Барбашин:

Colegas, ayúdenme.

Estoy tratando de averiguar cómo trabajar con el registro, he hecho un simple Asesor Experto para la prueba. La lectura de datos del registro del sistema va sin problemas, pero hay problemas con la escritura, la MT y los fallos de memoria... (((

Quizás mi ojo ya está empapado y no veo lo evidente...

Aquí debería ser sencillo. Antes y después de cada llamada a la función API imprime algo en el registro. Después de la caída, los registros mostrarán dónde se produjo la caída.

 
. ... Rick D. ... .:

Debería ser bastante sencillo. Antes y después de cada llamada de la función API imprime algo en el registro. Después de la colisión, los registros aclararán dónde se produjo la colisión.

De esta manera, el registro no tiene tiempo de ser escrito, el terminal se cierra con un error. (( Supongo que hay una fuga de memoria. Pero los objetos dinámicos no se utilizan (nuevos). No sé cómo afrontarlo y buscar esos problemas ;(.

 
Алексей Барбашин:

Así que el registro ni siquiera tiene tiempo de ser escrito, el terminal se cierra con un error. (( Supongo que hay una fuga de memoria. Pero los objetos dinámicos no se utilizan (nuevos). No sé cómo afrontarlo y cómo detectar esos problemas ;(

Puede que haya retocado un poco tu ejemplo.
Archivos adjuntos:
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
He modificado un poco tu ejemplo.

Я ... sorprendida, agradablemente sorprendida. Ponga su cambio en varios gráficos a la vez para asegurar la carga asíncrona en el registro.... Todo funciona de forma coherente. Cambiaste el principio de paso de parámetros en la API, es decir, donde se usan los valores de retorno, allí aplicaste arrays con paso por referencia, que en mql significa pasar una dirección, o puntero en términos de++. Pero pensé que este enfoque, descrito hace 10 años, era anacrónico, porque todos los tipos de datos simples en la API se pasan de todos modos por referencia.... Pero aparentemente fue un error mío y una miopía, significa que los tipos simples no son tan fáciles de pasar a la API. Muchas gracias por indicarme la dirección correcta. )))

 
Алексей Барбашин:

Я ... sorprendida, agradablemente sorprendida. Ponga su cambio en varios gráficos a la vez para asegurar la carga asíncrona en el registro.... Todo funciona de forma coherente. Cambiaste el principio de paso de parámetros en la API, es decir, donde se usan los valores de retorno, allí aplicaste arrays con paso por referencia, que en mql significa pasar una dirección, o puntero en términos de++. Pero pensé que este enfoque, descrito hace 10 años, era anacrónico, porque todos los tipos de datos simples en la API se pasan por referencia.... de todos modos. Pero aparentemente fue un error mío y una miopía, significa que los tipos simples no son tan fáciles de pasar a la API. Muchas gracias por indicarme la dirección correcta. )))

Hace tiempo en MT4 me enseñaron a pasar punteros a funciones de la API a través de arrays unidimensionales. Si algo ha cambiado en este momento, y alguien puede confirmarlo, utilizaré un nuevo enfoque.

Pero aún así, los tipos se han confundido. En particular, los longs en Windows y en MQL5 tienen tamaños diferentes.
Tal vez encuentre otras diferencias.

 
. ... Rick D. ... .:

Hace tiempo en MT4 se enseñaba a pasar punteros a funciones de la API a través de arrays unidimensionales. Si algo ha cambiado en este momento y alguien puede confirmarlo, utilizaré el nuevo enfoque.

Pero también ha tenido alguna confusión con los tipos. En particular, los longs en Windows y en MQL5 tienen tamaños diferentes.
Tal vez encuentre otras diferencias.

He visto todas las diferencias))) ¡Muchas gracias!

La única cuestión es el tamaño de los datos almacenados en el registro. Según el ejemplo de la documentación (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx), podemos almacenar un poco más de datos que en el archivo corregido (ushort buff[1024];). ¿Lo he entendido bien?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

He visto todas las diferencias))) ¡Muchas gracias!

La única cuestión es el tamaño de los datos almacenados en el registro. Según el ejemplo de la documentación (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) puede almacenar un poco más de datos que en el archivo fijo (ushort buff[1024];). ¿Estoy leyendo bien?
Correcto. Puede haber más datos. Para datos grandes, es correcto solicitar primero la longitud, luego redimensionar dinámicamente el array, y después obtener todos los datos.
 
. ... Rick D. ... .:
Sí. Puede haber más datos. Para los big data, es correcto solicitar primero la longitud, luego redimensionar dinámicamente el array y después obtener todos los datos.

Hmmm... Probablemente no he mirado la API con mucho cuidado, pero no he visto esa función.... Y probablemente sería útil.

Cualquier otro consejo... quizás la pregunta es demasiado... ridícula... ¿Cómo traduzco un número, por ejemplo, doble, en un array char? Es decir, en algunas API se requiere pasar los números como un puntero. Los punteros se pasan como matrices unidimensionales... Con las cadenas está claro, las funciones StringToShortArray y StringToCharArray están previstas para ellas, pero con los números sigo sin entender cómo convertirlos en matrices de bytes (char).

Razón de la queja: