Выполняет ли функция нужное действие?

 

Мне нужно получить величину убытка последнего среди убыточных ордеров. И важно, что этот ордер не обязательно последний по времени закрытия.

Сделал функцию на основе функции KimIV. Но видимо что-то не так. Профи посмотрите пожалуйста. Спасибо.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV, & khorosh http://www.kimiv.ru          |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает убыток последней закрытой убыточной позиции или 0   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLossLastClosePos(string sy="", int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal();
double r=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if(OrderProfit()>=0){continue;}
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (OrderProfit()<0){
            if (t<OrderCloseTime()) {
               t=OrderCloseTime();
               r=OrderProfit();
            }
          }
        }
      }
    }
  }
  return(r);
}
 

Этот^ код реально сносит мозг. Лучше как-то так:

Было. Теперь нету ;)
 
По сути Ваш код ничем не отличается, разве что названиями переменных отсутствием проверки типа операции и магика.
 
khorosh >>:
По сути Ваш код ничем не отличается, разве что названиями переменных отсутствием проверки типа операции и магика.
а ордер должен к определенному эксперту относится? Тогда просто время закрытия для определенного магика и все. В чем проблема то?
 
khorosh >>:
По сути Ваш код ничем не отличается, разве что названиями переменных отсутствием проверки типа операции и магика.


Видимо кому-то медведь в детстве на руки наступил. 

--- 

Не в коня корм, удалил :))) 

 
Techno >>:
а ордер должен к определенному эксперту относится? Тогда просто время закрытия для определенного магика и все. В чем проблема то?
Проблема одна - правилен ли код приведённый в первом посте. А проверка на магик там имеется.
 
gip >>:

Этот^ код реально сносит мозг. Лучше как-то так:


Вадим, надеюсь Вы не обиделись.:-))
 
khorosh писал(а) >>

Мне нужно получить величину убытка последнего среди убыточных ордеров. И важно, что этот ордер не обязательно последний по времени закрытия.

Сделал функцию на основе функции KimIV. Но видимо что-то не так. Профи посмотрите пожалуйста. Спасибо.


Что значит "последнего"? Последнего по времени открытия?

Если так, то надо заменить код

            if (t<OrderCloseTime()) {
               t=OrderCloseTime();
               r=OrderProfit();
            }

на

            if (OrderCloseTime()>0 && t<OrderOpenTime()) {
               t=OrderOpenTime();
               r=OrderProfit();
            }
 
PapaYozh >>:


Что значит "последнего"? Последнего по времени открытия?

Если так, то надо заменить код

на


Мне нужно получить величину убытка последнего по времени закрытия среди убыточных ордеров. И важно, что этот ордер не обязательно последний по времени закрытия.

Последний по времени закрытия может быть профитным ордером. А мне нужен последний убыточный, только последний среди убыточных.

 

вообще-то

1. некорректен тип возвращаемого значения, r должно быть double

2. в операции сравнения используется только ордер профит, а нужно еще добавить ордерсвоп и ордерсоммишн

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

 
khorosh писал(а) >>

Мне нужно получить величину убытка последнего по времени закрытия среди убыточных ордеров. И важно, что этот ордер не обязательно последний по времени закрытия.

Последний по времени закрытия может быть профитным ордером. А мне нужен последний убыточный, только последний среди убыточных.


Тогда так:

            if (OrderProfit()<0 && t<OrderCloseTime() ) {
               t=OrderCloseTime();
               r=OrderProfit();
            }
Причина обращения: