Ошибка: котирование порождает несколько выполненных заявок


Ошибка: котирование порождает несколько выполненных заявок
Atom
10.11.2011


Проблема проявляется даже стандартном примере SampleHistoryTesting. Для обнаружения в OnProcess достаточно добавить
Код
if (Math.Abs(PositionManager.Position) > Volume)
  throw new Exception("Неверное состояние - поза превышает рабочий объем.");

и после получения эксепшена посмотреть Trader.Orders - последние две заявки будут исполненными, а перед ними будет несколько отмененных с примерно тем же временем.

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

Теги:


Спасибо:


< 1 2 3 4 5  > >>
Mikhail Sukhov

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


Camill Перейти
Я кого-нибудь убедил в существовании проблемы, или еще что-то нужно уточнить?


Небольшой вопрос. А позиция учитывает стандартно, по заявкам, или по сделкам?

В принципе нашел несколько мест. Так что будем лечить как лечили проблему с позами - в несколько этапов.
Спасибо:

kenota

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


А может эта ошибка быть связана с сообщениями о том что заявка не имеет состояния?

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

Это возникает в разное время от начала эмуляции.

Явно связано с многопоточностью, увелечиение параметра LoadingThreadCount у EmulationTrader вроде дает шанс получить ошибку еще раньше. То есть чем больше потоков тем больше вероятность наступления. При LoadingThreadCount=1 ошибка все равно проявляется.

Прикладываю скриншот логов о которых я говорю (это сообщение повторяется вечно и ордер никогда не выполняется).

Так же, один раз при тесте, когда я экспериментировал с количеством потоков выскочило окно с эксепшеном (мессадж бокс, то есть кто то его обработал), скрин этого эксепшена прикладываю к сообщению тоже.

Да, единственные изменения от тестового примера у меня это вывод логов в окно и период тестирования с 20 числа, что бы рынок поактивней был.

Есть варианты как это обойти можно? а то не получается стратегию оттестировать на истории вообще :(
exception.png 28 KB (148) orderFail.png 144 KB (183)
Спасибо:

Camill

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


kenota Перейти
через некоторое время он просто зависает

Аналогично, моя стратегия тоже зависает где-то после десятка-другого сделок.
Спасибо:

Mikhail Sukhov

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


kenota Перейти
Явно связано с многопоточностью


Попробуйте EmulationTrader.MarketEmulator установить не ParallelEmulator а Sync.
Спасибо:

Camill

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


Такой вот код не помог, все равно зависает:
Код
_trader.MarketEmulator = new SyncMarketEmulator(_trader);
Спасибо:

andy_baka_

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


Alexander Mukhanchikov Перейти

2) PositionManager.Position может обновиться чуть позднее


Александр, а насколько к PositionManager.Position можно привязываться как к индикатору состояния позиции?
Спасибо:

esper

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


Camill Перейти
Такой вот код не помог, все равно зависает:
Код
_trader.MarketEmulator = new SyncMarketEmulator(_trader);

Сама стратегия у вас из примера, только окно логов добавлено? Если просто взять стандартный пример ошибка повторяется? Можете выложить ваш проект на котором повторяется ошибка? Какая конфигурация компа, т.е. сколько ядер и памяти?
Спасибо:

Camill

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


esper Перейти
Если просто взять стандартный пример ошибка повторяется? Можете выложить ваш проект на котором повторяется ошибка? Какая конфигурация компа, т.е. сколько ядер и памяти?

Пример SampleHistoryTesting, 4 ядра, 16 гигов памяти. На нем проявляются и зависание и дублирование заявок.
Мы уже разбирались вчера вечером с Михаилом Суховым, у него ошибка с зависанием повторилась, так что по этому поводу он теперь больше знает.
Но пока еще не понятно, возможно, дублирование заявок - это другая ошибка, не связанная с зависанием.
Спасибо:

Camill

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


Похоже, ошибка исправлена, но стало работать в несколько раз медленнее, и памяти жрать чуть ли не в два раза больше.
Спасибо:

Mikhail Sukhov

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


Camill Перейти
Похоже, ошибка исправлена, но стало работать в несколько раз медленнее, и памяти жрать чуть ли не в два раза больше.


Обычное в сравнительном приложении в русском языке пишут 2 части. Вторую часть пишут через слово "чем". Собственно, чем что?
Спасибо:
< 1 2 3 4 5  > >>

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

loading
clippy