Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1724

 
EVGENII SHELIPOV #:

Доброго времени суток Господа программисты!!!!

Попробую ещё раз обратится со своим вопросом но чуть перефразировав его.

В сеточном советнике нужно найти тикет предпоследнего ордера. Решение типа -1 от тикета максимального ордера не проходит может быть это будет работать в тестере стратегий но на демо и реальных счетах не работает прикладываю картинку будет понятно почему.

   

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

Но уровень моего программирования не высок и в код закралась какая то ошибка. Результат этой функции самый минимальный тикет. Вот эти две функции макс тикет и предпоследний тикет. Функция определения макс. тикета работает без нареканий.  

Прошу Вас подсказать в чем ошибка. Спасибо.

Это второй снимок говорящий о том, что вам нужен не максимальный тикет и не максимальное время открытия, а надо выбирать минимальную цену открытия ордеров Buy и максимальную цену открытия ордеров Sell.
 
Alexey Viktorov #:
Это второй снимок говорящий о том, что вам нужен не максимальный тикет и не максимальное время открытия, а надо выбирать минимальную цену открытия ордеров Buy и максимальную цену открытия ордеров Sell.

Алексей функции определяющие эти цены у меня есть не могли бы Вы объяснить как через них выйти на искомый тикет???

 
Alexey Viktorov #:
Это второй снимок говорящий о том, что вам нужен не максимальный тикет и не максимальное время открытия, а надо выбирать минимальную цену открытия ордеров Buy и максимальную цену открытия ордеров Sell.
//+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return(max_price);
  }
 
EVGENII SHELIPOV #:

Алексей функции определяющие эти цены у меня есть не могли бы Вы объяснить как через них выйти на искомый тикет???

Вот так

//+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder(int Magic)// int Magic вставлен только для компиляции без ошибок.
 {
  int total = OrdersTotal(),
      my_ticket = 0;
  double minPrice = DBL_MAX;
  for(int cnt = total; cnt-- > 0;)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        if(OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
  return(my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov #:

Вот так

Алексей спасибо!!!  Но прежде чем вникнуть в суть функции я хотел уточнить: эта функция для выбора тикета предпоследнего ордера?

 
EVGENII SHELIPOV #:

Алексей спасибо!!!  Но прежде чем вникнуть в суть функции я хотел уточнить: эта функция для выбора тикета предпоследнего ордера?

Нет, это находит тикет ордера BUY с наименьшей ценой. Дальше сам или Макар пусть тренируется.

 
Alexey Viktorov #:

Нет, это находит тикет ордера BUY с наименьшей ценой. Дальше сам или Макар пусть тренируется.

Да Алексей чувствую  второй день себя  среди Вас не совсем адекватным человеком. Функции расчета мин макс тикета есть работают безотказно как автомат Калашникова я об них никого не просил но второй день меня заводят за корягу!!!

//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket=INT_MAX;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(min_ticket);
  }

  Ну по любому спасибо за внимание

 
EVGENII SHELIPOV #:

Да Алексей чувствую  второй день себя  среди Вас не совсем адекватным человеком. Функции расчета мин макс тикета есть работают безотказно как автомат Калашникова я об них никого не просил но второй день меня заводят за корягу!!!

  Ну по любому спасибо за внимание

Разве на этой картинке

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

EVGENII SHELIPOV, 2021.11.07 06:43

Доброго времени суток Господа программисты!!!!

Попробую ещё раз обратится со своим вопросом но чуть перефразировав его.

В сеточном советнике нужно найти тикет предпоследнего ордера. Решение типа -1 от тикета максимального ордера не проходит может быть это будет работать в тестере стратегий но на демо и реальных счетах не работает прикладываю картинку будет понятно почему.

   

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

Но уровень моего программирования не высок и в код закралась какая то ошибка. Результат этой функции самый минимальный тикет. Вот эти две функции макс тикет и предпоследний тикет. Функция определения макс. тикета работает без нареканий.  

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }

Прошу Вас подсказать в чем ошибка. Спасибо.


стрелками показан максимальный тикет? Я вижу здесь стрелки указывающие на вторую снизу цену ордера. Что не так?
 
Alexey Viktorov #:

Разве на этой картинке


стрелками показан максимальный тикет? Я вижу здесь стрелки указывающие на вторую снизу цену ордера. Что не так?

Алексей увеличите картинку пожалуйста 

 
EVGENII SHELIPOV #:

Алексей увеличите картинку пожалуйста 

Это  ПРЕДПОСЛЕДНИЙ ордер

Причина обращения: