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

 
MrBrooklin #:

Запустить функцию при помощи обработчика событий OnStart? Не пробовал, т.к. никогда не было надобности. ))

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

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

еще долго не пишите никому никакие советы)


С Уважением, Фантомас

 
Alexey Viktorov #:
А почему никто из вас не уточнил как вы запускаете отладку? По историческим данным, или по кнопке F5?

Мне вопрос Артёма был понятен:

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

 
Alexey Viktorov #:

А почему никто из вас не уточнил как вы запускаете отладку? По историческим данным, или по кнопке F5?


зы: ну вот, я думал что один такой умный… А тут вон сколько…

Вот и смотрю, количество умных просто зашкаливает.

Внимательных не хватает)

Читаем внимательно пост , находим слово "тестер", заметьте не отладчик, а именно ТЕСТЕР и думаю все вопросы про F5, что спросил Артём,  а также запуск скриптов, отпадут сами собой.

 
Aleksandr Slavskii #:

Вот и смотрю, количество умных просто зашкаливает.

Внимательных не хватает)

Читаем внимательно пост , находим слово "тестер", заметьте не отладчик, а именно ТЕСТЕР и думаю все вопросы про F5, что спросил Артём,  а также запуск скриптов, отпадут сами собой.

А это как понимать?

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

Ошибки, баги, вопросы

Robert Sadamon, 2024.07.20 08:56

Спасибо, что проверили. Это не я решил, что в коде ошибка. В режиме отладки, я вижу что тикет берется с "потолка". Соответственно до расчетов профита дело не доходит. Терминал у меня глючит получается? Или компилятор?

вот в отладке прошли строку получения тикета. Выдал не понятно что?! По истории смотрю закрыто было всего не более 20 сделок.

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


 
MrBrooklin #:

Отладку в MetaEditor 5 Вы как запускаете?

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

На исторических данных. Так, как мне нужен момент включения этой функции

Что интересно, на домашнем компьютере  все работает как нужно, а на сервере глючит. Терминал загружал у брокера Gerchik&Co

И еще. Функция работает в советнике. Логика проста. Она встроена в функцию которая закрывает убыточную сделку если прибыль с момента ее открытия по другим закрытым позициям перекрывает ее убыток.  В тестере не работает, на реальных данных можно ждать пару недель ситуацию. Я запустил отладчик и увидел такую картину, что тикеты беруться непонятно какие, соответственно и данные об закрытой сделке неверные и в строку суммирования прибыли не заходим.

 

В общем, всем спасибо. Это глюк у Терминала. Пусть разработчики исправляют. Проблему решил просто. Закачал терминал у брокера, а не с сайта MQL5. Отказался от обновлений и все прекрасно заработало!!! Чего то они ищут сишников и условия у них шикарные. А вот отбор видно плоховат. Менеджер по персоналу хороший человек. Но как говорил один человек: "Если ты не гавно как человек, то ты гавно как менеджер". Берут кого попало. Прихожу к выводу, что в последних обновлениях напортачили ребята. 

НЕ ОБНОВЛЯЙТЕ ТЕРМИНАЛ И ВСЕ У ВАС БУДЕТ РАБОТАТЬ НОРМАЛЬНО!  Или хотя бы пусть сделают возможность отката до предыдущей версии или... в общем пусть работают.

 

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

Ошибки, баги, вопросы

Robert Sadamon, 2024.07.19 22:11

Всем привет. Написал несложную функцию подсчета прибыли исторических ордеров за определенный период.

Подскажите, почему в тестере тикет не тот выдает? Что я не правильно понимаю?

double History_Profit(datetime startTime)
  {
   long nmbMagic = (long)Magic;
   double h_profit = 0.0;
   ulong ticket;
   HistorySelect(startTime, TimeCurrent()); // Выбор истории сделок в указанном диапазоне
   int total_h = HistoryDealsTotal(); // Общее количество сделок в истории

// Цикл проходит по всем сделкам в истории
   for(int i = total_h - 1; i >= 0; i--)
     {
      ticket = HistoryDealGetTicket(i); // Получение тикета сделки
      if(ticket > 0)
        {
         // Получение символа, магического числа и прибыли сделки
         string dealSymbol = HistoryDealGetString(ticket, DEAL_SYMBOL);
         long dealMagic = (long)HistoryDealGetInteger(ticket, DEAL_MAGIC);
         double dealProfit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
         double dealCommission = HistoryDealGetDouble(ticket, DEAL_COMMISSION);
         double dealSwap = HistoryDealGetDouble(ticket, DEAL_SWAP);

         // Фильтрация сделок по символу и магическому числу
         if(dealSymbol == _Symbol && dealMagic == nmbMagic)
           {
            // Суммирование прибыли, комиссии и свопа
            h_profit += dealProfit + dealCommission + dealSwap;
           }
        }
     }

   return (h_profit); // Возврат общей прибыли
  }

Причина в выделенном условии.

 

Второй раз за трое суток вылетает скрипт с ошибкой в индексе массива. После перекомпиляции и перезапуска работает дальше нормально. Крутится два таких тяжелых скрипта - код один, но чуток настройки разные, второй не вылетает с ошибкой.

Рандома в исполняемом коде нет. Что за ерунда то такая? Как такое отлавливать и чего то доказывать? Похоже на какой то сбой...

 
Месяц назад (примерно), при подключении по RDP в диспетчере задач десятки я видел информацию по нагрузке на железо, а сейчас терминал даже не отображается в диспетчере задач, и как расходуются ресурсы ПК непонятно. Это у всех теперь так? Если да, то дело в обновлениях терминала? Не удобно сие.
 
fxsaber #:

Причина в выделенном условии.

Почему?

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

Ошибки, баги, вопросы

Robert Sadamon, 2024.07.19 22:11

Всем привет. Написал несложную функцию подсчета прибыли исторических ордеров за определенный период.

Подскажите, почему в тестере тикет не тот выдает? Что я не правильно понимаю?

double History_Profit(datetime startTime)
  {
   long nmbMagic = (long)Magic;
   double h_profit = 0.0;
   ulong ticket;
   HistorySelect(startTime, TimeCurrent()); // Выбор истории сделок в указанном диапазоне
   int total_h = HistoryDealsTotal(); // Общее количество сделок в истории

// Цикл проходит по всем сделкам в истории
   for(int i = total_h - 1; i >= 0; i--)
     {
      ticket = HistoryDealGetTicket(i); // Получение тикета сделки
      if(ticket > 0)
        {
         // Получение символа, магического числа и прибыли сделки
         string dealSymbol = HistoryDealGetString(ticket, DEAL_SYMBOL);
         long dealMagic = (long)HistoryDealGetInteger(ticket, DEAL_MAGIC);
         double dealProfit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
         double dealCommission = HistoryDealGetDouble(ticket, DEAL_COMMISSION);
         double dealSwap = HistoryDealGetDouble(ticket, DEAL_SWAP);

         // Фильтрация сделок по символу и магическому числу
         if(dealSymbol == _Symbol && dealMagic == nmbMagic)
           {
            // Суммирование прибыли, комиссии и свопа
            h_profit += dealProfit + dealCommission + dealSwap;
           }
        }
     }

   return (h_profit); // Возврат общей прибыли
  }

Чат GPT уже скоро сломается из-за меня))))