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? Что конкретно им можно посоветовать сделать на серверах, чтобы комиссия корректно обрабатывалась в тестере?
Вставьте текст в OnCalculate созданного по умолчанию в рекдаторе индикатора. Поместите на любой график. В верхнем левом углу окна графика будете видеть работу индикатора. После выбора "Удалить" из списка индикаторов, работа не прекращается, это будет видно в левом верхнем углу. И даже после закрытия окна она не прекращается. А после открытия нового окна, она продолжается уже в новом окне. Причем, это окно не обязательно того же символа, что было в начале :)
Только при закрытии терминала работа индикатора прекращается. И то неизвестно, прекращается или нет - только что пришлось убирать терминал через диспетчер задач вручную для перезапуска...
В то время как в справке функции IsStopped сказано, что работа программы принудительно завершается через 3 секунды, если поступила команда завершить выполнение mql-программы.
Причем если while(true) заменить на while(!IsStopped()) то при удалении с графика индикатор успешно завершает работу.
Всё понятно. Сделали послабление на обычное удаление.
При закрытии терминала всё будет жёстко. Не более 3 секунд.
И я не уверен, что мы будем писать это в документации, 1. чтобы не потворствовать написанию таких безбашенных индикаторов (Вы это написали с целью проверить?) 2. Как ослабили, так и ужесточили.
Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.
Останавливает, но не сразу
Не понял, дак корректно с ExpertRemove() работать в индикаторах или все же нет?
Для индикаторов вроде же есть функция, или она уже не актуальна
ChartIndicatorDelete();Не понял, дак корректно с ExpertRemove() работать в индикаторах или все же нет?
Нет. В индикаторах ExpertRemove() перекрыта.
"Останавливает, но не сразу" - это сказано вообще про ExpertRemove. Эта функция не прерывает работу программы.
Нет. В индикаторах ExpertRemove() перекрыта.
"Останавливает, но не сразу" - это сказано вообще про ExpertRemove. Эта функция не прерывает работу программы.
Пример приведите. Давайте исходник индикатора для иллюстрации проблемы
В то время как в справке функции IsStopped сказано, что работа программы принудительно завершается через 3 секунды, если поступила команда завершить выполнение mql-программы.
Причем если 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? Что конкретно им можно посоветовать сделать на серверах, чтобы комиссия корректно обрабатывалась в тестере?
В то время как в справке функции IsStopped сказано, что работа программы принудительно завершается через 3 секунды, если поступила команда завершить выполнение mql-программы.
Причем если while(true) заменить на while(!IsStopped()) то при удалении с графика индикатор успешно завершает работу.
Всё понятно. Сделали послабление на обычное удаление.
При закрытии терминала всё будет жёстко. Не более 3 секунд.
И я не уверен, что мы будем писать это в документации, 1. чтобы не потворствовать написанию таких безбашенных индикаторов (Вы это написали с целью проверить?) 2. Как ослабили, так и ужесточили.
Забавная причина ошибки Internal Compiler Error ( функция используется в индикаторе ):
...Лечение очевидно, однако согласитесь - весьма забавный глюк. :)))
Написал Вам личное сообщение.