¿Cómo codificar? - página 341

 

Puede alguien ser tan amable de ayudarme a resolver esto:

Hay un problema con el código que he adjuntado debajo de este mensaje..., ¡siempre da la señal al principio de una formación de velas!

esto me ha llevado a entrar en el comercio tarde más especialmente en los marcos de tiempo más altos. Puede usted ayudarnos a que el código dé la alerta sólo cuando el precio actual de la MA suba para la compra y baje para la venta, en lugar de esperar el comienzo de otra vela.

Gracias Archivos adjuntos

Archivos adjuntos:
smacd.mq4  4 kb
 

Hola Mladen, ¿sabes qué puedo utilizar para desencadenar mi criterio de apertura de operaciones?

Lo que quiero saber es cómo puedo desencadenar una operación si la vela cierra por encima o por debajo de la línea media móvil por 10pips.

El sistema activará la operación basándose en si cierra por encima o por debajo de la línea de media móvil.

Estoy pensando en usar iClose, pero no tengo idea de cómo implementarlo. Aprecio su ayuda.

Gracias.

Ryan

 
tkuan77:
Hola Mladen, ¿sabes qué puedo usar para activar mis criterios de apertura de operaciones?

Lo que quiero saber es cómo puedo desencadenar una operación si la vela cierra por encima o por debajo de la línea media móvil por 10pips.

El sistema activará la operación basándose en si cierra por encima o por debajo de la línea de media móvil.

Estoy pensando en usar iClose, pero no tengo idea de cómo implementarlo. Aprecio su ayuda.

Gracias.

Ryan

Hola Mladen,

He hecho el código, parece estar trabajando, sin embargo, el comercio a veces no se activa cuando los criterios se cumple y no tengo idea de cómo ir sobre él de aquí en adelante.

//+------------------------------------------------------------------+

//---- parámetros de entrada

extern double TakeProfit = 250.0;

extern double Lots = 0.1;

extern double StopLoss = 200.0;

//+------------------------------------------------------------------+

//| función de inicialización de los expertos ||.

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| función de desinicialización experta ||

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| función de inicio experto ||

//+------------------------------------------------------------------+

double pBid, pAsk

datetime newbar;

int inicio()

{

//+------------------------------------------------------------------+

if(newbar==Time[0])return(0);

else newbar=Time[0];

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

double Up_MA = iMA(NULL,0,10,0,MODE_LWMA,PRICE_HIGH,0);

double Dwn_MA = iMA(NULL,0,10,0,MODE_LWMA,PRICE_LOW,0);

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//-- Activar el comercio

//+------------------------------------------------------------------+

int ticket, total;

double CD_Close = iClose(NULL,0,1);

total = OrdersTotal(); // comprueba el número total de operaciones actualmente abiertas

if(total < 2)

{

if (CD_Close >= Up_MA+50*Point)//Hour()==Entry_Hour_1st && Minute()==Entry_Minute_1st)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mi EA",Entry_magicNo_1st,0,Green);

return(0);

}

if (CD_Close <= Dwn_MA-50*Point)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mi EA",Entry_magicNo_1st,0,Red);

return(0);

}

return(0);

}

return(0);

}

//+------------------------------------------------------------------+

 
tkuan77:
Hola Mladen,

He hecho el código, parece que está funcionando, sin embargo, el comercio a veces no se activa cuando los criterios se cumplen y no tengo idea de cómo hacerlo a partir de aquí.

//+------------------------------------------------------------------+

//---- parámetros de entrada

extern double TakeProfit = 250.0;

extern double Lots = 0.1;

extern double StopLoss = 200.0;

//+------------------------------------------------------------------+

//| función de inicialización de los expertos ||.

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| función de desinicialización experta ||

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| función de inicio experto ||

//+------------------------------------------------------------------+

double pBid, pAsk

datetime newbar;

int inicio()

{

//+------------------------------------------------------------------+

if(newbar==Time[0])return(0);

else newbar=Time[0];

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

double Up_MA = iMA(NULL,0,10,0,MODE_LWMA,PRICE_HIGH,0);

double Dwn_MA = iMA(NULL,0,10,0,MODE_LWMA,PRICE_LOW,0);

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//-- Activar el comercio

//+------------------------------------------------------------------+

int ticket, total;

double CD_Close = iClose(NULL,0,1);

total = OrdersTotal(); // comprueba el número total de operaciones actualmente abiertas

if(total < 2)

{

if (CD_Close >= Up_MA+50*Point)//Hour()==Entry_Hour_1st && Minute()==Entry_Minute_1st)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mi EA",Entry_magicNo_1st,0,Green);

return(0);

}

if (CD_Close <= Dwn_MA-50*Point)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mi EA",Entry_magicNo_1st,0,Red);

return(0);

}

return(0);

}

return(0);

}

//+------------------------------------------------------------------+

¿Puedes mostrar algunos casos en los que debería haber desencadenado una operación y no lo hizo?

 

Hola Mladen,

Adjunta la captura de pantalla.

Saludos

Ryan

Archivos adjuntos:
untitled.jpg  42 kb
 

Hola Mladen, ¿podría ser algún tipo de error en algunas líneas lo que está causando este error?

Saludos

 
tkuan77:
Hola Mladen, ¿podría ser algún tipo de error en algunas líneas lo que está causando este error? Saludos

tkuan77

Como primer paso comprueba en la pestaña de diario y expertos del terminal si sale algún mensaje de error

 
mladen:
tkuan77 Como primer paso comprueba en la pestaña de diario y expertos del terminal si sale algún mensaje de error ahí

Hola mladen, gracias, el problema ya está resuelto.

Sin embargo, mi siguiente pregunta es ¿cómo puedo ordenar las operaciones en consecuencia?

Por ejemplo:

Cantidad total de operaciones en cualquier momento = 2

1 operación por cada conjunto de criterios. ¿Cómo me aseguro de que el sistema no active más de 1 operación para cada conjunto particular si los criterios se cumplen más de una vez?

Abajo están mis códigos para referencia:

total = OrdersTotal(); // comprueba el número total de operaciones actualmente abiertas

if(total < 2)

{

if (Hour()==Entry_Hour_1st || Hour()==Entry_Hour_2nd)

{

//Si no hay ninguna operación actualmente abierta bajo este criterio, comprueba si se cumplen las condiciones, si es así, activa una operación, si no, no activa una operación.

}

if (Hour()==Entry_Hour_3rd || Hour()==Entry_Hour_4th)

{

//Si no hay ninguna operación abierta bajo este criterio, comprueba si se cumplen las condiciones, si es así, activa una operación, si no, no la activa.

}

}

Agradezco su consejo. Gracias.

Saludos

 

¿Cómo deben tratarse exactamente las órdenes de los corredores ECN?

 
apprentice coder:
¿Cómo deben tratarse exactamente las órdenes de los corredores ECN?

aprendiz de codificador

La única diferencia es que en un broker ECN primero abres una orden con 0 campos sl y tp, y luego modificas la orden (si es necesario) para poner sl y tp, mientras que en un broker "normal" puedes poner sl y tp junto con la apertura de la orden. Todo lo demás es exactamente igual

Razón de la queja: