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

 
Slawa:

Что документировать? "Братцы, расслабьтесь и не напрягайтесь, деинициализируйте как хотите. Разаработчики разрешили"

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

А это здесь при чём?

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

Документировать как есть, либо сделать как документировано... Ладно, это Ваше дело

Попробовал, рискнул здоровьем компа, скорость заполнения ~1.5 Гб/мин. Но терминал при этом не виснет, в отличие от 4-ки, что уже радует )

 
-Aleks-:

Уф, значит этот баг не вернулся - можно спокойно закрывать терминал и быть уверенным, что все чарты сохраняться.

Сказали, что при закрытии терминала программа принудительно завершается через 3 секунды уже сейчас. Это так сейчас работает и будет работать. Возвращать не хотят принудительное завершение при удалении программы с графика без завершения работы терминала.
 
Slawa:

Речь изначально зашла о зацикленном индикаторе. Что категорически не рекомендуется. Даже в качестве иллюстрации

Речь скорее не о зацикленном индикаторе, а о любом индикаторе без проверки IsStopped внутри его циклов. Потому что циклы построения сложных индикаторов могут быть долгими. Разумеется для меня этот вопрос стал актуальным не из-за бесконечного цикла, просто исходный код я выкладывать не могу, да это и бесполезно в виду его громоздкости.
 

Любой индикатор использует хотя бы один цикл.

Цикл без проверки IsStopped делает этот цикл потенциально бесконечным. Потому что ценовых данных в массиве может быть миллион и каждая итерация может быть написана неоптимально.

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

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

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

 
Slawa:

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

Это все правильно, каюсь что у меня не было проверки IsStopped и поэтому были проблемы с прерыванием построения сложных индикаторов исключительно по моей вине. Но, с другой стороны, я привык к тому, что работа программы и её документация должны совпадать.
 
Ilya Malev:
Сказали, что при закрытии терминала программа принудительно завершается через 3 секунды уже сейчас. Это так сейчас работает и будет работать. Возвращать не хотят принудительное завершение при удалении программы с графика без завершения работы терминала.
Гм, я высказался о четвёрке - она вроде как сейчас корректно все завершает и закрывает, а раньше теряла чарты с советниками.
 
Ilya Malev:
Это все правильно, каюсь что у меня не было проверки IsStopped и поэтому были проблемы с прерыванием построения сложных индикаторов исключительно по моей вине. Но, с другой стороны, я привык к тому, что работа программы и её документация должны совпадать.

В документации нельзя учесть все нюансы. Тем более, когда речь идёт о секундах, гигагерцах, мегабайтах, величинах хоть и измеримых, но сильно зависящих от окружения

Мы стараемся заполнять пробелы в документации (хотя втайне надеемся на презумпцию сознательности)

 
-Aleks-:
Гм, я высказался о четвёрке - она вроде как сейчас корректно все завершает и закрывает, а раньше теряла чарты с советниками.

В четвёрке распараллелили процессы закрытия каждого чарта. Поэтому смогли увеличить таймаут каждому.

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

 
Slawa:

В четвёрке распараллелили процессы закрытия каждого чарта. Поэтому смогли увеличить таймаут каждому.

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

Примерно понял.

Тормозные не тормозные, многое зависит от железа и задач, которые выполняет эксперт, и нужно делать скидку на то, что программы часто пишут не профессиональные программисты - именно с этой целью тут и присутствует язык программирования, я так думаю.

 

MT4. Хочу ещё раз обратить внимание на особенности инициализации глобальных переменных программы.

 Глобальные переменные инициализируются один раз при установки программы на график или перекомпиляции кода.

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

input int c;
int a,b;
void OnInit() {
 a++; Print(" a=",a," b=",b," c=",c); }

Получается если вы  программно не обнулили все глобальные переменные , то код при смене ТФ, инстр-та или входных параметров , будет работать с предыдущими значениями, т.е неправильно.

Разумно ли это? Не лучше ли сделать как в тестере стратегий? Там глобальные переменные переинициализируются при каждой смене ТФ, инструмента или входных параметров.

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