Una pregunta para los expertos en MQL - página 10

 
FAQ:
Si su orden se abre, compruebe la apertura, y si lo hace, puede abrir la segunda orden con cheque...

He escrito dos funciones que se abren de forma diferente según la situación y comprobaré al final de cada una de ellas (creo que serán una función independiente) qué y cuántas órdenes están abiertas y qué órdenes se perderán y se reabrirán.

Si usted es un experto en el campo del posicionamiento del EA en términos de forex, puede estar interesado en saber más sobre él y utilizarlo en su robot de trading. Me gustaría reiterar mi agradecimiento (perdón por la falta de detalles).

 

Buenos días.

Ha surgido un problema. No encuentro la función que devuelve el tamaño de la posición "agregada" de un instrumento determinado. He buscado en todo el foro, incluyendo la rama de I.KIM,https://www.mql5.com/ru/forum/131859 - hay - diferentes funciones para lotes, ¡excepto la que necesito!

Por ejemplo, si hay varias ofertas de "compra" abiertas en euros, ¿puede aconsejar cómo determinar su importe total?

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

¡Pregunta despejada! Se ha descubierto una función:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Eso no es todo.)
 

¿Qué tiene de malo? Entonces, ¿qué devuelve esta función?

"Devuelve la suma de los lotes de posiciones abiertas", ¿no es eso lo que dice?

https://www.mql5.com/ru/code/9394

 
Rita:

"Devuelve la suma de los lotes de posiciones abiertas", ¿no es eso lo que dice?

Así es. Nunca es el volumen total de una posición. Puedes abrir un lote y comprobarlo.
 

No necesito tener en cuenta las cerraduras. O mejor dicho, así es como:

Lo que necesito es esto. Si hay varias posiciones abiertas de venta y de compra, tengo que eliminar las posiciones contrarias (de compensación), así que - para permanecer sólo en una dirección.

Quería calcular primero la suma de todas las "bahías" y luego la suma de todas las "ventas". Después, encuentra la diferencia (es decir, el tamaño total de quién es mayor). Y esta "diferencia" debería dejarse en el mercado, -¡y eliminar todas las contrarias!

Entonces, ¿esta función GetAmountLotFromOpenPos no funcionará aquí? Por ejemplo, si pongo

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-¿No devolverá la cantidad total de lotes de todas las posiciones de venta?

 
Rita:

-¿No me devolverá la suma de los lotes de todas las posiciones de venta?

Lo siento si es así, está bien. El lunes. Mi cabeza aún no está totalmente comprometida :)
 
Rita:

No necesito tener en cuenta las cerraduras. O mejor dicho, así es como:

Lo que necesito es esto. Si hay varias posiciones abiertas de venta y de compra, tengo que eliminar las posiciones contrarias (de compensación), así que - para permanecer sólo en una dirección.

Quería calcular primero la suma de todas las "bahías" y luego la suma de todas las "ventas". A continuación, encuentra la diferencia (es decir, el tamaño total de quién es mayor). Y esta "diferencia" debería dejarse en el mercado, -¡y eliminar todas las contrarias!

Entonces, ¿esta función GetAmountLotFromOpenPos no funcionará aquí? Por ejemplo, si pongo

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-¿No devuelve la cantidad total de lotes de todas las posiciones de venta?

En el caso general:

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber);

 
Sí, eso es lo que hice para conseguir un balance "limpio".
Razón de la queja: