Rosh, ты же вроде бы никогда не страдал такой постановкой вопросов =)))
Rosh, ты же вроде бы никогда не страдал такой постановкой вопросов =)))
"Все течет, но ничего не меняется" - из дневника сантехника Потапова. :)
Что значит не страдал. Что-то подобное я уже писал несколько раз. В первый раз было неправильное использование мувингов от буферов - вопрос снялся. Второй раз просто не работало - вопрос снялся из-за отсутствия ответа и понимания (пришлось сделать тупо через любимое в нашей стране место). Это третий раз - ошибок явных я не вижу, использования неправильной инициализации буферов нет (потому как нет инициализации, грубо говоря), в обход пройти - можно, конечно, но я не встречал в мануале предупреждений о нежелательности использования индикатора от индикатора.
По-моему, индикатор от индикатора тут не причем. При инициализации TSI-Signals нормально не очищаются индикаторные массивы. И вроде как это с самых первых билдов тянется. Помогает принудительная очистка при деинициализации. В твоем случае:
int deinit() { for(int i=0;i<Bars;i++) { ExtMapBuffer1[i]=0.0; ExtMapBuffer2[i]=0.0; } SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); return(0); }
Хотя это извращение.
По-моему, индикатор от индикатора тут не причем. При инициализации TSI-Signals нормально не очищаются индикаторные массивы. И вроде как это с самых первых билдов тянется. Помогает принудительная очистка при деинициализации. В твоем случае:
int deinit() { for(int i=0;i<Bars;i++) { ExtMapBuffer1[i]=0.0; ExtMapBuffer2[i]=0.0; } SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); return(0); }
Хотя это извращение.
Есть такое подозрение. В таком случае может лучше использовать ArrayInitialize(ExtMapBuffer1,0.0)?
Хотя и тут есть две проблемы:
1. Рука не поднимается использовать функцию инициализации в деструкторе.
2. Эта процедура нежелательна из соображений экономии ресурсов процессора (я заметил, что просчитанные буфера при возврате в тайм-фрейм не пересчитываются).
3. Есть и третья проблема - разработчики скажут, что это корявое написание кода. :(
Я чего-то и не смотрел на функцию ArrayInitialize, сразу-то не мог написать про нее? ;)
Нарисуй такие связки в блоке Init:
Нарисуй такие связки в блоке Init:
// ... ArrayInitialize(ExtMapBuffer1,0.0); SetIndexEmptyValue(0,0.0); // ... ArrayInitialize(ExtMapBuffer2,0.0); SetIndexEmptyValue(1,0.0); // ...
и никакие деструкторы не нужны.
Хотя все равно не понятно, почему сами индикаторные массивы не очищаются при инициализации (без принудительной очистки).
Rosh, ты же вроде бы никогда не страдал такой постановкой вопросов =)))
"Все течет, но ничего не меняется" - из дневника сантехника Потапова. :)
Что значит не страдал. Что-то подобное я уже писал несколько раз. В первый раз было неправильное использование мувингов от буферов - вопрос снялся. Второй раз просто не работало - вопрос снялся из-за отсутствия ответа и понимания (пришлось сделать тупо через любимое в нашей стране место). Это третий раз - ошибок явных я не вижу, использования неправильной инициализации буферов нет (потому как нет инициализации, грубо говоря), в обход пройти - можно, конечно, но я не встречал в мануале предупреждений о нежелательности использования индикатора от индикатора.
я имел в виду _глубину_раскрытия_проблемы_, точное описание предпринятых действий и грамотно сформулированный вопрос - то, что часто просто необходимо для ответа, или хотя бы для того, чтоб твой код кто-то посмотрел =)))
to komposter
Думаю, ты прав. Лениво было все описывать, проще накинуть на график индикатор и все станет ясно. Хотя понимаю, что другим будет лениво накидывать индикатор на график :)
Если бы нужно было мне , я бы эту граблю, думаю, обошел бы. Но она неочевидна, нигде нет предупреждений по корректной работе с буферами. Согласен, что хороший стиль - это проверка всех возможных и невозможных ошибок.
Думаю, ты прав. Лениво было все описывать, проще накинуть на график индикатор и все станет ясно. Хотя понимаю, что другим будет лениво накидывать индикатор на график :)
Если бы нужно было мне , я бы эту граблю, думаю, обошел бы. Но она неочевидна, нигде нет предупреждений по корректной работе с буферами. Согласен, что хороший стиль - это проверка всех возможных и невозможных ошибок.
Я чего-то и не смотрел на функцию ArrayInitialize, сразу-то не мог написать про нее? ;)
Нарисуй такие связки в блоке Init:
Нарисуй такие связки в блоке Init:
// ... ArrayInitialize(ExtMapBuffer1,0.0); SetIndexEmptyValue(0,0.0); // ... ArrayInitialize(ExtMapBuffer2,0.0); SetIndexEmptyValue(1,0.0); // ...
и никакие деструкторы не нужны.
В принципе, для данного индикатора это наверно решение, так как количество ненулевых значений очень мало.
Так вот, этот второй начинает глючить при переключении тайм-фреймов
Сегодня кардинально решим эту проблему.
При переключении таймфреймов индикаторы будут полностью переинициализироваться автоматически.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Работает норамльно, переключение тайм-фреймов не приводит к сбоям.
На основе этого индикатора написан второй - TSI Signals, который выдает сигналы к покупке или продаже при пересечении линий индикатора TSI-Osc.
Так вот, этот второй начинает глючить при переключении тайм-фреймов.