Ayuda a la codificación - página 173

 

hola coders,

he creado un indicador muy simple que muestra una alerta cuando la última barra está por encima de la sma10 o por debajo de ella. nada más. pero me gustaría comprobarlo en 3 marcos de tiempo diferentes. nunca he trabajado con indicadores mtf y por eso tengo algunos problemas con él. esta versión comprueba el gráfico m1, m5 y m15. funciona bien pero existe el problema de que la alerta se muestra en cada tick y no sólo una vez en el marco de tiempo que se cumplen las condiciones.

me gustaria que alguien me ayudara con eso. creo que solo puede ser un problema de sintaxis..

¡gracias!

Archivos adjuntos:
test.mq4  3 kb
 

Hola,

Tengo que preguntar de nuevo, porque no encuentro un error, pero sólo me salen los valores erróneos :-(

¿Quizás alguien vea mi fallo?

Este es el código del indicador

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}
 
sunshineh:
Hola,

Tengo que preguntar de nuevo, porque no puedo encontrar un error, pero estoy recibiendo sólo los valores erróneos :-(

¿Quizá alguien vea mi fallo?

Este es el código del indicador

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}

sunshineh,

No tienes que dividir la desviación por 2 para obtener el máximo y el mínimo - elimina la parte "/2" y debería estar bien siempre que el precio medio esté bien. La anchura del canal es siempre constante: se debe utilizar la desviación estándar actual para el con, no otro valor. Y el último, por lo que veo, ObjectGetValueByShift("std channel", i); no funciona en el canal de desviación estándar como funciona en las líneas de tendencia. Qué valor está devolviendo no lo sé (mira el indicador adjunto y verás por qué digo que no sé qué es ese precio)

Archivos adjuntos:
_test_4.mq4  3 kb
 

HI mladen,

adjunto un indicador de muestra que utiliza símbolos internos preestablecidos, bastante difícil para mí de comprender en el interior, ¿es posible obtener algunos consejos de este indicador para adaptar a mis indicadores o / y los indicadores de la suya para evitar el repintado o refrescar la línea de cambio de problemas / problemas de garrapatas o hacer algún tipo de sy nergy? Gracias por mirar.

 
kenwa:
HI mladen, adjunto un indicador de ejemplo que utiliza símbolos internos preestablecidos, bastante difícil para mí de comprender en el interior, ¿es posible obtener algunas pistas de este indicador para adaptar a mis indicadores o / y los indicadores de la suya para evitar el repintado o refrescar el problema de la línea de cambio / problemas de garrapatas o hacer algún tipo de sy nergy? Gracias por mirar.

kenwa

No trabajo en cosas descompiladas. Lo siento

 
mladen:
kenwa no trabajo en cosas descompiladas. Lo siento

ok, entonces lo quito, pero curiosamente por qué nadie lo ve pero se puede saber que es material decompilado

 
kenwa:
ok, entonces lo quito, pero curiosamente por qué nadie lo ve, pero se puede saber que es decomplie cosas

Todos los que saben un poco de codificación saben que es un código descompilado

E incluso si usted no sabe nada en absoluto acerca de cualquier codificación, cuando usted tiene una cosa como esta :

/*

Generado por el descompilador EX4-TO-MQ4 FREEWARE V4.0.451.1 [-]

Sitio web: MetaTrader 5 Trading Platform / MetaQuotes Software Corp.

Correo electrónico : support@metaquotes.net

*/

escrito en las primeras líneas del indicador que has publicado parece bastante obvio que cualquiera podría ver que es un código descompilado, así que, por favor ...

Todo lo mejor

 

mladen, mi código no está descompilado. ¿quizás quieras echarle un pequeño vistazo?

 
Marbo:
mladen, mi código no está descompilado. ¿quizás quieras echarle un vistazo?

Marbo

Puedes hacer algo como en el adjunto. Le alertará una vez por barra de marco de tiempo objetivo o cuando el estado (tipo de la alerta) cambie. Si desea ignorar el tipo, omita la comprobación del tipo en el procedimiento doAlert. Si desea omitir la comprobación del tiempo (en cuyo caso sólo se comprobaría el tipo) entonces omita la comprobación del tiempo en el procedimiento doAlert

Archivos adjuntos:
test_4.mq4  3 kb
 

Hola mladen,

Seguramente recordarás que la semana pasada pedí ayuda con un EA de cruce de MA. y por supuesto me referí indebidamente a la sección de Elite. Donde puedes sugerir que debo pedir esto por favor. He buscado y no he encontrado una respuesta obvia. Para refrescar la memoria esta era la especificación:

1.Cruce de SMA EMA

2.Al cierre de la vela

3.OCO con la colocación de una nueva orden en la nueva dirección

4.Posibilidad de ajustar el deslizamiento

5.Señal audible de cruce

6.El cruce no es un verdadero cruce sin un gap de pips ajustable

7.Si es posible el monitoreo en la vela, así que si una vela es más de X veces el ATR (número ajustable para contar), una orden se coloca con una alarma en la dirección de esta vela, y del mismo modo para cerrar una orden, pero luego no iniciar una nueva

8. preferentemente si se coloca una orden como en 7 para que suene una alarma

9.La fiabilidad del cruce es primordial. En mis gráficos - FXCM, Vantage, FX Choice - algunos EAs, incluyendo Universal Cross no toman las operaciones o son demasiado tarde

10. 10. SL ajustable, pero se puede dejar fuera si no es necesario

11.Trailing Stop

12.SL va al punto de equilibrio automáticamente después de X pips de beneficio

13. Número máximo de operaciones abiertas

14. Número mágico

Saludos

Jeff

Razón de la queja: