Момент синхронизации значений индикаторов со списком в контейнере индикаторов


Момент синхронизации значений индикаторов со списком в контейнере индикаторов
Atom
3/28/2012


Добрый день!

Обнаружил странное.

Робот написан на основе SimpleSMA из примеров QUIK.

У меня заполняется десяток индикаторов, все они зарегистрированы в менеджере индикаторов.
В начале при подключении к QUIK в две-три порции получаем старые данные за текущий день, и по ним заполняем индикаторы.
Проблема в том, что после заполнения индикаторов (метод Process через класс стратегии, в которую переданы индикаторы), их ЕЩЁ нет в контейнере. В контейнере они появляются ПОСЛЕ следующего события "_candleManager.CandlesStarted".

Я так понял, что проблема в синхронизации данных между потоками. Попытался сделать lock, не помогло (возможно, я не понимаю, что именно нужно лочить).

Я не совсем понимаю, в какую сторону смотреть. ПОЛНОСТЬЮ переписать программу и сделать её thread-safe я, видимо, не сумею, и мне кажется, есть способ намного проще.

Tags:


Thanks:




ra81

Avatar
Date: 3/28/2012
Reply


Spiritschaser GoTo
Добрый день!

Обнаружил странное.

Робот написан на основе SimpleSMA из примеров QUIK.

У меня заполняется десяток индикаторов, все они зарегистрированы в менеджере индикаторов.
В начале при подключении к QUIK в две-три порции получаем старые данные за текущий день, и по ним заполняем индикаторы.
Проблема в том, что после заполнения индикаторов (метод Process через класс стратегии, в которую переданы индикаторы), их ЕЩЁ нет в контейнере. В контейнере они появляются ПОСЛЕ следующего события "_candleManager.CandlesStarted".

Я так понял, что проблема в синхронизации данных между потоками. Попытался сделать lock, не помогло (возможно, я не понимаю, что именно нужно лочить).

Я не совсем понимаю, в какую сторону смотреть. ПОЛНОСТЬЮ переписать программу и сделать её thread-safe я, видимо, не сумею, и мне кажется, есть способ намного проще.

А если индикатор манагер создавать на базе кандл манагера, а в кандл манагер предварительно загружать историю? Тогда при добавлении индикатора он автоматом посчитается по данным из кандл манагера и будет полностью сформирован. Как вам такой вариант?
Thanks:

Spiritschaser

Avatar
Date: 4/15/2012
Reply


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

Прямо сейчас я несколько изменил стратегию и мне не нужна куча прошлых значений индикаторов.
Но показалось несколько кривоватым, что индикатор с нулевым отступом от текущего времени не равен текущему значению индикатора, а равен предыдущему.

В целом, это всё решается и просто чуть путает код.

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy