не вызывается OnParametersChange

Сообщайте о возможных ошибках в программе.
Ответить
Сообщение
Автор
Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

не вызывается OnParametersChange

#1 Сообщение Rmax » Вс окт 14, 2007 4:16 am

В функции OnParametersChange сделал Print("1");
Меняю параметер индикатора, сохраняю, вызова нет
В чем проблема?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: не вызывается OnParametersChange

#2 Сообщение Terranin » Вс окт 14, 2007 3:07 pm

Rmax писал(а):В функции OnParametersChange сделал Print("1");
Меняю параметер индикатора, сохраняю, вызова нет
В чем проблема?
А была ли эта процедура описана как внешняя в разделе Exports? Если она не была описана то программа считает что такого метода в индикаторе нет и не вызывает его.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

Re: не вызывается OnParametersChange

#3 Сообщение Rmax » Вс окт 14, 2007 4:31 pm

Terranin писал(а):
Rmax писал(а):В функции OnParametersChange сделал Print("1");
Меняю параметер индикатора, сохраняю, вызова нет
В чем проблема?
А была ли эта процедура описана как внешняя в разделе Exports? Если она не была описана то программа считает что такого метода в индикаторе нет и не вызывает его.
да, описана

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: не вызывается OnParametersChange

#4 Сообщение Terranin » Вс окт 14, 2007 4:45 pm

Rmax писал(а):
Terranin писал(а):
Rmax писал(а):В функции OnParametersChange сделал Print("1");
Меняю параметер индикатора, сохраняю, вызова нет
В чем проблема?
А была ли эта процедура описана как внешняя в разделе Exports? Если она не была описана то программа считает что такого метода в индикаторе нет и не вызывает его.
да, описана
Скинь скомпиллированный индикатор и исходник - погляжу.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#5 Сообщение Rmax » Вс окт 14, 2007 8:02 pm

скинул в личку

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#6 Сообщение Rmax » Пн окт 15, 2007 1:10 pm

Подвижки есть?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#7 Сообщение Terranin » Пн окт 15, 2007 4:14 pm

Rmax писал(а):Подвижки есть?
Ошибка в документации. Не OnParametersChange а OnParamsChange. Программа не находила функцию.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#8 Сообщение Rmax » Пн окт 15, 2007 8:45 pm

удалено
Последний раз редактировалось Rmax Пн окт 15, 2007 9:01 pm, всего редактировалось 1 раз.

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#9 Сообщение Rmax » Пн окт 15, 2007 9:00 pm

Terranin писал(а):
Rmax писал(а):Подвижки есть?
Ошибка в документации. Не OnParametersChange а OnParamsChange. Программа не находила функцию.
Работает, но странно. Почему функция отрабатывает в момент запуска ФТ? Никаких связываний на этом этапе происходить не должно. Я пытаюсь вызвать Symbol() в этой функции, при запуске тестера Symbol() отрабатывает некорректно, соответственно, индюк не подцепляется.

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

Нынешняя функция Init должна вызываться только при связывании индюка с таймфреймом-валютой.
Функция OnParamsChange должна вызываться после Init и затем на смену параметров.

К сожалению, такое изменение поломает существующие индюки. Хотя, можно оставить функцию Init как запускающуюся при старте ФТ, и добавить новую функцию InitIndicator.

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#10 Сообщение Terranin » Вт окт 16, 2007 3:49 pm

Rmax писал(а):
Terranin писал(а):
Rmax писал(а):Подвижки есть?
Ошибка в документации. Не OnParametersChange а OnParamsChange. Программа не находила функцию.
Работает, но странно. Почему функция отрабатывает в момент запуска ФТ? Никаких связываний на этом этапе происходить не должно. Я пытаюсь вызвать Symbol() в этой функции, при запуске тестера Symbol() отрабатывает некорректно, соответственно, индюк не подцепляется.

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

Нынешняя функция Init должна вызываться только при связывании индюка с таймфреймом-валютой.
Функция OnParamsChange должна вызываться после Init и затем на смену параметров.

К сожалению, такое изменение поломает существующие индюки. Хотя, можно оставить функцию Init как запускающуюся при старте ФТ, и добавить новую функцию InitIndicator.
При запуске FT создается список индикаторов и для каждого вызывается Init которая создает все переменные и буферы, иначе как бы программа знала сколько переменных и какого типа они еще до установки индикатора на чарт?

Индикатор создается с установками по умолчанию, потом если настройки индикатора менялись раньше то они сохранились и применяются к индикатору что приводит к вызову OnParamsChange. Я не предполагал там использование функций связанных с валютой, обычно индикатору все равно где работать - он работает с барами.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#11 Сообщение Rmax » Ср окт 17, 2007 1:14 am

Terranin писал(а): При запуске FT создается список индикаторов и для каждого вызывается Init которая создает все переменные и буферы, иначе как бы программа знала сколько переменных и какого типа они еще до установки индикатора на чарт?
Вот именно для этого я и предлагаю разнести Init на две функции.
Terranin писал(а): Индикатор создается с установками по умолчанию, потом если настройки индикатора менялись раньше то они сохранились и применяются к индикатору что приводит к вызову OnParamsChange. Я не предполагал там использование функций связанных с валютой, обычно индикатору все равно где работать - он работает с барами.
OnParamsChange по моему разумению должна вызваться уже непосредственно при добавлении индюка на чарт.

Понятно, что этого в ближайшее время не будет. Но может быть когда-нибудь в будущем...

Ответить