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


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


Добрый день!

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

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

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

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

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

Теги:


Спасибо:




2 Ответов
ra81

Фотография
Дата: 28.03.2012
Ответить


Spiritschaser Перейти
Добрый день!

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

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

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

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

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

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

Spiritschaser

Фотография
Дата: 14.04.2012
Ответить


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

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

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

Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy