Внутренняя жизнь пользовательского индикатора

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
serrrega
Сообщения: 10
Зарегистрирован: Чт мар 12, 2009 7:17 pm

Внутренняя жизнь пользовательского индикатора

#1 Сообщение serrrega » Вс июн 21, 2009 12:57 pm

Здравствуйте, уважаемый Терранин и обитатели форума!

Создал я тестовый индикатор, который пишет в лог каждый тик, подаваемый на вход Calculete(). При этом каждый запускаемый экземпляр пишет в свой лог-файл, который создается при вызове Init() и закрывается при вызове Done(). Позапускал его в режиме тестирования и возникли у меня следующие вопросы:

1. При запуске программы, даже если не открыто ни одного окна с графиком, создается один экземпляр индикатора (вызывается Init()), затем он разрушается (Done()) и создается второй экземпляр. В процессе работы, если создать окно с графиком, добавить индикатор, закрыть окно, и повторить эту процедуру несколько раз, создается множество экземпляров индикаторов (хотя таймфрейм и инструмент создаваемых окон один и тот же). Как можно объяснить такое поведение и нет ли "утечки" индикаторов в FT?

2. Функция OnChangeParams() иногда вызывается дважды при старте, однако если остановить тестирование и начать его заново - она не вызывается. Т.е. индикатор переносят назад во времени без уведомления его об этом. Корректно ли это?

3. Взял историю EURUSD с Вашего сайта, испортировал, сгенерил тики по методу open-high-low-close. Однако наблюдаю, что при тестировании на некоторых минутных интервалах тики в индикатор не приходят. Например, вот фрагмент лога с временами тиков:
EURUSD [00000000] 01-01-08 23:02
EURUSD [00000001] 01-01-08 23:02
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:05
EURUSD [00000001] 01-01-08 23:05
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000001] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000001] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:08
EURUSD [00000001] 01-01-08 23:08
EURUSD [00000000] 01-01-08 23:09
EURUSD [00000000] 01-01-08 23:09
EURUSD [00000001] 01-01-08 23:09
EURUSD [00000000] 01-01-08 23:10
EURUSD [00000000] 01-01-08 23:10
EURUSD [00000001] 01-01-08 23:10

Видно, что в 23:04 и в 23:07 не было ни одного тика, хотя в импортированном файле истории есть минутные бары с этим временем.

С уважением, Serrrega.

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

Re: Внутренняя жизнь пользовательского индикатора

#2 Сообщение Terranin » Вс июн 21, 2009 4:09 pm

serrrega писал(а):Здравствуйте, уважаемый Терранин и обитатели форума!

Создал я тестовый индикатор, который пишет в лог каждый тик, подаваемый на вход Calculete(). При этом каждый запускаемый экземпляр пишет в свой лог-файл, который создается при вызове Init() и закрывается при вызове Done(). Позапускал его в режиме тестирования и возникли у меня следующие вопросы:

1. При запуске программы, даже если не открыто ни одного окна с графиком, создается один экземпляр индикатора (вызывается Init()), затем он разрушается (Done()) и создается второй экземпляр. В процессе работы, если создать окно с графиком, добавить индикатор, закрыть окно, и повторить эту процедуру несколько раз, создается множество экземпляров индикаторов (хотя таймфрейм и инструмент создаваемых окон один и тот же). Как можно объяснить такое поведение и нет ли "утечки" индикаторов в FT?

2. Функция OnChangeParams() иногда вызывается дважды при старте, однако если остановить тестирование и начать его заново - она не вызывается. Т.е. индикатор переносят назад во времени без уведомления его об этом. Корректно ли это?

3. Взял историю EURUSD с Вашего сайта, испортировал, сгенерил тики по методу open-high-low-close. Однако наблюдаю, что при тестировании на некоторых минутных интервалах тики в индикатор не приходят. Например, вот фрагмент лога с временами тиков:
EURUSD [00000000] 01-01-08 23:02
EURUSD [00000001] 01-01-08 23:02
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:05
EURUSD [00000001] 01-01-08 23:05
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000001] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:06
EURUSD [00000001] 01-01-08 23:06
EURUSD [00000000] 01-01-08 23:08
EURUSD [00000001] 01-01-08 23:08
EURUSD [00000000] 01-01-08 23:09
EURUSD [00000000] 01-01-08 23:09
EURUSD [00000001] 01-01-08 23:09
EURUSD [00000000] 01-01-08 23:10
EURUSD [00000000] 01-01-08 23:10
EURUSD [00000001] 01-01-08 23:10

Видно, что в 23:04 и в 23:07 не было ни одного тика, хотя в импортированном файле истории есть минутные бары с этим временем.

С уважением, Serrrega.
1. Лишние индикаторы удаляются потом при переключении между режимами редактирования и тестирования а также при перезапуске программы.

2. OnChangeParams вызывается только при изменении параметров индикатора. При перезапуске зачем ее вызывать если параметры не менялись?

3. вообще-то при генерации тиков на каждый минутный бар создается не больше 4х тиков

RUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000000] 01-01-08 23:03
EURUSD [00000001] 01-01-08 23:03

вот в этом куске уже видно что их 6, функция преобразования времени в строку скорее всего косячит. И там часть тиков из 23:04 попала в 23:03 чисто на преобразовании в строку.
Asta la vista
Mike

Ответить