MQL4 Añadir indicador al gráfico desde el EA - página 3

 
Georgiy Liashchenko:
el sueño ha funcionado, gracias

Estoy usando el código de Alain y funciona en el sentido de que aparece el formulario del indicador clásico pidiéndome que rellene el parámetro y luego haga clic en Ok para activar el indicador y es similar a adjuntar manualmente el indicador. ¿Es posible automatizar completamente toda la operación incluso la configuración de los parámetros requeridos? Gracias

 
alessandrovb:

Estoy usando el código de Alain y funciona en el sentido de que aparece el formulario del indicador clásico pidiéndome que rellene el parámetro y luego haga clic en Ok para activar el indicador y es similar a adjuntar manualmente el indicador. ¿Es posible automatizar completamente toda la operación incluso la configuración de los parámetros requeridos? Gracias

Sólo tienes que añadir código para simular la pulsación de las teclas, como lo haces manualmente.
 
Alain Verleyen:

Yo no tengo este problema (con el código que he puesto).

Comprueba que hWnd es diferente de 0.

También puedes probar a aumentar el valor de sleep a 50 o 100.

Hola,

Este comentario a muchos ayuda, necesito otra pregunta,

¿Puedo omitir la ventana emergente de entrada y utilizar el valor predeterminado del indicador? ¿Cómo codificar?

¿Puedo eliminar el indicador del gráfico?

 
Alain Verleyen:

Gracias esto es lo que estoy buscando, puedo añadir mi indicador personalizado, sólo una pregunta más, ¿cómo descargarlo?

 
Alain Verleyen:

Enhorabuena, funciona bien.

 
Alain Verleyen:

Yo no tengo este problema (con el código que he puesto).

Comprueba que hWnd es diferente de 0.

También puedes intentar aumentar el valor de sleep a 50 o 100.


Estoy usando tu código, pero tengo un problema con su nombre.

2018.01.11 12:06:15.864 no puede abrir el archivo 'C:\............\MQL4\indicators\MACDèõšp.ex4' [123]

2018.01.11 12:04:00.518 no puede abrir el archivo 'C:\.............\MQL4\indicators\MACD. ex4' [123]

La primera línea se plantea cuando

   uchar name2[4];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D';

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

La segunda línea se plantea cuando

   uchar name2[];

   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


He cambiado el primer código y ahora funciona.

   uchar name2[5];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D'; name2[4]=0;

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

Creo que mi problema es la detección del final del array.
 

Hola a todos,

Me gustaría dar las gracias a Georgiy Liashchenko, y me gustaría compartir mi versión actualizada de su código que añadir el indicador directamente en el gráfico conAutomaticallyAcceptDefaults (cuando está en "true").

#import "user32.dll"
   int  RegisterWindowMessageW(string MessageName);
   int  PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
   int  FindWindowW(string lpszClass,string lpszWindow);
#import

#define VK_RETURN 13 //ENTER key

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
{
   Sleep(100);
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));
   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(100);
   if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);
   }
}

int OnInit()
{
   int hWnd = WindowHandle(Symbol(), 0);
   StartCustomIndicator(hWnd, "Indicator_name");
   return(INIT_SUCCEEDED);
}

Espero que ayude a algunas personas que necesitan insertar indicadores desde el experto.

Nota : Funciona para los indicadores personalizados, si no cambia el nombre de las ventanas

Nota2 : No utilizar indicadores con más de 15 caracteres (antes del ".ex4")

 
Kray:

Hola a todos,

Me gustaría dar las gracias a Georgiy Liashchenko, y me gustaría compartir mi versión actualizada de su código que añadir el indicador directamente en el gráfico conAutomaticallyAcceptDefaults (cuando está en "true").

Espero que ayude a algunas personas que necesitan insertar indicadores desde el experto.

Nota : Funciona para los indicadores personalizados, si no cambia el nombre de las ventanas

Nota2 : No utilizar indicadores con más de 15 caracteres (antes del ".ex4")

Muy bien.


He descubierto que usando:

int r=PostMessageW(hWnd,MessageNumber,13,name2);

En lugar de usar:

int r=PostMessageW(hWnd,MessageNumber,15,name2);

Le permitirá utilizar los indicadores estándar también, utilizando el nombre del indicador estándar.

 

Me sale un

'name2' - parameter conversion not allowed
mensaje de error cuando intento compilarlo?

 

Kray:

Hola a todos,

Me gustaría dar las gracias a Georgiy Liashchenko, y me gustaría compartir mi versión actualizada de su código que añadir el indicador directamente en el gráfico conAutomaticallyAcceptDefaults (cuando está en "true").

......

if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);


Estoy corriendo MT4 v4.00 Build 1090 (19 de mayo de 2017).

La función PostMessageW hace que mi terminal MT4 se bloquee cuando la uso desde un script para colocar un indicador.

He utilizado SendMessageW como alternativa para colocar el indicador, pero lamentablemente, esto significa que no hay manera de cerrar el cuadro de diálogo de configuración simulando un evento de teclado y presionando la tecla Enter. Creo que esto puede deberse a que la función SendMessageW no regresa hasta que el procedimiento de la ventana haya procesado el mensaje, lo que significa que el evento de teclado no puede ser procesado hasta que el cuadro de diálogo haya desaparecido. Esto, a su vez, significa que FindWindowW no funcionará mientras se muestre el cuadro de diálogo, ya que SendMessageW no regresará hasta que el cuadro de diálogo haya desaparecido.

Todo esto ha sido un gran ejercicio de frustración para mí. ¿Sigue funcionando PostMessageW en la última versión de MT4? ¿Alguien sabe cómo cerrar el cuadro de diálogo de configuración del indicador programáticamente? He consultado otros dos hilos, he probado sus recomendaciones y no he tenido éxito:

https://www.mql5.com/en/forum/155334

https://www.mql5.com/en/forum/115967

¿Puede alguien aclararme? ¿Hay alguna manera de hacer que PostMessageW funcione, o de cerrar el cuadro de diálogo de configuración de alguna otra manera?