¿Cómo codificar? - página 269

 

Variable Dema mal configurada

No soy capaz de configurar correctamente la sección de Variables DEMA, sus sintaxis. Los códigos DEMA1, DEMA2,DEMA3 son correctos.

Por favor, ayude a corregir la sección de Variables DEMA.

if (TradeOrAlert) {

if (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0);

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0);

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

if (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol())}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol());}

}

g_bars_276 = Bars;

return (0);

}

//----DEMA VARIABLES----No se ha configurado correctamente, se necesita ayuda-----

int init() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA1);

}

int inicio() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA2);

}

int inicio() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA3);

}

//

 

Variable Dema establecida incorrectamente

Me encuentro con el problema de establecer la sintaxis correctamente en la sección "VARIABLES DEMA" del código siguiente.

También me dicen qué incluir después de la sección "#include " con respecto a las Variables Dema.

Obtengo los errores

'DEMA1' - variable no definida.

DEMA2' - variable no definida.

DEMA3' - variable no definida.

Por favor, ayuda.

if (TradeOrAlert) {

if (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0);

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0);

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

if (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol())}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol());}

}

g_bars_276 = Bars;

return (0);

}

//----DEMA VARIABLES----No se ha configurado correctamente, se necesita ayuda-----

int inicio() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA1);

}

int inicio() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA2);

}

int inicio() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0);

return(DEMA3);

}

//

 

Alerta MA+Stoch...por favor

me pueden ayudar a construir el indicador : MA+stoch con alerta

stoch(5,3,3);MA(8);MA(15);MA(30)....

alerta cuando MA(8)>MA(15)>MA(30) y %K cruzan por encima de %D pero menos del nivel 50

alerta cuando MA(8)<MA(15)<MA(30) y %D cruzan por encima de %K pero más del nivel 50

muchas gracias

mi inglés es lengua extranjera

¡con simpatía!

 
lequoctrieu:
pueden ayudarme a construir el indicador : MA+stoch con alerta

stoch(5,3,3);MA(8);MA(15);MA(30)....

alerta cuando MA(8)>MA(15)>MA(30) y %K cruzan por encima de %D pero menos del nivel 50

alerta cuando MA(8)<MA(15)<MA(30) y %D cruzan por encima de %K pero más del nivel 50

muchas gracias

mi inglés es Foreign Language

¡con simpatía!

Hola,

fragmento de código de uno de mis indis, tienes que adaptarlo a tus necesidades:

extern bool AlertON=false;

extern bool EmailON=true;

extern bool SoundON=false;

extern bool VoiceON=false;

extern bool SMSON=false;

extern string ExtSoundFileName = "";//se requieren archivos de sonido externos, que eliminar

FastMA = fastMAnow;

SlowMA = slowMAnow;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

si (i == 1 && flagval1==0)

{

flagval1=1;

flagval2=0;

if (AlertON==true) Alert("Señal de COMPRA en Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "Señal de COMPRA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "Señal de COMPRA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//wav de voz propio

}

CrossUp = Low - Range*0.5;

}

else if ((fastMAnow slowMAprevious))

{

if (i == 1 && flagval2==0)

{

flagval2=1;

flagval1=0;

if (AlertON==true) Alert("Señal de VENTA en Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Señal de VENTA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Señal de VENTA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//pipes etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//wav de voz propio

}

CrossDown = High + Range*0.5;

}

}

return(0);

}

 

Alerta MA+Stoch...por favor

ixbone:
Hola,

fragmento de código de uno de mis indis, tienes que adaptarlo a tus necesidades:

extern bool AlertON=false;

extern bool EmailON=true;

extern bool SoundON=false;

extern bool VoiceON=false;

extern bool SMSON=false;

extern string ExtSoundFileName = "";//se requieren archivos de sonido externos, que eliminar

FastMA = fastMAnow;

SlowMA = slowMAnow;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

si (i == 1 && flagval1==0)

{

flagval1=1;

flagval2=0;

if (AlertON==true) Alert("Señal de COMPRA en Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "Señal de COMPRA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "Señal de COMPRA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//wav de voz propio

}

CrossUp = Low - Range*0.5;

}

else if ((fastMAnow slowMAprevious))

{

if (i == 1 && flagval2==0)

{

flagval2=1;

flagval1=0;

if (AlertON==true) Alert("Señal de VENTA en Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Señal de VENTA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Señal de VENTA en Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//pipes etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//wav de voz propio

}

CrossDown = High + Range*0.5;

}

}

return(0);

}

Muchas gracias...ixbone

Escribo código muy mal...Así que, no puedo entender su código.... usted puede ayudarme a construir indicador(.mq4) con el fin de utilizar

si es así, le agradezco mucho

¡le deseo un buen día de trabajo!

 

¿Cómo compruebo si el máximo de la barra actual es 2 pips mayor que el máximo de la barra anterior?

Lo siento, lugar equivocado para esta pregunta.

Por favor, elimine este administrador.

Gracias.

 

Cierre parcial de un pedido

Hola,

Estoy tratando de codificar un EA que tome ganancias en dos niveles. Para ello quiero dividir la orden original de manera que "x" lotes se tomen en el primer objetivo de beneficio y los lotes restantes se tomen en el segundo objetivo de beneficio. Para ello estoy utilizando dos funciones OrderClose().

La primera función OrderClose() funciona perfectamente pero parece que también cierra la orden existente y genera una nueva entrada para los lotes restantes.

¿Podría alguien orientarme sobre cómo manejar este "nuevo" ticket/orden para que pueda ser procesado por la segunda función CloseOrder()?

Saludos

Jim

 
jimdee:
Hola,

Estoy tratando de codificar un EA que tome ganancias en dos niveles. Para ello quiero dividir la orden original para que "x" lotes se tomen en el primer objetivo de beneficio y los lotes restantes se tomen en el segundo objetivo de beneficio. Para ello estoy utilizando dos funciones OrderClose().

La primera función OrderClose() funciona perfectamente pero parece que también cierra la orden existente y genera una nueva entrada para los lotes restantes.

¿Podría alguien orientarme sobre cómo manejar este "nuevo" ticket/orden para que pueda ser procesado por la segunda función CloseOrder()?

Saludos

Jim

Sólo una idea. Puedes intentar utilizar dos operaciones en lugar de una si el cierre parcial para obtener beneficios es más difícil de conseguir. Y gestionar esas operaciones por su tiempo de apertura.

 
jimdee:
Hola,

Estoy tratando de codificar un EA que tome ganancias en dos niveles. Para ello quiero dividir la orden original para que "x" lotes se tomen en el primer objetivo de beneficio y los lotes restantes se tomen en el segundo objetivo de beneficio. Para ello estoy utilizando dos funciones OrderClose().

La primera función OrderClose() funciona perfectamente pero parece que también cierra la orden existente y genera una nueva entrada para los lotes restantes.

¿Podría alguien orientarme sobre cómo manejar este "nuevo" ticket/orden para que pueda ser procesado por la segunda función CloseOrder()?

Saludos

Jim

La gente tiene diferentes referencias, a mi me gusta usar el cierre parcial porque hay menos operaciones para el broker.

Cada vez que el cierre parcial tenga lugar, el broker actuará como si la orden restante fuera una nueva orden, por lo que asignará un nuevo ticket. Pero realmente no importa, siempre y cuando su próximo paso el método para identificar las operaciones no se basa en el ticket de la orden, puede ser basado en los lotes de la orden, o puede asignar una variable para indicar EA cuando la etapa está en.

El cierre parcial es un poco complicado de manejar completamente correcto si se da la siguiente situación

1. Sus órdenes pueden ser de diferente tamaño de lote debido a MM.

2. 2. Usted tiene múltiples órdenes existentes al mismo tiempo de diferente tamaño de lote.

Si su EA tiene las situaciones anteriores y si no tiene experiencia en la codificación, creo que puede utilizar el enfoque de órdenes múltiples.

 

Solución rápida para un problema sencillo. Gracias * a ti : )

Me gustaría devolver las siguientes variables :

1. El precio de apertura de la primera barra del último lunes registrado (barra horaria).

2. 2. El precio de cierre de la última barra registrada el miércoles (barra horaria).

¿Alguien sabe cómo hacerlo? He intentado obtener las variables tal y como pasan con :

//-------------------------------------------------------

if (currentday == 1 && currenttime == 0)

{

MondayOpenPrice = iOpen(Symbol(),PERIOD_H1,0);

}

//--------------------------------------------------------

El problema con lo anterior es que no siempre puedo mantener mi metatrader funcionando toda la semana para mantener estas variables.

Así que voy a necesitar la EA para mirar hacia atrás en la historia para el primer precio de apertura registrada en un lunes, etc .

Muchas gracias por su tiempo.