¡Pide! - página 176

 

PS: sólo para recordar - el tercer parámetro en la llamada iCustom() es el nombre del indicador. El primer parámetro es el símbolo y el segundo es el marco de tiempo deseado

mladen:
Hágalo así:
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

Estoy llamando a un indicador personalizado usando icustom en un bucle para varios pares. Puedo ver en la pestaña de expertos que el indicador se descarga y luego se recarga para el siguiente par. ¿Significa esto que la llamada a iCustom está recalculando los valores para todas las barras máximas del gráfico cada vez que se carga? Además, si lo llama para la barra N y luego para la barra N+1 como llamadas sucesivas separadas, ¿la segunda llamada requiere un recálculo completo? Y por último, si las llamadas sucesivas son para diferentes buffers, ¿se recalcula cada uno de ellos?

Recuerdo que usted dijo que cada llamada iCustom genera una instancia separada, por lo que mi presunción es que cada uno se vuelve a calcular en su totalidad.

Gracias por la respuesta,

Tzuman

 

Tzuman,

Metatrader crea una nueva instancia del indicador para cada nuevo conjunto de valores de los parámetros (la excepción son el número de búfer y el índice).

Un ejemplo - las siguientes dos llamadas :

iCustom(NULL,0, "nombre",1,0,0);

iCustom(NULL,0, "nombre",2,0,0);

creará dos instancias de un indicador (incluso si utiliza, por ejemplo, "n" en lugar de 1 y 2 y asigna valores diferentes a n antes de una nueva llamada a iCustom(), creará instancias separadas. Es por eso que algunos indicadores adaptativos no pueden ser escritos usando iCustom() sino que debe hacerse en forma de funciones)

Ahora se trata de instancias. Pero si el indicador es cargado y luego descargado es usualmente un problema con los parámetros (la parte de descarga usualmente indica eso). Si los tipos de parámetros no coinciden entonces hará el truco de "carga - descarga". Compruebe si por accidente alguno de los parámetros pasados a iCustom no es del tipo esperado (o algunos de los parámetros se omiten accidentalmente y eso podría causar que los tipos de parámetros se mezclen).

Tzuman:
MLaden

Estoy llamando a un indicador personalizado usando icustom en un bucle para varios pares. Puedo ver en la pestaña de expertos que el indicador se descarga y luego se recarga para el siguiente par. ¿Significa esto que la llamada a iCustom está recalculando los valores para todas las barras máximas del gráfico cada vez que se carga? Además, si lo llama para la barra N y luego para la barra N+1 como llamadas sucesivas separadas, ¿la segunda llamada requiere un recálculo completo? Y por último, si las llamadas sucesivas son para diferentes buffers, ¿se recalcula cada uno de ellos?

Recuerdo que usted dijo que cada llamada iCustom genera una instancia separada, por lo que mi presunción es que cada uno se vuelve a calcular en su totalidad.

Gracias por la respuesta,

Tzuman
 

No quería interrumpir sus recientes discusiones

por favor, echa un vistazo a este nuevo hilo

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

 

Por lo que veo, mrtools ya lo solucionó

MaaTini:
No quería interrumpir vuestras recientes discusiones

por favor, echa un vistazo a este nuevo hilo

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman,

Metatrader crea una nueva instancia del indicador para cada nuevo conjunto de valores de los parámetros (la excepción son el número de búfer y el índice).

Un ejemplo - las siguientes dos llamadas :

iCustom
(

NULL

,0, "nombre",1,0,0);

iCustom(NULL,0, "nombre",2,0,0);

crearán dos instancias de un indicador (incluso si utiliza por ejemplo "n" en lugar de 1 y 2 y asigna diferentes valores a n antes de una nueva llamada a iCustom(), creará instancias separadas. Es por eso que algunos indicadores adaptativos no pueden ser escritos usando iCustom() sino que debe hacerse en forma de funciones)

Ahora se trata de instancias. Pero si el indicador se carga y luego se descarga suele ser un problema con los parámetros (la parte de descarga suele indicarlo). Si los tipos de parámetros no coinciden entonces hará el truco de "cargar - descargar". Compruebe si por accidente alguno de los parámetros pasados a iCustom no es del tipo esperado (o algunos de los parámetros se omiten accidentalmente y eso podría causar que los tipos de parámetros se mezclen).

Muchas gracias por la explicación. Suponía que la carga/descarga se debía a que el Symbol cambiaba en cada iteración del bucle por lo que tenía que cargar todos los nuevos valores de los datos,

por ejemplo, iCustom("EURUSD",0, "nombre" ,1,0,0); & iCustom("GBPUSD",0,nombre" ,1,0,0);

Comprobaré cuidadosamente los parámetros pero he procedido a escribir mis propias funciones de media MA con algo de plagio. Sólo mirando la utilización del procesador en el Administrador de Tareas, parece que el uso de mi cpu ha disminuido en un 90-95%. Estoy contento

 

hola gurú im novato en la codificación puede usted ayudarme en "detener la apertura de múltiples ordenes cuando takeprofit hit" trato de código como este, pero no funciona. podría usted ayudarme por favor.

static datetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

 

gracias mladen, voy a probar su código.

 
RBarias:
hola gurú soy novato en codificación puedes ayudarme en "stop opening multiple order when takeprofit hit" intento un código como este pero no funciona. podrías ayudarme por favor.

staticdatetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

Puedes intentar algo como esto (comprobará si la última orden cerrada está cerrada en una barra actual y si se ha alcanzado un take profit):

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Hola mladen,

Tu script Symbols.mq4 funcionó perfectamente en MT4 build 509, pero arroja un error de archivo en build 636 (al abrir symbols.raw).

¿Podrías compartir una versión actualizada para MT4 build 636?

Muchas gracias por adelantado.

Saludos,

Timo.