Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
17 экспертов с вызовами iCustom - это не менее 34 запущенных программ, у которых масса закешированных буферов (особенно у индикаторов). Уверен, что кроме экспертов, на графики явно наложены те же самые кастомные индикаторы. Грубым итогом будет 17 экспертов + 17 индикаторов в экспертах + 17 индикаторов на графиках = 51 MQL4 программ, запущенных в одном терминале. За удовольствие работать с таким количеством собственного кода надо платить. В данном случае - памятью. И 300Mb - это совсем мало.
Это ли не кривость реализации? А точнее плохая концепция которая к этому привела.
Вывод который можно сделать - все расчты нужно делать внутри эксперта и не использовать iCustom.
Индикатор расчитывается 1 раз, только его последний бар пересчитывается когда нужно.
iCustom фактически просто созвращает значение из буфера индикатора, т.е. это очень быстро.
Если гдето используется индикатор А, то вычисляется он только 1 раз,
независимо от того, сколько iCustom и где мы напишем.
Ну и мы гарантированно видим то же самое, что и эксперт
(эксперт на тик позже у меня получалось).
В общем мне кажется что удобно сигналы описывать как индикаторы и вызывать их в экспертах через iCustom. Только глюк с утечкой памяти нужно устранить.
Если я правильно понял Славу то не все так просто....
Индикатор расчитывается в потоке который имеет меньший приоритет чем эксперт.
И есть возможность в эксперте дожидаясь значения от индикатора пропустить
квант времени который выделили эксперту.
Я так думаю, что ВАМ стоит поумерить свой пыл и перестать употреблять слова про "кривость". Идите и реализуйте что-либо лучше нас. А мы посмотрим. Надоели крикуны, кто не в состоянии сам что-то сделать, но уверенные в том, что им должны все забесплатно на блюдечке приподнести.
Индикатор расчитывается в потоке который имеет меньший приоритет чем эксперт.
И есть возможность в эксперте дожидаясь значения от индикатора пропустить
квант времени который выделили эксперту.
Опять домыслы. Индикатор, вызываемый из эксперта, работает в контексте эксперта, в его потоке и ничего не пропускает.
Отправил папки профайле, лог, конфиг.
На текущий момент
RAM = 75800K
VM = 598660K
CPU = 1:44:52
(примерно за сутки)
goldenlion все правильно говорит,
а вы просто горячитесь.
goldenlion,
300Мег - это не кривость, это баг, и я надеюсь его найдут и исправят.
Реально МТ с 17 чартами, 34 индикаторами и 17 экспертами занимает 5-10 М оперативки и ~20М виртуальной памяти.
МТ действительно очень экономичен по ресурсам.
goldenlion все правильно говорит,
а вы просто горячитесь.
Все очень просто - за многократные попытки унизить нас и наши разработки - однозначный бан.
Менее чем за 20 часов работы МТ - VM использовано 526Мб,
и продолжает расти с той же скоростью.
Ренат, посоветуйте, сколько мне нужно поставить памяти в комп,
чтобы хватило хотя бы на неделю непрерывной работы?
И вы будете продолжать настаивать что это не баг а фича?
:))
вскрытие показало, что быстрый расход памяти происходит из-за её фрагментации. фрагментация происходит от распределения памяти под временную строку с последующим освобождением (утечка памяти здесь была - мы не освобождали временные строки). пример проблемы
в результате передачи всего одного строкового параметра были созданы, а потом уничтожены 5 временных строк.
данную проблему вылечил вот такой код
в связи с этим мы введём функцию StringConcatenate, чтобы не плодить временных строк
то есть, это баг, но не совсем наш
Информация очень существенная ! Из нее следует, что в эксперте
практически ничем нельзя пользоваться из того, что делает
индикатор полезным. Все надо делать своими руками.
зачем? чем отличается индикатор на графике и индикатор, вызванный из эксперта? практически только одним моментом - индикатор, вызванный из эксперта, не отрисовывается на графике! И ВСЁ.
На самом деле очень многим. Например тем, что буферы индикатора в
индикаторе доступны целиком, а в эксперте - только поэлементно. Чтобы
работать в эксперте с этими буферами нужно создавать для них копии
в массивах, да еще и вести их так, как в индикаторе МТ4 ведет буферы.
Но этого недостаточно, поскольку теперь возникает куча новых
вопросов. Например:
Ни буферы, ни средства их использования получается в экспертах
использовать нельзя. Чего еще нельзя делать в экспертах ?
Как сами разработчики представляют стратегию использования
индикаторов и экспертов ? И т.д.
это не вопрос.
Что не вопрос ?
К пониманию разницы между экспертом и индикатором и стремятся все
на этом форуме. К сожалению как правило они получают не объяснения по
сути ( ведь сколько раз уже им, бестолковым, разработчики все объясняли ),
а полемику на тему "кто правее" или колкости Рената.
Ренат, если вы удалили goldenlion за некорректность, то по логике вещей
должны удалить и себя. Вы явно обошли его в этом соревновании.
Похоже на то.
Убрал вызов Log() из индикатора, утечка пропала.
Сейчас терминал (со всеми 17 чартами) использует 14280К виртуальной памяти,
и утечки нет.
данную проблему вылечил вот такой код
А такой записи недостаточно?
Тут тоже будет утечка?
ИМХО, неудачный вариант (?).
1. просто неудобно везде это писать, громоздко получается и легко забыть.
2. проблема вроде бы так не снимается - то же выражение в качестве параметра функции используется.
3. проблема только в индикаторе вызываемом через iCustom, в эксперте есть такой же вызов Log() и это никак не проявляется.
Но в любом случае спасибо.
А такой записи недостаточно?
Тут тоже будет утечка?
не утечка. но будут созданы и уничтожены 3 временные переменные. из-за переобразований.
поясняю, представленное выражение будет развёрнуто в примерно такой трёхадресный код
ИМХО, неудачный вариант (?).
1. просто неудобно везде это писать, громоздко получается и легко забыть.
не пишите. никто не заставляет. но получите неоправданный расход памяти.
2. проблема вроде бы так не снимается - то же выражение в качестве параметра функции используется.
не используйте строковые выражения в качестве параметра! в этом случае образуется временная строка, которую надо будет сразу освобождать. лучше передавайте параметр через явную строку, чтобы не было освобождения.
3. проблема только в индикаторе вызываемом через iCustom, в эксперте есть такой же вызов Log() и это никак не проявляется.
проявляется. просто в Вашем кастомном индикаторе используются более сложные выражения и выводится чаще.
Вам спасибо. будем работать над кодогенерацией