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)
Razón de la queja: