Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 95

 
hoz:

Sí. Las variables con i_ son variables de entrada (de la palabra intut, que puede ser cambiada por el usuario...), y pt es una variable global también, que es visible en todas partes...

No, el lote no se ha normalizado. Nunca lo encontré en el probador... ¿Y qué tiene que ver el lote con el objeto (error 4200)?

¿Qué tiene que ver el lote con esto? Si el lote no es válido, se llama a la función de tratamiento de errores, que hará que se construyan objetos.

Si el lote es erróneo, habrá un error en el comprobador. Dices que no construyes objetos, pero en la función

void pr (string txt)

sigue construyendo objetos:

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

Probablemente ahí es donde está enterrado el error. Puede que tengas que hacer algo ahí. Comenta la salida del gráfico en esta función. Si el error desaparece, se busca el motivo en la función.

void pr (string txt)
 
vovak_85:

Hola, soy nuevo en la programación de mql. Tengo un problema, tengo un indicador personalizado, no escrito por mí, genera señales de compra y venta en forma de flechas, para ello hay dos buffers en el indicador, el problema es que no puedo leer correctamente las señales del indicador al Asesor Experto para hacer una compra o venta.

El código del indicador:

...

Para pegar el código correctamente en el foro haz clic en el SRC y luego copia el código.

 

Hola, soy nuevo en la programación de mql. Tengo un problema, tengo un indicador personalizado, no escrito por mí, genera señales de compra y venta en forma de flechas, para ello hay dos buffers en el indicador, el problema es que no puedo leer correctamente las señales del indicador al Asesor Experto para hacer una compra o venta.

Código del indicador:

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

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

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
¡Lo sabré yo, gracias! ¿Arreglarlo?
Correcto en su post anterior.
 
vovak_85:
¡Lo sabré yo, gracias! ¿Arreglarlo?
Por supuesto. Eliminando un aguafiestas innecesario.
 
hoz:

pr es una función de impresión. Y el error, esto ya es una constante estándar. Lógicamente, esto no es aceptable en absoluto. Si todavía sospecha de la función pr, aquí está:


Pues bien, sustitúyalo por la impresión habitual y observe el registro.

allí se crea el objeto, el nombre del objeto no es único, por eso hay un error al crear un objeto.

 
artmedia70:

¿Qué tiene que ver esto con el lote? Si el lote es incorrecto, entonces se llama a la función de manejo de errores y causará la construcción de objetos.

Si el lote es erróneo, también habrá un error en el comprobador. Dices que no construyes objetos, pero en la función

Los objetos se siguen construyendo:

Probablemente ahí radica el problema. Puede que tengas que hacer algo ahí. Comenta la salida del gráfico en esta función. Si el error desaparece, se busca la causa del error en la función.



Ya lo había pensado yo, y tu respuesta acaba de dar en el mismo punto. El problema desapareció al comentar los lugares con esta función. Por lo visto, al utilizarlo, hay que borrar todos los objetos de la entrada a la vez, ¿no? Es decir, al principio de la función pr.
 
hoz:

Ya lo he pensado yo, y justo ahora tu respuesta ha dado en el mismo punto. El problema desapareció al comentar los lugares con esta función. Por lo visto, al utilizarlo hay que borrar todos los objetos de la entrada a la vez, ¿no? Es decir, al principio de la función pr, me refiero a...

Sinceramente, no conozco la lógica de su función. No sé si debería eliminar objetos o construirlos. Dime qué quieres que haga y veremos en qué se equivoca la lógica. Sin embargo, si la función intenta construir un objeto gráfico pero falla, significa que ya existe. Entonces, ¿qué sigue según la lógica de su programa? Puede construir un nuevo objeto con un nombre diferente (por ejemplo, añadir la hora actual al nombre del objeto (TimeToStr(TimeCurrent()))) o, si ya tiene un objeto pero necesita cambiar sus propiedades, no lo construya de nuevo, sino simplemente cambie sus propiedades. Entonces el error no volverá a aparecer.

Es tan sencillo como eso. Lo principal es saber lo que quieres. :)

 
vovak_85:

Hola, soy nuevo en la programación de mql. Tengo un problema, tengo un indicador personalizado, no escrito por mí, genera señales de compra y venta en forma de flechas, para ello hay dos buffers en el indicador, el problema es que no puedo leer correctamente las señales del indicador al Asesor Experto para hacer una compra o venta.

Código del indicador:


¿Está seguro de que tiene todos los corchetes en su lugar? Faltan en algunos lugares. Por eso su lógica es errónea. Y lo más probable es que el resultado no sea el esperado.