Ошибки, баги, вопросы - страница 1520
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Другого способа пока нет.
Мы обсуждали введение новой команды exit, которая немедленно прекращала бы исполнение программы, но тут есть нерешённые вопросы
Очень жаль. Да, exit() как в С++ была бы кстати. Сейчас же бывает тянуть ответ вложенных функций в вызывающую достаточно проблематично. Да и универсальных библиотек не написать.
как вариант создать отдельно функцию удаления всех объектов программы и при выполнении условия для удаления самой программы из терминала, ее вызвать, а вслед за ней уже и ExpertRemove(), в этом случае должно все быстрее завершиться... хотя не факт :)
Как я уже ранее писал и до меня было предложено в статье на этом сайте, в случае ошибки в глубоко вложенной функции, можно вызвать деление на 0 или выход за пределы массива. Но не красиво это.
Да, и дело тут не только в ООП (насколько я понял, Вы о нем). Просто - если ошибку невозможно исправить - программа завершается.
Останавливает, но не сразу
Не понял, дак корректно с 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? Что конкретно им можно посоветовать сделать на серверах, чтобы комиссия корректно обрабатывалась в тестере?