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

 
EVGENII SHELIPOV #:

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

Увеличивал. Видел именно то, что стрелка показывает на вторую снизу цену ордера и на тикет ордера не соответствующего критерию предпоследнего. Запустите мой код и увидите тикет самого нижнего ордера. А доделать эту функцию до получения не нижнего BUY ордера, а второго снизу сможете самостоятельно.

 
Alexey Viktorov #:

Увеличивал. Видел именно то, что стрелка показывает на вторую снизу цену ордера и на тикет ордера не соответствующего критерию предпоследнего. Запустите мой код и увидите тикет самого нижнего ордера. А доделать эту функцию до получения не нижнего BUY ордера, а второго снизу сможете самостоятельно.

Смогу только как мой вопрос где ошибка в коде определения тикета предпоследнего ордера???

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
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);
  }
 
EVGENII SHELIPOV #:

Смогу только как мой вопрос где ошибка в коде определения тикета предпоследнего ордера???

Ошибка в том, что цена ордера никак не учитывается.

Где-то в вашем диалоге есть совет засунуть всё это дело в массив и отсортировав получить любой по счёту тикет. Но в ответ непонимание как это сделать…

Вот так

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

Смогу только как мой вопрос где ошибка в коде определения тикета предпоследнего ордера???

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
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);
  }

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

 
Alexey Viktorov #:

Ошибка в том, что цена ордера никак не учитывается.

Где-то в вашем диалоге есть совет засунуть всё это дело в массив и отсортировав получить любой по счёту тикет. Но в ответ непонимание как это сделать…

Вот так

Алексей не могли бы вы прокомментировать ошибки  в журнале 

2021.11.07 12:17:40.791 2020.01.02 06:00:00  eGriD2 EURUSD,M5: incorrect start position 0 for ArraySort function

2021.11.07 12:17:40.791 2020.01.02 06:00:00  eGriD2 EURUSD,M5: array out of range in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00  Testing pass stopped due to a critical error in the EA


 
EVGENII SHELIPOV # :

Алексей не могли бы вы прокомментировать ошибки  в журнале 

2021.11.07 12:17:40.791 2020.01.02 06:00:00  eGriD2 EURUSD,M5: incorrect start position 0 for ArraySort function

2021.11.07 12:17:40.791 2020.01.02 06:00:00  eGriD2 EURUSD,M5: array out of range in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00  Testing pass stopped due to a critical error in the EA


Это ошибки не моего кода. Я не знаю аглицкий язык, пользуюсь встроенным переводчиком этого сайта. Вот как он переводит.

incorrect start position 0 for ArraySort function — неправильная начальная позиция 0 для функции ArraySort

array out of range in 'eGriD2.mq4' (664,18) —  массив вне допустимого диапазона в 'eGriD2.mq4' (664,18)

Testing pass stopped due to a critical error in the EA —  Прохождение тестирования остановлено из-за критической ошибки в советнике

Так-что код в студию.

ps; Хотя, если вызвать эту функцию когда ордеров меньше двух, то будут эти ошибки. Я не делал защиту от ………, но видимо надо было.

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

 
Доброго времени суток. Подскажите, как реализовать поиск минимума\максимума за n баров?
 
Snajper007 #:
Доброго времени суток. Подскажите, как реализовать поиск минимума\максимума за n баров?
iHighest

iLowest

 
MakarFX

Ещё такой вопрос. Есть индикатор, который рисует фрактал. Как проверить наличие сигнала за n баров?

 
Snajper007 #:

Ещё такой вопрос. Есть индикатор, который рисует фрактал. Как проверить наличие сигнала за n баров?

В первую очередь это зависит от индикатора, который рисует фракталы
Причина обращения: