Cierres parciales de ordenes

Foro para cuestiones generales sobre la plataforma MetaTrader 4.

Cierres parciales de ordenes

Notapor Pepito454 » 01 Ago 2015, 18:37

Hola.
Estoy realizando un EA y cuando quiero cerrar la orden con el 75% de mi posición me lo hace perfectamente, pero el 25% restante el EA no lo reconoce, pues cuando se cumplen las condiciones de cierre la orden que ha sido creada no la cierra, si he conseguido el EA me devuelva el valores nuevos del lote y del ticket en un "Comment", pero como ya he comentado no la cierra.

Gracias
Pepito454
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Re: Cierres parciales de ordenes

Notapor MacD » 03 Ago 2015, 16:17

Has comprobado que mensaje de error devuelve la mt4?... si la funcion OrderClose no se realiza satisfacoriamente tendras que comprobar cual es el motivo, que nro de error se ha producido... es lo unico que se me ocurre para trazar donde esta el fallo
MacD
 
Mensajes: 79
Registrado: 08 Jul 2014, 03:48
Karma: 0

Re: Cierres parciales de ordenes

Notapor Pepito454 » 03 Ago 2015, 19:00

Lo cierto es que no le he colocado un "GetLasError" pero en el diario tampoco me dice que tenga algun error, simplemente comienzo con 0,17 lotes, me cierra 0,12 y en resultados veocomo me aparece la nueva orden con su nuevo numero de ticket y con 0,05 lotes y en el commentveo como también aparece y cuando se cumple la condición de cierre en el comment vuelve a 0,12 lotes y en resultados sigue la o rden de 0,05 lotes.
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Re: Cierres parciales de ordenes

Notapor FXWizard » 05 Ago 2015, 17:03

Hola Pepito454, probablemente se deba a que no estás redondeando el cierre parcial correctamente. Por ejemplo, si tienes abierto 1 lote y cierras un tercio, el código intentará cerrar 0.33333... lotes, por lo que antes de ordenar el cierre parcial deberás redondear a dos decimales el tamaño de posición usando la función NormalizeDouble (http://docs.mql4.com/convert/normalizedouble) para que lo haga correctamente. Coméntanos a ver si fuera por esto y si lo has resuelto.

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: Cierres parciales de ordenes

Notapor Pepito454 » 09 Ago 2015, 12:04

Perdonad por la confusión que yo mismo he creado, es que las vacaciones me han traicionado un poco, estaba fuera de casa y no tenia los medios mas adecuados, lo siento, la verdad es que si me da un error:
- Unknown ticket 1 for OrderModify function.
- Error en OrderModify. Codigo del error=4108.
Todo esto lo realizo en modo test. Se produce cuando cierra el 75% de la orden y como comentaba anteriormente en "Resultados" si que se ve que crea la nueva orden con el ticket = 2, y los lotes en 0,05 que es 25% restante, pero claro, según el error que me indica al pasar el ticket al valor 2 el programa sigue intentando leer el valor 1 como si tuviera que cambiar la secuencia.

//Cierro el 75% de la orden
if((NormalizeDouble((Bid<=takeprofit),5)))//el precio a alcanzado al takeprofit
{
OrdCloParc=OrderClose(ticket,(lote*0.75),Ask,3,clrRed);//Cerramos el 75% del lote
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrPink);//El stoploss lo llevamos hasta el precio de entrada de la orden
ObjectDelete("B");
OrdCloParc=true;
}
if(OrdCloParc==true)
{
for(i=0; i<OrdersTotal(); i++)
{
OrdSel=OrderSelect(i,SELECT_BY_POS);
if((OrdSel==true) && (OrderSymbol()==Symbol()) && (OrderMagicNumber()==MagicNumber) && (OrderTicket()== i))
{
OrdenSimboloBaj=1;
if(cierreBajista==1)
OrdClo=OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed);
}
}

Coloco un "Comment" donde le pregunto por "OrdCloParc" y "OrdenSimboloBaj", "OrdCloParc" me cambia a true pero "OrdenSimboloBaj" no.

Os pido de nuevo perdón por mi torpeza y el tiempo que os he echo perder en vano.
Un saludo.
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Re: Cierres parciales de ordenes

Notapor FXWizard » 12 Ago 2015, 17:47

Lo que te decía en el mensaje anterior, donde pones Lote*0.75, trata de redondearlo a dos decimales antes de meterlo en el OrderClose. Por ejemplo:

LotesCierreParcial =NormalizeDouble((0.75*Lotes), 2);
OrdCloParc=OrderClose(ticket,LotesCierreParcial,Ask,3,clrRed);//Cerramos el 75% del lote

Por cierto, me equivoqué con la función es NormalizeDouble, actualizo el post anterior (se me cruzaron lenguajes de programación :D).

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: Cierres parciales de ordenes

Notapor Pepito454 » 13 Ago 2015, 12:58

He echo lo que me has escrito y sigue haciendo lo mismo.
La cuestión es que me cierra la orden y en el siguiente Tick el ya me marca el error:
2015.08.13 12:33:39.002 2015.04.08 07:45 Mi Nube EURGBP,M15: Error en OrderModify cierre parcial de orden. Codigo del error=4108
2015.08.13 12:33:39.002 2015.04.08 07:45 Mi Nube EURGBP,M15: OrderModify error 4108
2015.08.13 12:33:39.002 2015.04.08 07:45 Mi Nube EURGBP,M15: unknown ticket 1 for OrderModify function
2015.08.13 12:33:39.002 2015.04.08 07:45 Mi Nube EURGBP,M15: close #1 sell 0.13 EURGBP at 0.72926 sl: 0.73526 at price 0.72679
2015.08.13 12:31:52.471 2015.04.07 04:30 Mi Nube EURGBP,M15: open #1 sell 0.17 EURGBP at 0.72926 sl: 0.73526 ok
2015.08.13 12:31:35.264 Mi Nube inputs: SL=60; TP=26; Capital=10000; CapArriesgar=1;

Y en Resultados se puede ver como aparecen la orden parcial cerrada y la nueva orden creada con el 25% estante:
Num Fecha Tipo Orden Volumen Precio SLoss TProfit Beneficios
1 2015.04.07 04:30 sell 1 0.17 0.72926 0.73526 0.00000 0.00
2 2015.04.08 07:45 close 1 0.13 0.72679 0.73526 0.00000 50.16
3 2015.04.08 07:45 sell 2 0.04 0.72926 0.73526 0.00000 0.00

E incluso la variable "i" que es la que coloco para contar las ordenes activas cuando se cumple la condicion de cierre se pone a "0" y no cierra la última orden debido al error.
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Re: Cierres parciales de ordenes

Notapor Pepito454 » 13 Ago 2015, 13:20

Perdon, el error verdadero es este, el anterior me sale tambien al querer modificar el stoploss para llevarlo a "Breakeven"
2015.08.13 13:17:15.562 2015.04.08 08:00 Mi Nube EURGBP,M15: OrderClose error 4108
2015.08.13 13:17:15.562 2015.04.08 08:00 Mi Nube EURGBP,M15: unknown ticket 1 for OrderClose function
2015.08.13 13:17:15.431 2015.04.08 07:45 Mi Nube EURGBP,M15: close #1 sell 0.12 EURGBP at 0.72926 sl: 0.73526 at price 0.72677
2015.08.13 13:16:38.852 2015.04.07 04:30 Mi Nube EURGBP,M15: open #1 sell 0.17 EURGBP at 0.72926 sl: 0.73526 ok
2015.08.13 13:16:32.923 Mi Nube inputs: SL=60; TP=26; Capital=10000; CapArriesgar=1;
2015.08.13 13:11:04.209 Expert Mi Nube EURGBP,M15: removed
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Siguiente

Volver a MetaTrader 4

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados