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

 

Hola.

Me pueden decir si es posible copiar el texto del EA al portapapeles, por ejemplo, por condición, el texto del allert.

Si es así, ¿cómo hacerlo?

 
mila.com:

Hola.

Me pueden decir si es posible copiar el texto del EA al portapapeles, por ejemplo, por condición, el texto del allert.

Si es así, ¿cómo hacerlo?

No. El trabajo con el portapapeles es una función del sistema (API de Windows). En MQL5 no hay acceso directo a la WinAPI. ¿Y por qué trabajar con el portapapeles? Al fin y al cabo, usted mismo está generando el mensaje, lo que significa que tiene el texto fuente del mensaje.
 
Karputov Vladimir:
No. El trabajo con el portapapeles es una función del sistema (API de Windows). En MQL5 no hay acceso directo a la WinAPI. ¿Y por qué deberías trabajar con el portapapeles? Al fin y al cabo, tú mismo generas el mensaje, por lo que tienes el texto fuente del mismo.

Sí, el código fuente está ahí, pero lo necesito, por una determinada condición, en el portapapeles.

Lo siento, no he especificado, necesito la implementación en MQL4.

¿Es posible abrir el portapapeles de alguna manera usando #import "user32.dll"?

 
mila.com:

Sí, el código fuente está ahí, pero lo necesito, por una determinada condición, en el portapapeles.

Lo siento, no he especificado, necesito la implementación en MQL4.

¿Tal vez puedas abrir el portapapeles de alguna manera usando #import "user32.dll"?

Es hora de escribir en MQL5. Usar dll es la cima de la imprudencia.

Según tengo entendido, quieres leer la información de un programa de terceros. A continuación, utilice la escritura en un archivo, en un directorio común de todos los terminales de cliente \Terminal\Common\Files. Ya desde este directorio se puede leer el archivo con un programa de terceros.

 
Karputov Vladimir:

Ya es hora de escribir en MQL5. Usar un dll es el colmo de la locura.

Según tengo entendido, quieres leer información de un programa de terceros. A continuación, utilice la escritura en un archivo, en un directorio común de todos los terminales de cliente \Terminal\Common\Files. Desde ese directorio puedes leer el archivo con un programa de terceros.

Gracias por las recomendaciones, pero ahora necesito copiar el texto al portapapeles desde el programa MQL4.

 
Karputov Vladimir:

Tomémoslo en orden. Esta es la plantilla:

Adjúntela al gráfico y una captura de pantalla del gráfico en el estudio, así como las entradas de las pestañas "Registro" y "Asesores" (si aparecen allí).

¡¡¡Hola !!!

Para empezar, he reiniciado la plataforma MT5. Compilación de su plantilla. El resultado de la compilación se muestra a continuación. Tuve que tirar las capturas de pantalla debido al gran volumen

Ha aparecido un EA en el navegador:

Puso el EA en el gráfico y permitió el comercio en 3 lugares:

Tengo el icono de EA en el gráfico en lugar de una cara sonriente

Aquí hay un extracto del registro 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) cargado con éxito

A continuación se muestra el contenido del mensaje sobre la carga del EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 iniciado
HD 0 10:35:45.020 Terminal Windows 8.1 (PC basado en x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\NUsers\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Red '50016841': autorizada en Alpari-Ltd-MT5 vía mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Red '50016841': autorización anterior realizada con éxito desde 79.172.69.175 el 2016.05.10 23:47:58
FK 0 10:35:47.617 Red '50016841': terminal sincronizada con Alpari Limited
RM 0 10:35:47.617 Red '50016841': se ha activado la negociación - modo de red
OH 0 10:35:48.253 Red '50016841': escaneando la red en busca de puntos de acceso
CL 0 10:35:51.446 Red '50016841': finalizado el escaneo de la red
ND 1 12:00:49.011 Red '50016841': conexión con Alpari-Ltd-MT5 perdida
MR 0 12:01:08.842 Red '50016841': autorizada en Alpari-Ltd-MT5 a través de mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Red '50016841': autorización anterior realizada con éxito desde 79.172.69.175 el 2016.05.11 10:35:52
PQ 0 12:01:08.907 Red '50016841': terminal sincronizado con Alpari Limited
PH 0 12:01:08.907 Red '50016841': se ha activado el comercio - modo de red
KL 0 12:41:45.169 Prueba de Asesor Experto (GBPUSD,H1) cargada con éxito

Por favor, échale un vistazo. Tal vez encuentre la causa. Estoy perplejo, ¿quizás sea un problema de la construcción?

¡¡¡Gracias!!!



¡¡¡Gracias por la ayuda !!!

 
Boris.45:

¡¡¡Hola !!!

Para empezar, he reiniciado la plataforma MT5. Compilación de su plantilla. El resultado de la compilación se muestra a continuación. Tuve que tirar las capturas de pantalla debido al gran volumen

Ha aparecido un EA en el navegador:

Puso el EA en el gráfico y permitió el comercio en 3 lugares:

Tengo el icono de EA en el gráfico en lugar de una cara sonriente

Aquí hay un extracto del registro 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) cargado con éxito

A continuación se muestra el contenido del mensaje sobre la carga del EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 iniciado
HD 0 10:35:45.020 Terminal Windows 8.1 (PC basado en x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\NUsers\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Red '50016841': autorizada en Alpari-Ltd-MT5 vía mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Red '50016841': autorización anterior realizada con éxito desde 79.172.69.175 el 2016.05.10 23:47:58
FK 0 10:35:47.617 Red '50016841': terminal sincronizada con Alpari Limited
RM 0 10:35:47.617 Red '50016841': se ha activado la negociación - modo de red
OH 0 10:35:48.253 Red '50016841': escaneando la red en busca de puntos de acceso
CL 0 10:35:51.446 Red '50016841': finalizado el escaneo de la red
ND 1 12:00:49.011 Red '50016841': conexión con Alpari-Ltd-MT5 perdida
MR 0 12:01:08.842 Red '50016841': autorizada en Alpari-Ltd-MT5 a través de mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Red '50016841': autorización anterior realizada con éxito desde 79.172.69.175 el 2016.05.11 10:35:52
PQ 0 12:01:08.907 Red '50016841': terminal sincronizado con Alpari Limited
PH 0 12:01:08.907 Red '50016841': se ha activado el comercio - modo de red
KL 0 12:41:45.169 Prueba de Asesor Experto (GBPUSD,H1) cargada con éxito

Por favor, échale un vistazo. Tal vez encuentre la causa. Estoy perplejo, ¿quizás sea un problema de la construcción?

¡¡¡Gracias!!!



¡¡¡Gracias por la ayuda !!!

Instale el terminal encima de este defectuoso. Se puede curar.
 
Karputov Vladimir:

Ya es hora de que escribamos en MQL5. Usar un dll es el colmo de la locura.

Según tengo entendido, quieres leer información de un programa de terceros. A continuación, utilice la escritura en un archivo, en un directorio común de todos los terminales de cliente \Terminal\Common\Files. Ya desde este directorio se puede leer el archivo con un programa de terceros.

Si fuera "el colmo de la locura", estaría prohibido.

WinAPI amplía enormemente las capacidades de MQL. Y puedes hacer una estupidez incluso sin dll.

Y aquí hay un ejemplo de pasar una cadena al portapapeles:

#define  CF_UNICODETEXT 13
#define  GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Artem, dime, si introduzco todo esto de debajo de la función On Start en la función On Tick, el script se ejecutará igual, sólo que en cada tick, ¿no?

¿O hay que cambiar algo?

Dado que las velas anteriores, excepto la actual, no cambian en cada tick, supongo que deberíamos añadir una condición para comprobarlo una vez, por ejemplo 1 - 2 segundos antes de que se cierre la vela actual? ¿O no tiene sentido y podemos dejar el control en cada tilde?

 
Andrey Koldorkin:

Artem, dime, si inserto todo esto de debajo de la función On Start en la función On Tick, el script se ejecutará igual, sólo que en cada tick, ¿no?

¿O hay que cambiar algo?

Dado que las velas anteriores, excepto la actual, no cambian en cada tick, supongo que deberíamos añadir una condición para comprobarlo una vez, por ejemplo 1 - 2 segundos antes de que se cierre la vela actual? ¿O no tiene sentido y podemos dejar el control en cada tilde?

Pues bien, yo lo plasmaría todo en una función y la llamaría cuando la necesitara - en cada tick (si es razonable y necesario), o en la apertura de una nueva vela - una vez por hora, por ejemplo, si trabajamos con H1.