Compra/venta de EAs e indicadores - página 4

 
cifox:
Hola Maestros ......, ¿Podría ayudarme a hacer EA para la compra abierta o venta abierta en un tiempo...

He movido tu post a aquí.

Leer este hilo desde el primer post y usted encontrará algunos EAs.

 

¡Abrir sólo una compra y una venta por día!

Hola chicos,

Tengo un pequeño problema con mi EA. Se basa en el movimiento del precio y durante un día abre más de una posición. Quiero limitar esto pero no entendí como puedo hacerlo.

Lo que quiero hacer es algo así:

Si durante el día actual ya has abierto una posición de compra, no abras ninguna otra posición de COMPRA. Pero si encuentra una señal de venta, abra una señal de venta. En este caso, si después de esto encuentras otra señal de venta no abras otras posiciones de venta.

No sé cómo escribir esto y cuál es la posición correcta. ¿Me pueden ayudar?

¡¡¡Muchas gracias!!!

Saludos,

Mauro

EDIT:

En otro tema he encontrado este código pero no sé dónde y cómo adjuntarlo:

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

En este tema no hay nada sobre lo que estoy buscando... este tema es sobre comprar y vender al mismo tiempo....Pero de lo que estoy hablando es que si ya he abierto una orden de compra mi EA durante el día no tiene abierta una nueva orden de compra. Lo mismo si ya ha abierto una orden de venta.

Pero si abre una orden de compra, durante el día sólo puede abrir una orden de venta...siguiendo las reglas escritas arriba.

Ejemplo:

La hora es: hoy

El EA abre una orden de compra.

La posición alcanza el TakeProfit o el StopLoss, por lo que se cierra.

Ahora, el EA puede ver otra señal de compra pero al ver que ya ha abierto una ORDEN DE COMPRA en el tiempo anterior, no abre esta orden.

Ahora el EA ve una señal de VENTA, y al ver que aún no ha abierto una ORDEN DE VENTA, abre una posición de VENTA.

La posición alcanza el TakeProfit o el StopLoss, por lo que se cierra.

Ahora, el EA puede ver otra señal de venta pero al ver que ya ha abierto una ORDEN DE VENTA en la vez anterior, no abre esta orden.

Esto es lo que estoy buscando....

 
 

Ok, gracias por tu respuesta NewDigital. Ahora, creo que mi código es este:

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

El código de arriba es sólo para la posición de compra, por lo que de esta manera debería abrir sólo una posición de compra. Si hago lo mismo con el código de VENTA, debería abrir sólo una posición de venta, ¿no?

Gracias por su ayuda.

Mauro

 

MMM... el Metaeditor dice que hay un error...

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

Significa que éste

{[/CODE]

and

[CODE]}

está desequilibrada.

Compruebe en el código.

Lo siento, no soy un codificador así que no puedo ayudar mucho.

 

Hola newdigital...si, lo se por los farentesis....pero he comprobado todo el código y los farentesis están equilibrados....

mmm....No entiendo dónde está el problema....No obstante, seguiré comprobando... ¡Espero encontrar una solución!

Gracias por todo...

Mauro

 

Por ejemplo este:

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

La depuración de MT4 es un dolor de cabeza, pero si eres paciente puedes averiguar el problema.

Lo primero que diría es que donde MT4 te dice que está el problema... ¡no está! Lo siguiente que yo haría es empezar a recortar GRANDES trozos de código en la complicada sentencia IF que probablemente esté causando los problemas.

Por ejemplo, si tengo...

if(){

//second if

if(){

//third if

if(){

}

}

}

Eliminaría los if's 2 y 3 y sólo dejaría el if 1. Intente compilarlo. Si se compila, lo habrás reducido. Entonces pega de nuevo el 2 y el 3 y luego quita el 3. Prueba de nuevo. Sigue haciendo esto durante unos minutos y finalmente encontrarás el problema.

Buena suerte.

LUx