Ayuda iCustom
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
Ayuda iCustom
Buenos dias!
Ando con un EA, con llamadas a iCustom y veo:
1.- En cada llamada me aparece que "carga" el iCustom" (loaded). Al de unas cuantas barras, parece que ya no tiene mas memoria y que tiene que eliminarlos (removed). Es esto normal?
Ya se que los iCustom ralentizan, pero este es una pasada.
Aparte de lo lento que va y de los warnings, puede llegar a producir error?
(las llamadas son a la ultima barra terminada (1))
2.- Al hacer las llamadas al iCustom, en la pantalla principal aparece el indicador de ese iCustom. Hasta ahi normal. Pero si chequeo los valores del Indicador en el momento en que se lanza una orden (es decir, el valor del Indic al ejecutarse el EA) no coincide con el valor de la curva del Indicador en la pantalla principal. O sea, que cuando en la pantalla se me cruzan las medias y me da señal, los valores (uno de ellos) que da el EA no coincide y la señal salta mal.
Yo me he entendido, espero que vosotros tambien
Saludo2
Ando con un EA, con llamadas a iCustom y veo:
1.- En cada llamada me aparece que "carga" el iCustom" (loaded). Al de unas cuantas barras, parece que ya no tiene mas memoria y que tiene que eliminarlos (removed). Es esto normal?
Ya se que los iCustom ralentizan, pero este es una pasada.
Aparte de lo lento que va y de los warnings, puede llegar a producir error?
(las llamadas son a la ultima barra terminada (1))
2.- Al hacer las llamadas al iCustom, en la pantalla principal aparece el indicador de ese iCustom. Hasta ahi normal. Pero si chequeo los valores del Indicador en el momento en que se lanza una orden (es decir, el valor del Indic al ejecutarse el EA) no coincide con el valor de la curva del Indicador en la pantalla principal. O sea, que cuando en la pantalla se me cruzan las medias y me da señal, los valores (uno de ellos) que da el EA no coincide y la señal salta mal.
Yo me he entendido, espero que vosotros tambien
Saludo2
Yo lo que hago es no llamar a iCustom en cada tick, si no en cada nueva vela cerrada. Para ello debes guardar en una variable el tiempo de apertura de la vela en formación una vez llamado el indicador, y al proximo tick comparar el tiempo guardado con el de la vela en formación. Si coinciden los tiempos no se llama al indicador porque ya tienes los datos, y si no coinciden es que se ha abierto una nueva vela y se vuelve a llamar al indicador.1.- En cada llamada me aparece que "carga" el iCustom" (loaded). Al de unas cuantas barras, parece que ya no tiene mas memoria y que tiene que eliminarlos (removed). Es esto normal?
Ya se que los iCustom ralentizan, pero este es una pasada.
Aparte de lo lento que va y de los warnings, puede llegar a producir error?
(las llamadas son a la ultima barra terminada (1))
Ejemplo:
Código: Seleccionar todo
if(NewBar2())
{
//Llamada a iCustom
Print(StringConcatenate("Nueva Vela, ",TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS)));
}
Código: Seleccionar todo
bool NewBar2()
{
static datetime lastbar = 0;
datetime curbar = iTime(NULL,0,0);
if(lastbar != curbar)
{
lastbar = curbar;
return(true);
}
else return(false);
}
Eso de que no coincide el valor del Ea con el indicador depende de como esté programado el indicador y como extraes esos datos. Yo suelo poner un simple Comment con los valores que da el indicador para ver si son correctos en todo momento en el Ea en Visual test. Y a veces tengo que modificar el indicador para adaptarlo al Ea, por ejemplo no es lo mismo que de Empty_Value que cero para el Ea .
2.- Al hacer las llamadas al iCustom, en la pantalla principal aparece el indicador de ese iCustom. Hasta ahi normal. Pero si chequeo los valores del Indicador en el momento en que se lanza una orden (es decir, el valor del Indic al ejecutarse el EA) no coincide con el valor de la curva del Indicador en la pantalla principal. O sea, que cuando en la pantalla se me cruzan las medias y me da señal, los valores (uno de ellos) que da el EA no coincide y la señal salta mal.
Yo me he entendido, espero que vosotros tambien
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
gracias de nuevo nstrader
ahorrare algo de tiempo con el codigo ese.
Pero entiendo que en principio, por muchas veces que se llame a un iCustom no debe dar error, ira mas lento pero sin error.
de momento me da igual el tiempo, quiero ver que tal tira
si va bien habra que copiar el indic en el ea y ya ta!
del pto 2, ya he puesto los comentarios y por eso se que algun hay algun decalaje, porque los valores del EA no coinciden con el visual....
ya me ocurrio lo mismo hace tiempo, tendre que mirarlo de nuevo, lo importante es que el visual este bien
Salu2
ahorrare algo de tiempo con el codigo ese.
Pero entiendo que en principio, por muchas veces que se llame a un iCustom no debe dar error, ira mas lento pero sin error.
de momento me da igual el tiempo, quiero ver que tal tira
si va bien habra que copiar el indic en el ea y ya ta!
del pto 2, ya he puesto los comentarios y por eso se que algun hay algun decalaje, porque los valores del EA no coinciden con el visual....
ya me ocurrio lo mismo hace tiempo, tendre que mirarlo de nuevo, lo importante es que el visual este bien
Salu2
Si vis pacem, para bellum.
Dios me libre de los mansos, que de los fieros ya me libro yo.
Dios me libre de los mansos, que de los fieros ya me libro yo.
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
buenos dias,
bueno, he puesto tu codigo y se acelera bastante, muy interesante el tema de los tiempos, nunca lo habia tocado...
pero el iCustom me sigue sin funcionar bien
lanzo el EA y la primera vez que llamo al iCustom, me responde bien, pero las siguientes veces, la variable devuelve valor 0.
Ya no me sale el "loaded succesfully"
Cerre el Metatrader a ver si se "habia quedado" algo en memoria. Pero nada. Hoy apagare el ordenador (era un portatil y estaba "hibernando").
De todas formas, buscando en la red, podria ser algun bug por usar vbles bool en el indicator? http://www.metatrader4.com/forum/938/page2
Os ha pasado algo similar? (que el indic devuelva 0 a partir de la segunda consulta)
Salu2
bueno, he puesto tu codigo y se acelera bastante, muy interesante el tema de los tiempos, nunca lo habia tocado...
pero el iCustom me sigue sin funcionar bien
lanzo el EA y la primera vez que llamo al iCustom, me responde bien, pero las siguientes veces, la variable devuelve valor 0.
Ya no me sale el "loaded succesfully"
Cerre el Metatrader a ver si se "habia quedado" algo en memoria. Pero nada. Hoy apagare el ordenador (era un portatil y estaba "hibernando").
De todas formas, buscando en la red, podria ser algun bug por usar vbles bool en el indicator? http://www.metatrader4.com/forum/938/page2
Os ha pasado algo similar? (que el indic devuelva 0 a partir de la segunda consulta)
Salu2
Si vis pacem, para bellum.
Dios me libre de los mansos, que de los fieros ya me libro yo.
Dios me libre de los mansos, que de los fieros ya me libro yo.
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
hola!
bueno, pues no funciono el iCustom, al final tuve que "meter" el indicador en el EA
no entiendo por que....
te posteo el mensaje que sale en el log:
se ha llamado a 2 indic.
pongo parte del EA, donde se les llama
y el indicador, que calcula la media en un timeframe diferente (lo hice yo, asi que no sera nada ortodoxo, pero bueno
asi que problema resuelto, pero no asi la filosofia, que ya me jod*%&/ tener que meter un indic en el EA cada vez que lo necesite, no lo entiendo
Salu2,
bueno, pues no funciono el iCustom, al final tuve que "meter" el indicador en el EA
no entiendo por que....
te posteo el mensaje que sale en el log:
22:59:32 SD Line-MultiTime-03 EURUSD,M1: removed
22:59:32 I-MA-Multitime-01 EURUSD,M1: removed
22:59:32 I-MA-Multitime-01 EURUSD,M1: removed
22:59:32 I-MA-Multi-01 EURUSD,M1: removed
23:05:12 I-MA-Multi-01: loaded successfully
23:05:12 I-MA-Multi-01 inputs: Lots=0.1; TimeFrame=3; period=30; method=3; price=0; Periods=3;
23:05:12 2008.01.03 00:01 I-MA-Multitime-01 EURUSD,M1: loaded successfully
23:05:12 2008.01.03 00:01 I-MA-Multitime-01 EURUSD,M1: loaded successfully
23:05:12 2008.01.03 00:01 SD Line-MultiTime-03 EURUSD,M1: loaded successfully
23:05:12 2008.01.03 00:01 I-Slope-MA-Multi-01 EURUSD,M1: Sl30 3 3 0 1.4715 1.4723 1.4718
23:05:12 2008.01.03 00:01 I-Slope-MA-Multi-01 EURUSD,M1: MA3 3 1.4715 1.4722 1.4718
23:05:12 2008.01.03 00:01 I-Slope-MA-Multi-01 EURUSD,M1: Sl30 3 3 0 0 0 0
23:05:12 2008.01.03 00:01 I-Slope-MA-Multi-01 EURUSD,M1: MA3 3 0 1.4722 1.4718
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: Sl30 3 3 0 0 0 0
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: MA3 3 0 0 0
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: Sl30 3 3 0 0 0 0
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: MA3 3 0 0 0
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: Sl30 3 3 0 0 0 0
23:05:12 2008.01.03 00:02 I-Slope-MA-Multi-01 EURUSD,M1: MA3 3 0 0 0
se ha llamado a 2 indic.
pongo parte del EA, donde se les llama
int start()
{
..
..
double A1,B1,C1;
double A0,B0,C0;
//===================================================================
B0=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,2,3,1,0,2);//------MA del High
C0=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,3,3,1,0,2);//--MA del Low
A1=iCustom(NULL,0,"SD Line-MultiTime-03",period,TimeFrame,method,price,2,1);
B1=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,2,3,1,0,1);//------MA del High
C1=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,3,3,1,0,1);//--MA del Low
Print("Sl",period," ",TimeFrame," ",method," ",price," ",A1," ",B1," ",C1);
Print("MA",Periods," ",TimeFrame," ",A1," ",B0," ",C0);
if(NewBar2()) {
Buy=0; Sell=0;
total=OrdersTotal();
Print(StringConcatenate("Nueva Vela,",TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS)));
y el indicador, que calcula la media en un timeframe diferente (lo hice yo, asi que no sera nada ortodoxo, pero bueno
//+------------------------------------------------------------------+
//| I-MA-Multitime.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_color2 Yellow
#property indicator_color3 Blue
//
extern int period=80;
extern int TimeFrame=15;
extern int price=0; // PRICE_CLOSE
extern int method=3; // MODE_SMA
extern bool Smooth=1;
double Curve1[],Curve2[],Curve3[],Curve4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void init() {
IndicatorBuffers(1);
IndicatorShortName("I-MA-Multitime");
//
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Curve1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Curve2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,Curve3);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,Curve4);
return;
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start() {
int i,j,limit,cbars,a,x,e;
double maxA,maxC,minL;
//---------------------------------------------------
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
return(-1);
e = Bars-counted_bars;
limit=e;
//----------------------------------------------------
// ---------- CALCULO DE ARRAYS EN TIMEFRAME EQUIVALENTES
double MFClose[],MFOpen[],MFMax[],MFMin[];
ArrayResize(MFClose, e);
ArraySetAsSeries(MFClose, true);
ArrayResize(MFOpen, e);
ArraySetAsSeries(MFOpen, true);
ArrayResize(MFMax, e);
ArraySetAsSeries(MFMax, true);
ArrayResize(MFMin, e);
ArraySetAsSeries(MFMin, true);
//----------------------------------------------------
for(i=0;i<=e;i++) {
MFClose=0;
MFOpen=0;
MFMax=0;
MFMin=0;
}
for(i=0;i<=e;i++) {
if(MathFloor(i/TimeFrame)*100==(i*100/TimeFrame)) {
maxA=0;
minL=2;
for(j=0;j<TimeFrame>maxA) maxA=High[i+j];
if(Low[i+j]<minL) minL=Low[i+j];
}
}
a=(MathFloor(i/TimeFrame)+1)*TimeFrame;
MFClose=Close[a];
a=(MathFloor(i/TimeFrame)+1)*TimeFrame;
MFOpen=Open[a];
MFMax=maxA;
MFMin=minL;
}
//----------------------------------------------------
// ----- CALCULO de los vect Aux1 y 2 (los del period y period/2)
double Aux1[],Aux2[],Aux3[];
ArrayResize(Aux1, e);
ArraySetAsSeries(Aux1, true);
ArrayResize(Aux2, e);
ArraySetAsSeries(Aux2, true);
ArrayResize(Aux3, e);
ArraySetAsSeries(Aux3, true);
//----------------------------------------------------
if(price==0) {// CLOSE prices
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(MFClose,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==1) {// OPEN prices
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(MFOpen,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==2) {// HIGH prices
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(MFMax,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==3) {// LOW prices
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(MFMin,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==4) {// MEDIAN prices
for(x = 0; x < e; x++) {
Aux3[x]=(MFMax[x]+MFMin[x])/2;
}
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(Aux3,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==5) {// TYPICAL prices
for(x = 0; x < e; x++) {
Aux3[x]=(MFMax[x]+MFMin[x]+MFClose[x])/3;
}
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(Aux3,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
if(price==6) {// WEIGHTED prices
for(x = 0; x < e; x++) {
Aux3[x]=(MFMax[x]+MFMin[x]+MFClose[x]+MFClose[x])/4;
}
for(x = 0; x < e; x++) {
Aux1[x]=iMAOnArray(Aux3,0,period*TimeFrame,0,method,x);// Subida
}
}
//----------------------------------------------------
//CALCULAMOS LA FUNCION A REPRESENTAR
//----------------------------------------------------
if(Smooth==0) {
for(i=0;i<=limit;i++) {
if(MathFloor(i/TimeFrame)*100==(i*100/TimeFrame)) {
for(j=0;j<=TimeFrame;j++) {
Curve1[i+j]=Aux1;
}
}
}
}
if(Smooth==1) {
for(i=0;i<=limit;i++) {
Curve1=Aux1[i];
}
}
//
//-----------------------------------------------------------
return(0);
}
//+------------------------------------------------------------------+
asi que problema resuelto, pero no asi la filosofia, que ya me jod*%&/ tener que meter un indic en el EA cada vez que lo necesite, no lo entiendo
Salu2,
Ese indicador tiene bastantes errores, no lo puedo compilar, parece un popurri de varios indicadores.
Solo utilizas un buffer y programas 4...
Y porque no coges una media de otro TF y la cargas en M1 y ya está?
Solo utilizas un buffer y programas 4...
Y porque no coges una media de otro TF y la cargas en M1 y ya está?
Código: Seleccionar todo
iMA(NULL,PERIOD_M15,80,0,MODE_SMA,PRICE_CLOSE,1)
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
si, programo 4 buffers, es una "plantilla general" que tengo, pero aqui solo uso 1 buffer
lo que no entiendo es por que te da error al compilar, a mi me funciona, voy a chequearlo esta noche (en medio del partido), porque creo que es la version que uso
para coger la media de otro TF, debe estar cargado en la sesion de metatrader?, o solo es necesario que ese otro TF este en el historial?, creo que lo probe y no me funciono
de todas maneras la estructura del indicador colgado la uso con otros indicadores no "estandards"
Salu2,
lo que no entiendo es por que te da error al compilar, a mi me funciona, voy a chequearlo esta noche (en medio del partido), porque creo que es la version que uso
para coger la media de otro TF, debe estar cargado en la sesion de metatrader?, o solo es necesario que ese otro TF este en el historial?, creo que lo probe y no me funciono
de todas maneras la estructura del indicador colgado la uso con otros indicadores no "estandards"
Salu2,
Si vis pacem, para bellum.
Dios me libre de los mansos, que de los fieros ya me libro yo.
Dios me libre de los mansos, que de los fieros ya me libro yo.
-
- Mensajes: 99
- Registrado: 22 Ago 2006 00:13
- Ubicación: Asturias
Ayuda sobre el icuston
hola,
Tengo un indicador, al qque quiero usarlo desde mi Ea.
Las llamadas al indicador desde la Ea, no creo que tenga problemas.
¿Que variable declaro en el indicador para que me la devuelva? ¿hay alguna variable predefinida que es la que llama el icustom?
La variable a devolver seria algo sencillo, 1 compra 0 vender
un saludo
Tengo un indicador, al qque quiero usarlo desde mi Ea.
Las llamadas al indicador desde la Ea, no creo que tenga problemas.
¿Que variable declaro en el indicador para que me la devuelva? ¿hay alguna variable predefinida que es la que llama el icustom?
La variable a devolver seria algo sencillo, 1 compra 0 vender
un saludo
- nostrasladamus
- Mensajes: 313
- Registrado: 09 Feb 2009 13:27
- Ubicación: Sistema Referencia Inercial
el indicador devuelve en la pantalla del precio o en otra separada curvas, que son los arrays definidos en "IndicatorBuffers(1)" .
cuando llamas al iCustom (al indicador), le tienes que decir cual de las curvas quieres que te devuelva. Esa es la forma de comunicarse entre el EA y el indicador
En el ejemplo:
B0=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,2,3,1,0,2);
el 0 (segundo parametro por el final) le dice que en B0 debe tener el valor de la primera curva del indicador.
el 2 (ultimo parametro) dice que devolvera el valor tomado en la segunda barra terminada, contada desde la barra actual del EA
Salu2,
cuando llamas al iCustom (al indicador), le tienes que decir cual de las curvas quieres que te devuelva. Esa es la forma de comunicarse entre el EA y el indicador
En el ejemplo:
B0=iCustom(NULL,0,"I-MA-Multitime-01",Periods,TimeFrame,2,3,1,0,2);
el 0 (segundo parametro por el final) le dice que en B0 debe tener el valor de la primera curva del indicador.
el 2 (ultimo parametro) dice que devolvera el valor tomado en la segunda barra terminada, contada desde la barra actual del EA
Salu2,
Si vis pacem, para bellum.
Dios me libre de los mansos, que de los fieros ya me libro yo.
Dios me libre de los mansos, que de los fieros ya me libro yo.
-
- Mensajes: 99
- Registrado: 22 Ago 2006 00:13
- Ubicación: Asturias
Re: Ayuda iCustom
Hola
Es necesario que el EA cargue y "remueva" el indicador llamado por el iCustom cada vez que lo llama?
Es necesario que el EA cargue y "remueva" el indicador llamado por el iCustom cada vez que lo llama?
BRRRRR! Humanos!!!
Re: Ayuda iCustom
Testeando un EA que llama a un iCustom me he dado cuenta de que este abre una ventana de indicador para el iCustom cada vez que lo llama. Como se puede evitar esto?
BRRRRR! Humanos!!!
Re: Ayuda iCustom
Cada indicador abre una sola ventana salvo que se cambien los parametros. (Lo mismo sucede con lo de cargar/remove que preguntaban en este hilo). Por cada conjunto de parametros sale un indicador dibujado.Butch escribió:Testeando un EA que llama a un iCustom me he dado cuenta de que este abre una ventana de indicador para el iCustom cada vez que lo llama. Como se puede evitar esto?
Para evitar que los dibuje incluye: HideTestIndicators(true);
Si te ha gustado este hilo del Foro, ¡compártelo en redes!