Ошибки, баги, вопросы - страница 3506

 
Sergey Golubev #:

Если нашли воспроизводимый баг, то тот кто его нашел - дает ссылки на посты в официальную ветку по релизу (сейчас это эта ветка Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX ), и в ней админы отвечают (например - сегодня отвечали - ), так как это - их ветка.
Если долго не отвечают - то у админов есть группа (на английском), и некоторые пишут туда как ссылки на посты или ветку с просьбой обратить внимание (на английском).

Тоже самое и на англоязычном форуме: есть ветка по багам, и если баг воспроизводится - то дают ссылки или повторяют пост(ы) уже в релизную ветку (на англоязычную или сюда).

Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.

Ну, я явно и писал изначально в ветку бро бэтку - но реакции ноль.

 
fxsaber #:
Deals[i]

Отлично! Заработало!!!

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

 
Aleksandr Slavskii #:

почему код из советника, скопированный один в один в скрипт, в скрипте работал правильно, а в советнике не правильно.

В скрипте не вызывалась HistoryPositionSelect.

 

Sergey Golubev #:

Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.

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

Некоторые баги тянутся от версии к версии, предлагаете пользователю в каждой новой теме о новой версии, переписывать своё сообщение в новую тему?

Вопрос в том, чтоб была обратная связь.

Какой смысл, что админ потратил время  ответив на вопрос, на который могли ответить другие пользователи?

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

 
fxsaber #:

В скрипте не вызывалась HistoryPositionSelect.

Я не понял. Что значит не вызывалась?

Я скопировал код из советника с в скрипт.

Вот скрипт. Он работает правильно. Этот же код в советнике работает не правильно.

Не понятно почему так происходит.

#include "HistoryPosition.mqh" // https://www.mql5.com/ru/blogs/post/755007
//+------------------------------------------------------------------+
void OnStart()
  {
//PositionHistori(0, INT_MAX);
   Print("-----------");
   PositionHistori(D'2024.01.01 00:00:00', INT_MAX);
  }
//+------------------------------------------------------------------+
// Создаем структуру некоторых свойств закрытой позиции.
struct POSITION_HISTORY
  {
   ulong             ticket;
   int               type;
   datetime          timeOpen;
   datetime          timeClose;
   double            priceOpen;
   double            priceClose;
   // Заполнение структуры соответствующими данными закрытой позиции.
   bool              Set(const ulong lTicket)
     {
      const bool Res = HistoryPositionSelect(lTicket); // https://www.mql5.com/ru/blogs/post/755007

      if(Res)
        {
         this.ticket = HistoryPositionGetInteger(POSITION_HISTORY_TICKET);
         this.type = (ENUM_POSITION_TYPE)HistoryPositionGetInteger(POSITION_HISTORY_TYPE);
         this.timeOpen = (datetime)HistoryPositionGetInteger(POSITION_HISTORY_TIME_OPEN);
         this.timeClose = (datetime)HistoryPositionGetInteger(POSITION_HISTORY_TIME_CLOSE);
         this.priceOpen = HistoryPositionGetDouble(POSITION_HISTORY_PRICE_OPEN);
         this.priceClose = HistoryPositionGetDouble(POSITION_HISTORY_PRICE_CLOSE);
        }
      return(Res);
     }
  };
POSITION_HISTORY Positions[];// Сюда будем собирать данные обо всех закрытых позициях.
//+------------------------------------------------------------------+
bool PositionHistori(datetime from_date = 0, datetime  to_date = INT_MAX)
  {
   int Amount = 0; // Количество закрытых позиций.

   if(HistorySelect(from_date, to_date))  // Запросили интервал торговой истории.
     {
      Print(HistoryDealsTotal());
      for(uint i = ArrayResize(Positions, HistoryDealsTotal()); (bool)i--;)  // Бежим по всем сделкам в обратной хронологии.
        {
         const ulong DealTicket = HistoryDealGetTicket(i); // Тикет сделки.
         //Print(DealTicket);
         if(HistoryDealGetString(DealTicket, DEAL_SYMBOL) == _Symbol)
            if((HistoryDealGetInteger(DealTicket, DEAL_ENTRY) != DEAL_ENTRY_IN) &&  // Если сделка не является открывающей,
               Positions[Amount].Set(DealTicket))                                  // записываем данные позиции, закрытой этой сделкой.
               Amount++;
        }
      if(Amount <= 0)
         return false;

      ArrayResize(Positions, Amount); // Определили количество закрытых позиций.
      ArrayReverse(Positions); // Расположили закрытые позиции по хронологии закрытия.
      ArrayPrint(Positions); // Распечатали информацию обо всех закрытых позициях.
     }
   return true;
  }
//+------------------------------------------------------------------+

Вопрос чисто риторический, так как вы написали как изменить код, чтоб он работал и в советнике тоже.

 
Aleksandr Slavskii #:

Вот скрипт. Он работает правильно. Этот же код в советнике работает не правильно.

Не понятно почему так происходит.

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

Попробуйте распечатывать HistoryDealsTotal еще и там, где Amount++. Увидите, что значение меняется.

 
Aleksandr Slavskii #:

Вопрос в том, чтоб была обратная связь.

Все так.
 
Aleksandr Slavskii #:

Вопрос чисто риторический, так как вы написали как изменить код, чтоб он работал и в советнике тоже.

А нет, всё норм, это глюки. В скрипте тоже не правильно работал)))

Ваши изменения понятны, просто в HistoryPositionSelect я не лазил, а там судя по вашим объяснениям могла вызываться HistorySelect().

Теперь всё работает хорошо.

Огромное спасибо.

 
Aleksey Vyazmikin #:

Ну, я явно и писал изначально в ветку бро бэтку - но реакции ноль.

Я просто описал тут () рабочую схему на сегодня.
Есть еще два способа, но они используются реже:

  • просят модератора сообщить админам по своим "каналам связи" с админами (это очень редко);
  • или просят модератора сообщить админам в их англоязычной группе как просьбу "обратить внимание на посты ... в ветке ..." (это чаще).

И тут - также как в описанной рабочей схеме: админы/разработчики ставят свои приоритеты как на ответы, так и на исправления (с высоким приоритетом, с низким и так далее), и мы не знаем приоритетности того или иного исправления и так далее.

Но могу сказать, что админы читают посты в релизной ветке (я это сам вижу по их ответам), то есть - сообщить о воспроизводимом баге туда - более быстрый способ на сегодня.

 
Aleksandr Slavskii #:

Теперь всё работает хорошо.

Обратная связь...

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