Функция возвращающая лот последней открытой позиции

 

Добрый день. Возникла проблема с функцией возвращающей лот последней открытой позиции от KimIV, вместо последнего лота она всегда возвращает -1, подскажите в чем может быть дело?

 

Сама функция: 

 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает размер лота последней открытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  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) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
Автоматизация торговли на финансовых рынках - Главная
Автоматизация торговли на финансовых рынках - Главная
  • www.kimiv.ru
Что нового по сравнению с версией 1.4? stSender. Изменена процедура записи файлов под требования билда 610 и выше. stReceiver. Функции проверки существования файла и копирования файлов заменены на аналогичные, поддерживающие UNICODE (для работоспособности в билде 610 и выше). Разработан и доступен для покупки новый советник e-Reverser...
 

Вы пишите под #property strict и появляется предупреждение при компиляции ?

 

Попробуйте изменить строчку:

datetime o;

на:

datetime o=0; 

Это нужно для современной версии компилятора.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает размер лота последней открытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o=0;
  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) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Vladimir Zubov:

Вы пишите под #property strict и появляется предупреждение при компиляции ?

До этого писал после OnTick(), сейчас перенес, написал после #property strict,  но результат тот же -1.

Предупреждение только вот такое: possible use of uninitialized variable 'o' Строка:31 Столбец:22

 31 строка это: if (o<OrderOpenTime()) {

 
Может дело в самом вызове функции:? Когда вызываю вот так: GetLotLastPos(), все срабатывает. А если вызывать так GetLotLastPos(NULL, -1, 1299)  то возвращает только -1
 
xjasond:
Может дело в самом вызове функции:? Когда вызываю вот так: GetLotLastPos(), все срабатывает. А если вызывать так GetLotLastPos(NULL, -1, 1299)  то возвращает только -1

Если надо действительно по любому символу то вызывайте функцию без указания параметров отбора.

 GetLotLastPos()

Если надо сортировка то:

GetLotLastPos(Symbol(),OP_BUY,MagicNumber)

Судя по этой строчке:

if (sy=="0") sy=Symbol();

NULL функция не воспринимает, попробуйте 0 

 
Vladimir Zubov:

Если надо действительно по любому символу то вызывайте функцию без указания параметров отбора.


Это функция, вообще как то через зад написана.
 
Последней открытой в каком смысле? Та, которая открыта прямо сейчас? Или вообще, так которая была последней?