Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 90

 
Vitaly Muzichenko:

Gracias, por alguna razón no funciona así con el lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

¿Cómo devuelvo el lote de la decimocuarta parada de venta en el lote instantáneo= 0,03?

 
Marina Korotkih:

Gracias, por alguna razón no funciona así con el lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
Este es el mínimo, si necesitas el pedido más reciente, entonces lo haré ahora
 
Vitaly Muzichenko:

Este es el mínimo, si necesitas el pedido más reciente, entonces lo haré ahora

Aquí se busca el lote más alejado del precio

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

Gracias, por alguna razón no funciona así con el lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

¿Cómo devuelvo el lote de la decimocuarta parada de venta en la instantánea lote= 0,03?



No la función funciona correctamente, ¿por qué el valor de retorno no es 1 y14 órdenes sino 2?

¿es un probador?

A mí me funciona correctamente.

 
Vitaly Muzichenko:

Aquí se busca el lote más alejado del precio


Gracias, eso tiene sentido. Lo encontré, ahora puedes encontrar todo lo que necesitas saber sobre él )

 
Alekseu Fedotov:

No la función funciona correctamente, ¿por qué el valor de retorno no es 1 y14 órdenes sino 2?

¿es un probador?

A mí me funciona correctamente.

Tienes que ordenar por precio, porque no puedes buscar por tamaño, la cuadrícula puede estar mezclada, y encontrarás el más grande o el más pequeño, pero no el primero ni el último
 
Marina Korotkih:

Gracias, eso tiene sentido. Lo encontré, ahora puedes encontrar todo lo que necesitas saber sobre él )

Para conocer toda la información sobre una orden o una posición, es mejor hacerlo con un ticket

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...¿por qué el valor de retorno no es 1 y14 órdenes sino 2?


Porque yo lo llamo así

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

Para conocer todos los detalles de una orden o posición, es mejor hacerlo desde el ticket

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

Pero para ello, primero tenemos que conocer el billete de la última orden 14

Entonces, ¿se debe seguir buscando primero el orden, como en la primera función?

O simplemente sustituir SELECT_BY_POS por SELECT_BY_TICKET

 
Marina Korotkih:

Pero para ello, primero hay que averiguar el ticket de la última orden 14

Entonces, ¿se debe seguir buscando primero el orden como en la primera función?

O simplemente sustituir SELECT_BY_POS por SELECT_BY_TICKET

Depende de lo que necesite comprobar. De hecho, podemos averiguar todo aquí, seleccionar el pedido por precio y luego escribir los parámetros necesarios para ello y devolver todo.

Usar bucles una vez más no es una buena idea, así que es mejor realizar todo en un solo bucle; no se nota en el comercio real, pero las pruebas en el probador se ejecutarán durante mucho tiempo. Sin embargo, todo depende de la tarea, alguien escribe programas para el probador, y alguien para el comercio, por lo que puede utilizar más de un ciclo.

P.D. Si el Asesor Experto es un pipsqueak, por supuesto, es mejor no utilizar un solo ciclo)