Función ICustom - página 8

 
 

eche un vistazo a la función iCustom en la ayuda de MQL, hace exactamente lo que usted requiere

 

¡Eso es!

¡Gracias!

 

iCustom

Hola,

A veces, el funcionamiento de mis indicadores debe ser ligeramente diferente si el indicador se ejecuta como resultado de una llamada a iCustom en lugar de cómo el indicador normalmente se ejecuta si se adjunta a un gráfico.

¿Existe una función o método sencillo dentro de MQL que se pueda utilizar dentro de un indicador para determinar si el indicador se ejecutó explícitamente porque estaba unido a un gráfico o si el indicador se ejecutó como resultado de una llamada a iCustom?

Como un truco he estado incluyendo un parámetro booleano a mis indicadores llamado 'Custom' con un valor por defecto de falso. Si hago una llamada a iCustom para ejecutar el indicador, entonces pongo este parámetro en verdadero. De esta manera puedo decir dentro de mi indicador si el indicador se está ejecutando como resultado de una llamada a iCustom.

Seguramente debe haber alguna función como, por ejemplo, IsCustom() que devuelva true si el indicador se ha ejecutado a través de iCustom o false en caso contrario.

¿Alguien tiene una forma elegante y sencilla de determinar si un indicador se ejecuta como resultado de una llamada a través de iCustom?

Saludos,

Laurence.

 

¡gracias a todos por su ayuda!

aj

 

Pregunta de icustom

He intentado hacer un indicador que sólo llame a otro indicador por icustom. He hecho esta línea de código

double COG=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

He intentado poner la línea en diferentes lugares del código y he jugado con el nombre del double, he estado leyendo y leyendo muchos tutoriales. Creo que debo poner algo al principio, como el número de buffers, o que no debe ser un double.

tal y como está me da error al compilar;

'init' - se espera coma o punto y coma

'init' - expresión en el ámbito global no permitida

Alguien puede ayudarme a entender esto con cualquier indicador personalizado? porque siento que los tutoriales que he leído (y creo que los tengo todos) me han dado la línea de código para icustom pero no funciona simplemente por tener la línea sola, sé que hay que cambiarla para cada indicador pero hay algunas cosas que faltan en la explicación.

 

¡He tenido un intento importante en este Im estoy bastante orgulloso de mí mismo! Conseguí algo de código de Codersguru, lo cambié por un indicador. lol se ve bien no tiene errores al compilar (la primera vez !!!!!) pero ... hace que metatrader "no responda" cuando lo añades a un gráfico.

Cambié todos los nombres de los buffers de los indicadores (de val1, val2, val3, val4. a value1, value2...etc) porque me imaginé que estaban interfiriendo entre ellos ya que miré mejor el código que había hecho Codersguru (hizo un código para llamar a supertrend con icustom) cambió los nombres de los buffers así que pensé que debía ser eso, pero no, sigue sin responder.

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

//| COG call.mq4 ||||||||||

//| |

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

#property indicator_separate_window

#property indicator_buffers 4

#property indicator_color1 Lime

#property indicator_color2 Red

#propiedad indicator_color3 CLR_NONE

#propiedad indicador_color4 CLR_NONE

//---- buffers

double valor1[];

double valor2[];

double valor3[];

double valor4[];

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

//| Función de inicialización de los indicadores personalizados ||.

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

int init()

{

//---- indicadores

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Lime);

SetIndexBuffer(0,valor1);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Rojo);

SetIndexBuffer(1,valor2);

SetIndexStyle(2,DRAW_NONE);

SetIndexBuffer(2,value3);

SetIndexStyle(3,DRAW_NONE);

SetIndexBuffer(3,value4);

//----

return(0);

}

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

//| Función de desinicialización del indicador personalizada ||

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

int deinit()

{

//----

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int inicio()

{

int counted_bars=IndicatorCounted();

//---- comprobar posibles errores

if (counted_bars<0) return(-1);

//---- se vuelve a contar la última barra contada

if (counted_bars>0) counted_bars--;

int pos=Barras_contadas;

while(pos>=0)

{

valor1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

valor2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

valor3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

valor4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

}

return(0);

}

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

 

este es el hilo donde obtuve el código hecho por Codersguru;

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

me he dado cuenta de que he dejado una parte fuera de mi código pos en los extremos y pos

valor1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

valor2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

valor3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

valor4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

pos--;

¡vamos a probarlo!

 

LOL LOL LOLLLLLL jajaja! oh my god

ok he hecho progresos tengo la mitad de mi indicador en la pantalla (sólo la parte roja del indicador, lol wheres la parte verde?) esta es la primera cosa que he conseguido medio trabajo aunque no puedo creerlo jajaja! ¿alguien sabe lo que he hecho mal?

 

¡¡¡¡hmm he añadido números al final 0,1,2,3 para experimentar. no sé por qué? pero ha hecho algo, ahora tengo una línea roja plana y verde!!!!

no está bien, aunque, tal vez sea peor, esto es extraño. Ayúdenme, por favor, alguien... todo el mundo está durmiendo zzz zzz zzz, excepto yo.

Razón de la queja: