Вопрос знатокам MQL - страница 10

 
FAQ:
Открыть один ордер, проверить на открытие, если открылся - открывать второй с проверкой...

Спасибо, разобрался, надо было только немного серым веществом пошевелить))) я 2 функции написал которые по разному открывают в зависимости от ситуации в конце каждой прилеплю проверку (думаю в виде отдельной функции) каких ордеров и сколько открыто и каких не будет хватать те и будут повторно открываться.

leonid553 , Приветствую! Тему Вашу по спредам, применительно к валютам успешно реализовал, хочу сказать спасибо ёщё раз. (сорри за офтоп)

 

Доброе утро.

Встала проблема. Не могу найти функцию, которая возвращает размер "сувокупной" позиции заданного инструмента! Перелопатила весь поиск форума, в т.ч. и ветку И.КИМА, https://www.mql5.com/ru/forum/131859 - там есть - разные функции по лотам, кроме нужной мне!

Например, если открыто несколько сделок "бай" по евро, подскажите, как определить их суммарный размер?

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

Вопрос снимается! Обнаружилась функция:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 
Это не то )
 

Как не то ? А что же тогда эта ф-я возвращает?

"Возвращает сумму лотов открытых позиций " - написано ведь?

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

 
Rita:

"Возвращает сумму лотов открытых позиций " - написано ведь?

Все правильно. Это ни разу не совокупный объем позиции. Можете открыть лок и проверить.
 

Мне не нужно учитывать лок. Точнее вот как:

Мне надо вот что. Если есть открытые несколько позиций селл и бай, мне нужно убрать встречные (компенсирующие) позиции, так - чтобы остались только в одном направлении.

Я и хотела - вычислить сначала сумму всех "баев", потом сумму всеХ "селов". После чего, найти разность (т.е. чей суммарный размер больше). И эту "разность" оставить в рынке, - а все встречные удалить!

Значит, эта функция GetAmountLotFromOpenPos - здесь не подойдет? Например, если я задам

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-разве она мне не вернёт сумму лотов всех селл позиций?

 
Rita:

-разве она мне не вернёт сумму лотов всех селл позиций?

Сорри, если так, все ок. Понедельник. Голова еще не до конца включилась :)
 
Rita:

Мне не нужно учитывать лок. Точнее вот как:

Мне надо вот что. Если есть открытые несколько позиций селл и бай, мне нужно убрать встречные (компенсирующие) позиции, так - чтобы остались только в одном направлении.

Я и хотела - вычислить сначала сумму всех "баев", потом сумму всеХ "селов". После чего, найти разность (т.е. чей суммарный размер больше). И эту "разность" оставить в рынке, - а все встречные удалить!

Значит, эта функция GetAmountLotFromOpenPos - здесь не подойдет? Например, если я задам

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-разве она мне не вернёт сумму лотов всех селл позиций?

В общем случае:

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

 
Да, я так и сделала, чтобы получить "чистый" остаток.
Причина обращения: