Uma pergunta para os especialistas em MQL - página 10

 
FAQ:
Se seu pedido abrir, verifique a abertura, e se abrir, você pode abrir o segundo pedido com um cheque...

Escrevi duas funções que abrem de forma diferente dependendo da situação e vou verificar no final de cada uma delas (acho que serão uma função separada) o que e quantas ordens estão abertas e quais ordens não serão atendidas e serão reabertas.

Se você é um especialista na área de posicionamento da EA em termos de câmbio, talvez esteja interessado em saber mais sobre ela e usá-la em seu robô comercial. Gostaria de reiterar meus agradecimentos (desculpe pela falta de detalhes).

 

Bom dia.

Surgiu um problema. Não consigo encontrar a função que retorna o tamanho da posição "agregada" de um determinado instrumento! Procurei em todo o fórum, incluindo a filial do I.KIM,https://www.mql5.com/ru/forum/131859 - há - funções diferentes para muitos, exceto para aquele que eu preciso!

Por exemplo, se houver várias "compras" abertas em EUR, você pode aconselhar como determinar seu valor total?

GetLot(EURUSD, OP_BUY, magia)

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);
}
 

Pergunta esclarecida! Uma função foi descoberta:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 
Não é isso )
 

Como isso está errado? Então o que essa função retorna?

"Retorna a soma de muitas posições em aberto " - não é isso que diz?

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

 
Rita:

"Retorna a soma de muitas posições em aberto" - não é isso que diz?

É isso mesmo. Nunca é o volume total de uma posição. Você pode abrir muito e verificar.
 

Eu não preciso levar em conta locs. Ou melhor, aqui está como:

O que eu preciso é disto. Se houver várias posições abertas de Venda e Compra, preciso remover as posições do balcão (de compensação), portanto - para permanecer apenas em uma direção.

Eu queria primeiro calcular a soma de todas as "baías", depois a soma de todas as "vendas". Depois disso, encontrar a diferença (isto é, cujo tamanho total é maior). E essa "diferença" deve ser deixada no mercado, - e todos os opostos devem ser removidos!

Então, esta função GetAmountLotFromOpenPos não vai funcionar aqui? Por exemplo, se eu definir

GetAmountLotFromOpenPos(EURUSD,OP_SELLL, -1)

-Não devolverá a quantidade total de lotes de todas as posições de venda?

 
Rita:

-não me devolverá a soma dos lotes de todas as posições de venda?

Desculpe se assim for, tudo bem. Segunda-feira. Minha cabeça ainda não está totalmente engajada :)
 
Rita:

Eu não preciso levar em conta locs. Ou melhor, aqui está como:

O que eu preciso é disto. Se houver várias posições abertas de Venda e Compra, preciso remover as posições do balcão (de compensação), portanto - para permanecer apenas em uma direção.

Eu queria primeiro calcular a soma de todas as "baías", depois a soma de todas as "vendas". Depois disso, encontrar a diferença (isto é, cujo tamanho total é maior). E essa "diferença" deve ser deixada no mercado, - e todos os opostos devem ser removidos!

Então, esta função GetAmountLotFromOpenPos não vai funcionar aqui? Por exemplo, se eu definir

GetAmountLotFromOpenPos(EURUSD,OP_SELLL, -1)

-Não devolverá a quantidade total de lotes de todas as posições de Venda?

No caso geral:

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

 
Sim, foi o que eu fiz para conseguir um equilíbrio "limpo".
Razão: