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

[Удален]  
Slawa:
Останавливает, но не сразу
Не понял, дак корректно с ExpertRemove() работать в индикаторах или все же нет?
 
Alexey Kozitsyn:
Не понял, дак корректно с ExpertRemove() работать в индикаторах или все же нет?

Для индикаторов вроде же есть функция, или она уже не актуальна

ChartIndicatorDelete();
 
Alexey Kozitsyn:
Не понял, дак корректно с ExpertRemove() работать в индикаторах или все же нет?

Нет. В индикаторах ExpertRemove() перекрыта.

"Останавливает, но не сразу" - это сказано вообще про ExpertRemove. Эта функция не прерывает работу программы.

[Удален]  
Slawa:

Нет. В индикаторах ExpertRemove() перекрыта.

"Останавливает, но не сразу" - это сказано вообще про ExpertRemove. Эта функция не прерывает работу программы.

А вообще, в планах есть задача решить вопрос с exit()? Или пользователям решать через костыли?)
 
Slawa:
Пример приведите. Давайте исходник индикатора для иллюстрации проблемы
Вставьте текст в OnCalculate созданного по умолчанию в рекдаторе индикатора. Поместите на любой график. В верхнем левом углу окна графика будете видеть работу индикатора. После выбора "Удалить" из списка индикаторов, работа не прекращается, это будет видно в левом верхнем углу. И даже после закрытия окна она не прекращается. А после открытия нового окна, она продолжается уже в новом окне. Причем, это окно не обязательно того же символа, что было в начале :) 
Только при закрытии терминала работа индикатора прекращается. И то неизвестно, прекращается или нет - только что пришлось убирать терминал через диспетчер задач вручную для перезапуска...

В то время как в справке функции IsStopped сказано, что работа программы принудительно завершается через 3 секунды, если поступила команда завершить выполнение mql-программы.

   int i=0;
   while(true){
      Comment(i++);
      Sleep(100);
   }

 Причем если while(true) заменить на while(!IsStopped()) то при удалении с графика индикатор успешно завершает работу.

 

Забавная причина ошибки Internal Compiler Error ( функция используется в индикаторе ):

void SaveData ( uint handle_, int wrdata_, int interv_, string dpath_, int tmode_, int tmult_, long ctime_, long& ltime_ )
  {
    int ierr, wrtint;
    // ----
    if ( interv_ > 0 ) // work mode
      {
        if ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_;             } // не имеет значения
        else                                                      { wrtint = interv_ * tmult_; } // не имеет значения
        //
        if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) ) // если закомментировать эту строчку, ошибка исчезнет
          {
            // некий код сохранения данных ... не имеет значения - проверено
            //
            ltime_ = ctime_; // в общем тоже не имеет значения
          } // if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) )
      } // if ( interv_ > 0 )
    // ----
    return;

  } // void SaveData

( пардон, кнопку SRC намеренно не стал использовать, т.к. с ней не удаётся выделить нужные места в тексте )

Лечение очевидно, однако согласитесь - весьма забавный глюк. :)))

 

У одного ДЦ комиссия 16х2 долларов на оборот 1 млн. Они выставили в настройках сервера, видимо, комиссию 16 долл. И теперь при тесте на их сервере комиссия 16х2 списывается с каждой сделки независимо от её лотности, т.е. адекватный тест можно сделать только с лотом 10. 

Это их криворукость в настройке серверов или реальное ограничение МТ5? Что конкретно им можно посоветовать сделать на серверах, чтобы комиссия корректно обрабатывалась в тестере? 

 
Ilya Malev:
Вставьте текст в OnCalculate созданного по умолчанию в рекдаторе индикатора. Поместите на любой график. В верхнем левом углу окна графика будете видеть работу индикатора. После выбора "Удалить" из списка индикаторов, работа не прекращается, это будет видно в левом верхнем углу. И даже после закрытия окна она не прекращается. А после открытия нового окна, она продолжается уже в новом окне. Причем, это окно не обязательно того же символа, что было в начале :) 
Только при закрытии терминала работа индикатора прекращается. И то неизвестно, прекращается или нет - только что пришлось убирать терминал через диспетчер задач вручную для перезапуска...

В то время как в справке функции IsStopped сказано, что работа программы принудительно завершается через 3 секунды, если поступила команда завершить выполнение mql-программы.

 Причем если while(true) заменить на while(!IsStopped()) то при удалении с графика индикатор успешно завершает работу.

Всё понятно. Сделали послабление на обычное удаление.

При закрытии терминала всё будет жёстко. Не более 3 секунд.

И я не уверен, что мы будем писать это в документации, 1. чтобы не потворствовать написанию таких безбашенных индикаторов (Вы это написали с целью проверить?) 2. Как ослабили, так и ужесточили.

 
Alexandre:

Забавная причина ошибки Internal Compiler Error ( функция используется в индикаторе ):

...

Лечение очевидно, однако согласитесь - весьма забавный глюк. :)))

Спасибо за сообщение!

Написал Вам личное сообщение.
 
Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.