Добрый день!
Обнаружил странное.
Робот написан на основе SimpleSMA из примеров QUIK.
У меня заполняется десяток индикаторов, все они зарегистрированы в менеджере индикаторов. В начале при подключении к QUIK в две-три порции получаем старые данные за текущий день, и по ним заполняем индикаторы. Проблема в том, что после заполнения индикаторов (метод Process через класс стратегии, в которую переданы индикаторы), их ЕЩЁ нет в контейнере. В контейнере они появляются ПОСЛЕ следующего события "_candleManager.CandlesStarted".
Я так понял, что проблема в синхронизации данных между потоками. Попытался сделать lock, не помогло (возможно, я не понимаю, что именно нужно лочить).
Я не совсем понимаю, в какую сторону смотреть. ПОЛНОСТЬЮ переписать программу и сделать её thread-safe я, видимо, не сумею, и мне кажется, есть способ намного проще.
コメント (2)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Ну, в итоге это потеряло актуальность, так как в принципе текущие данные обновляются с интервалом в таймфрейм, единственное место проблемы задержки - во время запуска робота.
Прямо сейчас я несколько изменил стратегию и мне не нужна куча прошлых значений индикаторов. Но показалось несколько кривоватым, что индикатор с нулевым отступом от текущего времени не равен текущему значению индикатора, а равен предыдущему.
В целом, это всё решается и просто чуть путает код.