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

 

Foro sobre trading, sistemas de trading automatizados y prueba de estrategias de trading

MQL4 Añadir indicador al gráfico desde el 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);
  }

Hola a todo el mundo

por encima de código funciona en un experto, ¿cómo puedo utilizar de los códigos anteriores en un indicador?

por favor ayuda.

 
¿Es posible en MT4 eliminar el indicador del gráfico usando EA? Se puede escribir algún código en la función OnDenit().
 
Abdul Manan:
¿Es posible en MT4 eliminar el indicador del gráfico utilizando el EA? Se puede escribir algo de código en la función OnDenit().

Elimina un indicador con un nombre especificado de la ventana del gráfico especificada. El comando se añade a la cola de mensajes del gráfico y se ejecuta sólo después de que se hayan procesado todos los comandos anteriores.

boolChartIndicatorDelete(
longchart_id,// id del gráfico
intsub_window,// número de la subventana
const stringnombre_del_indicador// nombre corto del indicador
);

Parámetros

chart_id

[in] ID del gráfico. 0 denota el gráfico actual.

sub_window

[in] Número de la subventana del gráfico. 0 denota la subventana del gráfico principal.

const nombre_del_indicador

[in] El nombre corto del indicador que se establece en lapropiedad INDICATOR_SHORTNAME con la funciónIndicatorSetString(). Para obtener el nombre corto de un indicador utilice la funciónChartIndicatorName().

Valor de retorno

Devuelve true si el comando ha sido añadido a la cola del gráfico, en caso contrario false. Para obtenerlos detalles del error utilice la funciónGetLastError().

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:
¿Hay alguna manera de adjuntar el indicador por auto en el gráfico de EA cuando backtest?
 
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 ?
 
Hola, no soy capaz de cargar 2 indicadores de 1 EA utilizando el mismo código.
 
Este hilo fue tremendamente útil para mí, pero no me llevó hasta allí - ver este hilo (https://www.forexfactory.com/showthread.php?p=12764287#) que se retoma donde el diálogo aquí lo dejó.
 
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")

Hola tengo esto

No se puede llamar a 'user32.dll::RegisterWindowMessageW', 'user32.dll' no está cargado

¿Alguien puede ayudarme?


 
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

Estimado Alain ,

Utilicé tu código para añadir un indicador a todos los gráficos abiertos. pero sólo se añade al gráfico en el que ejecuto el EA.

Aquí está el código, ¿puede modificar su código para añadir el mismo indicador a todos los gráficos abiertos?

Por favor, ayuda

Por cierto (lo he probado como EA y también como script, ambos añaden el indicador a un solo gráfico) :)

saludos,



#importar "user32.dll"

int RegisterWindowMessageW(string MessageName);

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

#importar


#define INDICATOR_NAME "CCI_FILTER6C"


int NOS ;

string suffix="";

string symbol[30];

long chartid[30];


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

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

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


int OnStart()

{

NOS=10;

suffix="c";

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

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

símbolo[2] = "AUDJPY" + sufijo

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

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

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

símbolo[6] = "CHFJPY" + sufijo

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

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

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

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

{

int hWnd=WindowHandle(símbolo[is],PERIOD_M30);

StartCustomIndicator(hWnd,INDICATOR_NAME);

}

return(0);

}

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=true)

{

uchar nombre2[];

StringToCharArray(NombreIndicador,nombre2,0,StringLen(NombreIndicador));


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");

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

Sleep(100);

}

 
Abdul Manan:
Hola, no soy capaz de cargar 2 indicadores desde 1 EA utilizando el mismo código.

buscando esto también - ¿alguien ha descubierto cómo agregar múltiples indicadores de la misma EA?


Quiero añadir 2https://docs.mql4.com/indicators/ima desde el mismo EA


gracias