Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись знаниями. Стань популярным разработчиком!
jhon
186
jhon 2011.12.05 18:24  
Roman.:

Полезного - много!!! Именно убыточных по кол-ву за неделю - я там не нашел...

Я то же! :)
sergey
159
sergey 2011.12.05 18:34  
Roman.:

Полезного - много!!! Именно убыточных по кол-ву за неделю - я там не нашел...

неожиданный ответ.

я дал ссыль прямо на функцию. осталось приложить руки.

или уж тогда надо обращаться в job

jhon
186
jhon 2011.12.05 18:34  

Хотя нет что-то полезное всё же я нашел....

Сейчас надо только немного переделать (день на неделю).

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество убыточных позиций, закрытых сегодня.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              t=OrderCloseTime();
              if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
                if (OrderProfit()<0) kp++;
              }
            }
          }
        }
      }
    }
  }
  return(kp);
}

jhon
186
jhon 2011.12.05 18:48  
mersi:

неожиданный ответ.

я дал ссыль прямо на функцию. осталось приложить руки.

или уж тогда надо обращаться в job


С таким успехом руки приложить можно и с пустого места. Так что простите...
sergey
159
sergey 2011.12.05 19:00  
jhon:

С таким успехом руки приложить можно и с пустого места. Так что простите...

совершенно верно: можно и нужно.

jhon
186
jhon 2011.12.05 19:16  
mersi:

совершенно верно: можно и нужно.


Вы наверное меня неправильно поняли. Я не от кого ничего не требовал, а просто обратился за помощью, с надеждой на то, что кто-то, сталкивался с такой проблемой уже в прошлом и ему не будет трудно поделиться решением. Этот форум, ведь не запрещает, такого рода сообщения. Не так ли? Поэтому прошу не считать меня лентяем, просто реально застрял на этой задаче.

С уважением...

sergey
159
sergey 2011.12.05 19:23  
jhon:

Вы наверное меня неправильно поняли. Я не от кого ничего не требовал, а просто обратился за помощью, с надеждой на то, что кто-то, сталкивался с такой проблемой уже в прошлом и ему не будет трудно поделиться решением. Этот форум, ведь не запрещает, такого рода сообщения. Не так ли? Поэтому прошу не считать меня лентяем, просто реально застрял на этой задаче.

С уважением...

вы все правильно говорите.

и я помог, как мог. все будет хорошо. мир вам ))

jhon
186
jhon 2011.12.05 19:31  
Мир :)
jhon
186
jhon 2011.12.05 21:59  

Решил проблему следующим образом...

int WeekOfMonth(datetime dt=0) {
  if (dt<=0) dt=TimeCurrent();
  datetime d;
  int      i, kd=TimeDay(dt), nn=1;

  for (i=2; i<=kd; i++) {
    d=StrToTime(TimeYear(dt)+"."+TimeMonth(dt)+"."+i);
    if (TimeDayOfWeek(d)==1) nn++;
  }
  return(nn);
}

int CalculateLossOrders(string sy="", int op=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), kp=0;
  int      week = WeekOfMonth(TimeCurrent());
   
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {
          if (op<0 || OrderType()==op) {
              t=OrderCloseTime();
              if (Year()==TimeYear(t) && Month()==TimeMonth(t) && week == WeekOfMonth(OrderCloseTime())) {
                if (OrderProfit()<0) kp++;
              }
            
          }
        }
      }
    }
  }
  return(kp);
}

Использование для Buy'a
if(CalculateLossOrders("", 0) < 2)
{
  Print("В этой недели ещё нет двух минусов на Buy");
}

Использование для Sell'a
if(CalculateLossOrders("", 1) < 2)
{
  Print("В этой недели ещё нет двух минусов на Sell");
}
Mislaid
617
Mislaid 2011.12.06 02:57  
jhon:

Советник торгует только отложенными ордерами, поэтому в этом нет смысла.



В последнем посте у вас рабочая версия, но с атавизмами типа || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP.

Ордера этого типа в функции CalculateLossOrders() в приведенных вами примерах не обрабатываются.

/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий