MQL4 Adicionar indicador ao gráfico da EA - página 3

 
Georgiy Liashchenko:
o sono tem funcionado, obrigado

Estou usando o código de Alain e ele funciona no sentido de que o clássico formulário indicador aparece me pedindo para preencher o parâmetro e depois clicar em Ok para ativar o indicador e é semelhante a anexar manualmente o indicador. É possível automatizar completamente toda a operação, mesmo as configurações dos parâmetros necessários? Obrigado

 
alessandrovb:

Estou usando o código de Alain e ele funciona no sentido de que o clássico formulário indicador aparece me pedindo para preencher o parâmetro e depois clicar em Ok para ativar o indicador e é semelhante a anexar manualmente o indicador. É possível automatizar completamente toda a operação, mesmo as configurações dos parâmetros necessários? Obrigado

Você só tem que adicionar código para simular o traço da chave, como você faz manualmente.
 
Alain Verleyen:

Eu não tenho este problema (com o código que eu afixei).

Verifique se o hWnd é diferente de 0.

Você também pode tentar aumentar o valor do hWnd para 50 ou 100.

Olá,

Este comentário para muitos ajuda, eu preciso de outra pergunta,

Posso contornar o popup de entrada e usar o padrão de indicador? Como codificar?

Posso apagar o indicador do gráfico?

 
Alain Verleyen:

Graças a isto é o que estou procurando, posso adicionar meu indicador personalizado, apenas mais uma pergunta, como descarregá-lo ?

 
Alain Verleyen:

Congratulaions, funciona bem.

 
Alain Verleyen:

Eu não tenho este problema (com o código que eu afixei).

Verifique se o hWnd é diferente de 0.

Você também pode tentar aumentar o valor do hWnd para 50 ou 100.


Estou usando seu código, mas tenho um problema com o nome dele.

2018.01.11 12:06:15.864 não pode abrir o arquivo 'C:\............\MQL4\indicators\MACDèõšp.ex4' [123]

2018.01.11 12:04:00.518 não pode abrir o arquivo 'C:\.............\MQL4\indicadores\MACD. ex4' [123]

A primeira linha é levantada quando

   uchar name2[4];

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

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

A segunda linha é levantada quando

   uchar name2[];

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


Eu mudei o primeiro código que está funcionando agora!

   uchar name2[5];

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

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

Acho que meu problema é a detecção do fim da matriz!
 

Olá a todos,

Gostaria de agradecer a Georgiy Liashchenko, e gostaria de compartilhar minha versão atualizada de seu código que adiciona o indicador diretamente no gráfico comAutomaticallyAcceptDefaults (quando estiver em "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 isso ajude algumas pessoas que precisam inserir indicadores do especialista.

Nota : Eu trabalho para indicadores personalizados, caso contrário, mude o nome da janela

Nota2 : Não utilize indicadores com mais de 15 caracteres (antes do ".ex4")

 
Kray:

Olá a todos,

Gostaria de agradecer a Georgiy Liashchenko, e gostaria de compartilhar minha versão atualizada de seu código que adiciona o indicador diretamente no gráfico comAutomaticallyAcceptDefaults (quando estiver em "true").

Espero que isso ajude algumas pessoas que precisam inserir indicadores do especialista.

Nota : Eu trabalho para indicadores personalizados, caso contrário, mude o nome da janela

Nota2 : Não utilize indicadores com mais de 15 caracteres (antes do ".ex4")

Muito bom.


Descobri que usando:

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

em vez de usar:

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

permitirá o uso de indicadores padrão também, usando o nome do indicador padrão.

 

Eu recebo um

'name2' - parameter conversion not allowed
mensagem de erro quando eu tento compilá-la?!

 

Kray:

Olá a todos,

Gostaria de agradecer a Georgiy Liashchenko, e gostaria de compartilhar minha versão atualizada de seu código que adiciona o indicador diretamente no gráfico comAutomaticallyAcceptDefaults (quando estiver em "true").

......

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


Estou executando o MT4 v4.00 Build 1090 (19 de maio de 2017).

A função PostMessageW faz com que meu terminal MT4 trave quando eu o uso de dentro de um script para colocar um indicador.

Usei o SendMessageW como alternativa para colocar o indicador, mas infelizmente, isto significa que não há como fechar a caixa de diálogo de configuração simulando um evento de teclado e pressionando a tecla Enter. Acho que isto pode ser porque a função SendMessageW não retorna até que o procedimento de janela tenha processado a mensagem, o que significa que o evento do teclado não pode ser processado até que a caixa de diálogo tenha desaparecido. Isto, por sua vez, significa que o FindWindowW não funcionará enquanto a caixa de diálogo for exibida, já que o SendMessageW não retornará até que a caixa de diálogo tenha desaparecido.

Tudo isto tem sido para mim um grande exercício de frustração. O PostMessageW ainda trabalha com a última construção do MT4? Alguém sabe como fechar programadamente a caixa de diálogo de configuração do indicador? Eu consultei dois outros tópicos, tentei suas recomendações e não obtive sucesso:

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

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

Alguém pode me elucidar? Há alguma maneira de fazer com que o PostMessageW funcione, ou fechar a caixa de diálogo de configuração de outra maneira?