Problema: Script para cerrar todas las órdenes

Discusión sobre los artículos del blog Programando Forex.

Problema: Script para cerrar todas las órdenes

Notapor Juanma » Sab Jul 11, 2009 1:53 pm

Este hilo corresponde al artículo Problema: Script para cerrar todas las órdenes del blog Programando Forex
Avatar de Usuario
Juanma
Administrador del Sitio
 
Mensajes: 60
Registrado: Dom Ago 16, 2009 9:35 am

Re: Problema: Script para cerrar todas las órdenes

Notapor myk_toni » Dom Ago 16, 2009 10:11 am

Donde esta la solución? xD
myk_toni
 

Re: Problema: Script para cerrar todas las órdenes

Notapor Juanma » Dom Ago 16, 2009 10:13 am

Si pruebas el script te imprimirá un código de error… el código te dará la pista: fallan los precios Bid/Ask a los que le dices que cierre cada operación…

¿Alguien se anima a dar la solución? :D
Avatar de Usuario
Juanma
Administrador del Sitio
 
Mensajes: 60
Registrado: Dom Ago 16, 2009 9:35 am

Re: Problema: Script para cerrar todas las órdenes

Notapor GABRIEL197 » Jue Ago 20, 2009 10:50 am

Hola a todos ,

Bien, creo que la solución consiste en olvidarse de poner Bid o Ask, y en su lugar incluir la orden OrderSelectPrice() que recoge en el momento indicado el precio en cuestión. Por si acaso, se puede usar al final del contador la instrucción GetLastError y en caso de que su valor sea diferente a cero (es decir, que por el motivo que sea, la posición de esa pasada no se ha cerrado) descontar una unidad (i--) del índice del propio contador y que la pasada se repita hasta que su valor sea cero (sin error) .

Saludos
GABRIEL197
 
Mensajes: 2
Registrado: Jue Ago 20, 2009 10:43 am

Re: Problema: Script para cerrar todas las órdenes

Notapor GABRIEL197 » Jue Ago 20, 2009 10:53 am

Hola nuevamente ,

Perdón, quise decir la orden "OrderClosePrice()" , en lugar de Bid o Ask

:D
GABRIEL197
 
Mensajes: 2
Registrado: Jue Ago 20, 2009 10:43 am

Re: Problema: Script para cerrar todas las órdenes

Notapor Juanma » Jue Ago 20, 2009 8:13 pm

Exacto Gabriel. Estamos utilizando los precios Bid y Ask (que corresponden a la cotización actual del gráfico donde cargamos el script) para órdenes de cualquier par. Así si tomamos el Bid y Ask del EUR/USD para cerrar una posición GBP/USD nos devolverá un error.

Por lo tanto la solución es como indica Gabriel utilizar la función OrderClosePrice.

Respecto a reducir el contador una unidad por si nos da error reintentar cerrarla... ¿y si no lo conseguimos nunca? en ese caso estamos creando un bucle infinito y ese error es más grave todavía.

Volviendo al principio, nos queda pendiente el tema de distinguir entre órdenes MARKET (BUY/SELL) y las cuatro PENDING que existen (BUYSTOP/BUYLIMIT/SELLSTOP/SELLLIMIT). El problema es que ambas clases se cierran con dos funciones distintas OrderDelete y OrderClose. En el código añado una línea para distinguir unas de otras:

Código: Seleccionar todo
int start()
  {
   int error;

   for(int pos = OrdersTotal()-1; pos >= 0; pos--)
   {
      Print("Cerrando orden #",pos);
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);

      if(OrderType() != 0 && OrderType() != 1) OrderDelete(OrderTicket(),Yellow);
      else if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Yellow))
         {error=GetLastError(); Print("LastError = ",error); }
   }

   return(0);
  }


CierraTodas.mq4
(913 Bytes) 75 veces
Avatar de Usuario
Juanma
Administrador del Sitio
 
Mensajes: 60
Registrado: Dom Ago 16, 2009 9:35 am


Volver a Artículos del Blog

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado