Saber si la ultima operacion cerrada es BUY o SELL

Espacio para compartir y debatir sobre Asesores Expertos de MetaTrader

Saber si la ultima operacion cerrada es BUY o SELL

Notapor DistriFx » 02 May 2017, 08:42

Hola de nuevo chicos. Soy un cansino de las preguntas jejeje. Me ayudasteis mucho con lo del BE, y ahora os pido de nuevo ayuda porque no termino de sacar una funcion.
Os explico. Mi intencion es que de todas las operaciones ya cerradas y que por consiguiente estan en la pestaña Historial, hacer una funcion que sepa si la ultima operacion (por orden de cierre) de ese historial es BUY o SELL.

Os pongo el codigo que llevo hecho pero no me termina de funcionar.

bool ultimaCerrada()
{
int total=OrdersHistoryTotal();
bool tipo= false;
for(int pos=0;pos<total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderType()==OP_BUY) tipo= true;
if (OrderType()==OP_SELL) tipo= false;
}
}
return tipo;
}

Bueno, os agradeceria de nuevo vuestrra ayuda.

Saludos
DistriFx
 
Mensajes: 10
Registrado: 18 Dic 2016, 12:20
Karma: 0

Re: Saber si la ultima operacion cerrada es BUY o SELL

Notapor cdtrader » 02 May 2017, 14:07

asi obtienes el tipo de orden que fue la ultima:
Código: Seleccionar todo
int ultimaCerrada()
{
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
return(OrderType());
}

siendo los siguientes valores los correspondientes:
buy=0
sell=1
Imagen
Avatar de Usuario
cdtrader
 
Mensajes: 1428
Registrado: 23 Ago 2014, 13:47
Karma: 17

Re: Saber si la ultima operacion cerrada es BUY o SELL

Notapor DistriFx » 03 May 2017, 12:34

Hola cdtrader. Muchas gracias por el codigo. Aunque al compilar me aparece este error:

')' - not all control paths return a value BUYSELLProbe.mq4 118 1

Intentare trabajar sobre esto que me has pasado a ver si lo consigo. Gracias de nuevo.
DistriFx
 
Mensajes: 10
Registrado: 18 Dic 2016, 12:20
Karma: 0

Re: Saber si la ultima operacion cerrada es BUY o SELL

Notapor cdtrader » 03 May 2017, 12:57

Los tipos de órdenes aparte de 0 o 1 también pueden ser 2,3,4,5 porque también están las órdenes pendientes, es eso

Enviado desde mi Moto G (4) mediante Tapatalk
Imagen
Avatar de Usuario
cdtrader
 
Mensajes: 1428
Registrado: 23 Ago 2014, 13:47
Karma: 17

Re: Saber si la ultima operacion cerrada es BUY o SELL

Notapor Refresko » 06 May 2017, 17:25

Prueba con este, yo aun no lo pruebo!


Código: Seleccionar todo
int UltimaCerrada()
  {
  int tipo=-1;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
        {
         if(OrderType()==0 || OrderType()==1) // por si solo quieres compras y ventas
           {
            tipo=OrderType();
            break;
           }
        }
     }
   return tipo;
   }
No puedes cometer/ dos veces el mismo error/ la segunda vez sera/ Por eleccion...
Avatar de Usuario
Refresko
 
Mensajes: 165
Registrado: 12 Dic 2011, 22:56
Karma: 5

Re: Saber si la ultima operacion cerrada es BUY o SELL

Notapor Nightmare » 07 May 2017, 07:59

En esencia

1) las ordenes mas recientes tienen numeros mas altos, por eso debe ir de manera descendente o mas directamente OrdersHistoryTotal()-1.

2) el compilador se pregunta cual seria el valor de la funcion para cada alternativa del if, (si se cumple se ejecuta un bloque que debe dar un valor, si no se cumple se ejecuta otro bloque que debe tener un valor), por eso te da el mensaje "not all control paths return a value"
Es un error clasico ya que solo retorna un valor cuando la seleccion fue correcta. Solucion: asigna el OrderSelect a una variable y le aplicas un if para el caso correcto y en else con un codigo de error.
Nightmare
 
Mensajes: 246
Registrado: 22 Feb 2017, 20:10
Karma: 5


Volver a Expert Advisors

¿Quién está conectado?

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