Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
2. Вопрос по поводу "Счётчик индикатора обнулится либо после OnDeinit программы, её создавшей, либо после явного вызова IndicatorRelease":
1. Нет. В данном случае копия одна, но со счётчиком равным 2
2,3. У Вас какие то сложные случаи. Зачем добавлять индикатор на график? Если добавили, то надо делать ChartIndicatorDelete до вызова IndicatorRelease/
Зачем вызывать IndicatorRelease? Индикатор зарелизится автоматически. Вы что-то перемудрили.
После всех освобождений индикаторы работают больше 20 минут? Проверьте все другие обращения к этому же символу-периоду.
//--------------
1. Я добавляю в советнике индикатор на график через ChartIndicatorAdd() для того, чтобы видеть на графике индикатор.
Ибо iCustom() не делает его видимым и не размещает на графике.
2. ChartIndicatorDelete() у меня нормально выполняется и индикатор с графика удаляется, это производится в секции OnDeinit().
Выше Вы писали, что при исполнении OnDeinit() создавшей индикатор программы счетчик индикатора обнуляется. Видимо в моём случае это не так.
Кроме того после выполнения ChartIndicatorDelete() корректно выполнить IndicatorRelease() уже невозможно (хотя я и пытаюсь), хотя в документации рекомендуется это делать для освобождения хендла:
https://www.mql5.com/ru/docs/chart_operations/chartindicatordelete
ChartIndicatorDeleteУдаляет с указанного окна графика индикатор с указанным именем.
...
Примечание
...
Удаление индикатора с графика не означает, что расчетная часть индикатора также будет удалена из памяти терминала. Для освобождения хэндла индикатора используйте функцию IndicatorRelease().
3. Никаких других обращений нет, есть только остатки от двух запущенных индикаторов, которые считывают значения друг друга. Даже когда самого графика на который их размещали уже нет. И программы породившей эти индикаторы тоже нет.
Вы невнимательно прочитали моё объяснение. Фраза "счётчик индикатора обнулится" находится после фразы "счётчик равен 1"
Принял к сведению Ваше уточнение. Но в моём случае как раз и происходит, в советнике породившем индикаторы:
1. В OnDeinit() сначала производится удаление индикаторов с чарта ChartIndicatorDelete() - удачное (в результате по каждому из индикаторов счетчик = 1)
2. Затем попытка IndicatorRelease() - неудачная, видимо после ChartIndicatorDelete() хендла больше нет ?
3. И это происходит внутри OnDeinit(), после завершения которой должно быть уменьшение счетчика (?) (в результате счетчик = 0)
Правильно?
После 1, да, обнуляется.
После 2 становится 1.
Обращение двух индикаторов друг к другу образует "порочный круг" и может не позволить освободить оба индикатора.
Вам нужен какой-то специальный способ для вывода этих индикаторов из клинча
После 1, да, обнуляется.
После 2 становится 1.
Обращение двух индикаторов друг к другу образует "порочный круг" и может не позволить освободить оба индикатора.
Вам нужен какой-то специальный способ для вывода этих индикаторов из клинча
Спасибо. А можно услышать Ваше мнение по поводу моего замечания:
Кроме того после выполнения ChartIndicatorDelete() корректно выполнить IndicatorRelease() уже невозможно (хотя я и пытаюсь), хотя в документации рекомендуется это делать для освобождения хендла:
Должна ли работать IndicatorRelease() после применения ChartIndicatorDelete() или последняя уже предусматривает в себе удаление хендла?
Спасибо. А можно услышать Ваше мнение по поводу моего замечания:
Должна ли работать IndicatorRelease() после применения ChartIndicatorDelete() или последняя уже предусматривает в себе удаление хендла?
Должна работать. И именно в этой последовательности должно быть.
ChartIndicatorDelete удаляет индикатор с графика (кстати, не сразу) и убавляет счётчик. Хэндл тут совсем ни при чём.
IndicatorRelease убавляет счётчик и убивает хэндл.
Выкладываю последнюю версию комплекса из инициирующего советника и параллельных индикаторов.
Вопрос гарантированного прерывания работы индикаторов решен через использование глобальных переменных терминала.
Размышления по поводу использования параллельной работы индикаторов:
Большое спасибо всем участникам и читателям обсуждения.
Должна работать. И именно в этой последовательности должно быть.
ChartIndicatorDelete удаляет индикатор с графика (кстати, не сразу) и убавляет счётчик. Хэндл тут совсем ни при чём.
IndicatorRelease убавляет счётчик и убивает хэндл.
Да вот к сожалению не работает, если бы работало, то и большей части обсуждения бы не было.
Не пришлось бы придумывать метод гашения индикаторов.
P.S. IndicatorRelease() после применения ChartIndicatorDelete() работает. В моём коде перед ChartIndicatorDelete() уже было использовано IndicatorRelease().
Впрочем это не изменило ситуацию с необходимостью уничтожения зациклившихся параллельных ордеров специальными методами.
Для более устойчивого запуска используйте
int Count=1000;
в теле индикаторов взамен имеющегося
int Count=100;