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

 
Koldun Zloy #:

Ни кому не пригодится. В Вашем коде грубейшие ошибки. И исправлять их бессмысленно.

Вы не удосужились выучить даже основы языка, а пытаетесь что-то писать.

Вы уж или займитесь серьёзно или бросьте это дело.

Поясните, пожалуйста, в чём у него ошибки. Можно кратко, тезисно, на что обращать внимание. И, если код будет работать, в чём будет заключаться его "ошибочность"?

 
Ivan Butko #:

Поясните, пожалуйста, в чём у него ошибки. Можно кратко, тезисно, на что обращать внимание. И, если код будет работать, в чём будет заключаться его "ошибочность"?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь

из документации… во входящих должен быть тикет, а не индекс

bool  OrderSelect( 
   ulong   ticket      // тикет ордера 
   );

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

 
Alexey Viktorov #:

из документации… во входящих должен быть тикет, а не индекс

Спасибо, Алексей за подсказку! Очень плохо влияют на меня ночные посиделки за компьютером. Вроде же вчера начал с тикета ордера и уже написал в коде строчку:

ulong  order_ticket=OrderGetTicket(i); // тикет ордера

а потом "съехал" с него.

Алексей, а вот такой вариант кода может быть приемлемым?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(order_ticket==0)
         return false; // поэтому возвращаем значение ложь
      else // в противном случае
         return true; // возвращаем значение истина
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
  }

Мэджик пока не трогаю, т.к. код предназначен для односимвольного советника.

С уважением, Владимир.

 
MrBrooklin #:

Спасибо, Алексей за подсказку! Очень плохо влияют на меня ночные посиделки за компьютером. Вроде же вчера начал с тикета ордера и уже написал в коде строчку:

а потом "съехал" с него.

Алексей, а вот такой вариант кода может быть приемлемым?

Мэджик пока не трогаю, т.к. код предназначен для односимвольного советника.

С уважением, Владимир.

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

Вот так логичней.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенный ордер есть */
      if(order_ticket > 0)
         return true; // поэтому возвращаем истину
     }
      return false; // если нет открытого отложенного ордера…
  }

А в этом коде достаточно заменить пустую проверку

      if(order_ticket > 0)

на проверку магика и символа

      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == Magic_Number)

и уже более универсальная функция…

 
Alexey Viktorov #:

из документации… во входящих должен быть тикет, а не индекс

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

Спасибо

 
Alexey Viktorov #:

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

Вот так логичней.

А в этом коде достаточно заменить пустую проверку

на проверку магика и символа

и уже более универсальная функция…

Всем доброго утра и хорошего настроения!

ОГРОМНОЕ ВАМ СПАСИБО, Алексей, за терпеливый подход к собеседнику и  доходчивое объяснение того, в чём состояли мои ошибки.

С уважением, Владимир.

 
Ivan Butko #:

Поясните, пожалуйста, в чём у него ошибки. Можно кратко, тезисно, на что обращать внимание. И, если код будет работать, в чём будет заключаться его "ошибочность"?

Ошибки в непонимании элементарных вещей.

Если Вы сами их не видите, то Вам тоже: Учиться. учиться и учиться!

 
Koldun Zloy #:

Ошибки в непонимании элементарных вещей.

Если Вы сами их не видите, то Вам тоже: Учиться. учиться и учиться!

Стоп. Ветка с вопросами новичков. Поэтому Вы либо отвечаете на вопросы, заданные в ветке, либо проходите мимо без своих нравоучений.

Для чего показали себя? Люди хотят видеть ответы на вопросы, а не красавца на картинке.

 
Artyom Trishkin #:

Стоп. Ветка с вопросами новичков. Поэтому Вы либо отвечаете на вопросы, заданные в ветке, либо проходите мимо без своих нравоучений.

Для чего показали себя? Люди хотят видеть ответы на вопросы, а не красавца на картинке.

Я просто хотел выяснить хочет ли человек чему-то научиться, тогда я бы мог помочь.

 
Koldun Zloy #:

Я просто хотел выяснить хочет ли человек чему-то научиться, тогда я бы мог помочь.

Добро. Странным показался сам способ узнавания желания: "вы ничего не умеете, вам нужно учиться и учиться".

Но, пусть так...

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