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

 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

MQL4 Adicionar indicador ao gráfico da EA

Alain Verleyen, 2016.02.13 11:39

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

#define  INDICATOR_NAME "Indicator_name"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
  {
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(10);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }

Olá a todos

O código acima funciona em um especialista, como usar os códigos acima em um indicador?

por favor, ajude-me.

 
É possível em MT4 remover o indicador do gráfico usando EA ? Alguns códigos podem ser escritos na função OnDenit().
 
Abdul Manan:
É possível em MT4 remover o indicador do gráfico usando EA ? Alguns códigos podem ser escritos na função OnDenit().

Remove um indicador com um nome especificado da janela do gráfico especificado. O comando é adicionado à fila de mensagens do gráfico e executado somente após todos os comandos anteriores terem sido processados.

boolChartIndicatorDelete(
longchart_id,// id gráfico
intsub_janela,// número da subjanela
const stringindicator_shortname// nome curto do indicador
);

Parâmetros

gráfico_id

[em] ID do gráfico. 0 denota o gráfico atual.

sub_janela

[em] Número da subjanela do gráfico. 0 denota a subjanela do gráfico principal.

const indicator_shortname

[em] O nome curto do indicador que é definido na funçãoINDICATOR_SHORTNAMEproperty with theIndicatorSetString(). Para obter o nome curto de um indicador use a funçãoChartIndicatorName().

Valor de retorno

Retorna verdadeiro se o comando tiver sido adicionado à fila do gráfico, caso contrário, falso. Para obter detalhes sobre os erros, use a funçãoGetLastError().

ChartIndicatorDelete - 图表操作 - MQL4参考
ChartIndicatorDelete - 图表操作 - MQL4参考
  • docs.mql4.com
Removes an indicator with a specified name from the specified chart window. The command is added to chart message queue and executed only after all previous commands have been processed. If the short name of an indicator is not set explicitly, then the name of the file containing the source code of the indicator will be specified during...
 
Alain Verleyen:
Existe alguma forma de anexar o indicador automaticamente no gráfico da EA quando voltar ao teste?
 
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }


This code work, but only in OnInit section. If i try transfer it to section CHARTEVENT_OBJECT_CLICK for launch with key, nothing happend. Can you help me ?
 
Olá, não consigo carregar 2 indicadores de 1 EA usando o mesmo código.
 
Este tópico foi tremendamente útil para mim, mas não me ajudou muito -- veja este tópico (https://www.forexfactory.com/showthread.php?p=12764287#) que retoma onde o diálogo aqui parou.
 
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")

Olá, eu recebi isto.

Não é possível chamar 'user32.dll::RegisterWindowMessageW', 'user32.dll' não é carregada

Alguém pode me ajudar?


 
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

Caro Alain ,

Usei seu código para adicionar um indicador a todos os gráficos abertos. mas ele só foi adicionado ao gráfico no qual eu executei a EA.

aqui está o código , você pode modificar seu código para adicionar o mesmo indicador a todos os gráficos abertos ?

por favor, ajude-me

BTW ( tentei como EA e também como roteiro , ambos acrescentaram o indicador em apenas um gráfico ) :)

cumprimentos,



#importar "user32.dll

int RegisterWindowMessageW(string MessageName);

int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]));

#importar


#define INDICATOR_NAME "CCI_FILTER6C"


no NOS ;

sufixo de corda="";

símbolo de corda[30];

longa cartela[30];


//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


int OnStart()

{

NOS=10;

sufixo="c";

símbolo[0] = "AUDCAD" + sufixo ;

símbolo[1] = "AUDCHF" + sufixo ;

símbolo[2] = "AUDJPY" + sufixo;

símbolo[3] = "AUDNZD" + sufixo;

símbolo[4] = "AUDUSD" + sufixo ;

símbolo[5] = "CADJPY" + sufixo ;

símbolo[6] = "CHFJPY" + sufixo;

símbolo[7] = "EURAUD" + sufixo ;

símbolo[8] = "EURCAD" + sufixo ;

símbolo[9] = "EURCHF" + sufixo;

for(int is=0;is<NOS;is++)

{

int hWnd=WindowHandle(symbol[is],PERIOD_M30);

StartCustomIndicator(hWnd,INDICADOR_NAME);

}

retorno(0);

}

InícioVálidoIndicador Personalizado(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=true)

{

uchar nome2[];

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


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");

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

Sleep(100);

}

 
Abdul Manan:
Olá, não consigo carregar 2 indicadores de 1 EA usando o mesmo código.

procurando por isto também - alguém descobriu como adicionar vários indicadores da mesma EA?


quero adicionar 2https://docs.mql4.com/indicators/ima da mesma EA


obrigado

Razão: