Как правильно прописывать WhenIntervalElapsed? при следующем коде метод Test вызывается почему-то несколько раз
protected override void OnStarting()
{
this.Trader.WhenIntervalElapsed(new TimeSpan(0, 0, 10)).Do(Test).Apply(this);
base.OnStarting();
}
public void Test()
{
this.AddInfoLog("1....");
this.AddInfoLog("2....");
this.AddInfoLog("3....");
}
При этом, если в методе Test всего одна строчка, то проблема пропадает.
Kommentare (20)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Покажите лог, который это воспроизводит. Как правильную на ваш взгляд ситуацию, так и неправильную.
Добавил в OnStarting() что бы было видно, что процесс идет
this.Security.WhenMarketDepthChanged().Do(Test1).Apply(this);
и функцию
и вот, что получается в логах: | 05.07.2012 18:08:25.484 | | Стратегия запущена. | 05.07.2012 18:08:25.531 | | Бид 9132 322 | 05.07.2012 18:08:26.515 | | Бид 9132 302 | 05.07.2012 18:08:27.515 | | Бид 9131 320 | 05.07.2012 18:08:28.515 | | Бид 9131 345 | 05.07.2012 18:08:29.546 | | Бид 9132 5 | 05.07.2012 18:08:30.546 | | Бид 9132 11 | 05.07.2012 18:08:31.546 | | Бид 9133 7 | 05.07.2012 18:08:32.546 | | Бид 9132 13 | 05.07.2012 18:08:33.546 | | Бид 9132 5 | 05.07.2012 18:08:34.546 | | Бид 9132 5 | 05.07.2012 18:08:35.515 | | 1... | 05.07.2012 18:08:35.515 | | 2... | 05.07.2012 18:08:35.531 | | 3... | 05.07.2012 18:08:35.546 | | Бид 9132 5 | 05.07.2012 18:08:35.546 | | 1... | 05.07.2012 18:08:35.562 | | 2... | 05.07.2012 18:08:35.593 | | 3... | 05.07.2012 18:08:35.593 | | 1... | 05.07.2012 18:08:35.609 | | 2... | 05.07.2012 18:08:35.625 | | 3... | 05.07.2012 18:08:36.546 | | Бид 9132 25 | 05.07.2012 18:08:37.546 | | Бид 9132 29 | 05.07.2012 18:08:38.546 | | Бид 9132 6 | 05.07.2012 18:08:39.546 | | Бид 9131 1 | 05.07.2012 18:08:40.546 | | Бид 9133 6 | 05.07.2012 18:08:41.546 | | Бид 9130 308 | 05.07.2012 18:08:42.546 | | Бид 9131 370 | 05.07.2012 18:08:43.546 | | Бид 9131 300 | 05.07.2012 18:08:44.546 | | Бид 9131 300 | 05.07.2012 18:08:45.546 | | Бид 9131 325 | 05.07.2012 18:08:45.640 | | 1... | 05.07.2012 18:08:45.640 | | 2... | 05.07.2012 18:08:45.671 | | 3... | 05.07.2012 18:08:45.687 | | 1... | 05.07.2012 18:08:45.718 | | 2... | 05.07.2012 18:08:45.781 | | 3... | 05.07.2012 18:08:46.546 | | Бид 9132 2
А если Test() такой, то почему то нормально
Лог: | 05.07.2012 18:11:57.437 | | Стратегия запущена. | 05.07.2012 18:11:58.218 | | Бид 9147 95 | 05.07.2012 18:11:59.218 | | Бид 9147 95 | 05.07.2012 18:12:00.218 | | Бид 9147 8 | 05.07.2012 18:12:01.218 | | Бид 9146 120 | 05.07.2012 18:12:02.218 | | Бид 9147 27 | 05.07.2012 18:12:03.218 | | Бид 9147 85 | 05.07.2012 18:12:05.218 | | Бид 9147 40 | 05.07.2012 18:12:06.218 | | Бид 9147 44 | 05.07.2012 18:12:07.218 | | Бид 9147 44 | 05.07.2012 18:12:07.468 | | 1... | 05.07.2012 18:12:08.218 | | Бид 9147 13 | 05.07.2012 18:12:09.218 | | Бид 9147 3 | 05.07.2012 18:12:10.218 | | Бид 9147 5 | 05.07.2012 18:12:11.218 | | Бид 9147 28 | 05.07.2012 18:12:12.218 | | Бид 9147 28 | 05.07.2012 18:12:13.218 | | Бид 9148 16 | 05.07.2012 18:12:14.218 | | Бид 9148 11 | 05.07.2012 18:12:15.218 | | Бид 9149 231 | 05.07.2012 18:12:16.218 | | Бид 9149 9 | 05.07.2012 18:12:17.218 | | Бид 9149 9 | 05.07.2012 18:12:17.468 | | 1... | 05.07.2012 18:12:18.218 | | Бид 9149 11 | 05.07.2012 18:12:19.218 | | Бид 9149 10 | 05.07.2012 18:12:20.218 | | Бид 9150 93 | 05.07.2012 18:12:21.218 | | Бид 9152 92 | 05.07.2012 18:12:22.218 | | Бид 9152 3 | 05.07.2012 18:12:23.218 | | Бид 9152 34 | 05.07.2012 18:12:24.218 | | Бид 9152 6 | 05.07.2012 18:12:25.218 | | Бид 9152 28 | 05.07.2012 18:12:26.218 | | Бид 9152 7 | 05.07.2012 18:12:27.218 | | Бид 9153 20 | 05.07.2012 18:12:27.468 | | 1...
Если брейкпоинт поставить в Test1 в случае где много раз вызывается - это воспроизводится? Правило у вас 1 раз создаётся, из других мест Test1 не вызывается?
Да, с брейкпоинтом тоже,и проект чистый, только начал разбираться с библиотекой - правило один раз создается. Ради интереса, сейчас добавил в пример SampleSMA LogManager и монитор - происходит тоже самое..
А когда вместо WhenIntervalElapsed пишу это this.Trader.WhenTimeCome(DateTime.Now.AddSeconds(10)).Do(Test).Apply(this); то проект просто закрывается через 10 секунд без всяких эксцепшенов.
Вот лог который SampleSMA выдает: | 05.07.2012 19:03:11.359 | | Стратегия запущена. | 05.07.2012 19:03:12.375 | | Бид 9197 1 | 05.07.2012 19:03:13.375 | | Бид 9197 1 | 05.07.2012 19:03:14.562 | | Бид 9198 79 | 05.07.2012 19:03:15.562 | | Бид 9198 79 | 05.07.2012 19:03:16.562 | | Бид 9198 79 | 05.07.2012 19:03:17.562 | | Бид 9198 79 | 05.07.2012 19:03:21.390 | | 1... | 05.07.2012 19:03:21.390 | | 2... | 05.07.2012 19:03:21.390 | | 3... | 05.07.2012 19:03:21.562 | | Бид 9199 24 | 05.07.2012 19:03:22.562 | | Бид 9199 24 | 05.07.2012 19:03:23.562 | | Бид 9199 24 | 05.07.2012 19:03:24.562 | | Бид 9199 24 | 05.07.2012 19:03:25.562 | | Бид 9199 24 | 05.07.2012 19:03:26.562 | | Бид 9199 23 | 05.07.2012 19:03:27.562 | | Бид 9199 16 | 05.07.2012 19:03:28.562 | | Бид 9199 15 | 05.07.2012 19:03:29.562 | | Бид 9198 91 | 05.07.2012 19:03:31.390 | | 1... | 05.07.2012 19:03:31.390 | | 2... | 05.07.2012 19:03:31.406 | | 3... | 05.07.2012 19:03:31.421 | | 1... | 05.07.2012 19:03:31.453 | | 2... | 05.07.2012 19:03:31.468 | | 3... | 05.07.2012 19:03:33.562 | | Бид 9198 91 | 05.07.2012 19:03:34.562 | | Бид 9198 91 | 05.07.2012 19:03:35.562 | | Бид 9198 103 | 05.07.2012 19:03:36.562 | | Бид 9198 106 | 05.07.2012 19:03:37.562 | | Бид 9198 91 | 05.07.2012 19:03:38.562 | | Бид 9198 93 | 05.07.2012 19:03:39.562 | | Бид 9198 91 | 05.07.2012 19:03:40.562 | | Бид 9198 91 | 05.07.2012 19:03:41.484 | | 1... | 05.07.2012 19:03:41.484 | | 2... | 05.07.2012 19:03:41.484 | | 3...
и сам проект SampleSMA
Попробуйте версию с codeplex.
Скачал с codeplex версию 4.1.1. Осталось все тоже самое, похоже, что если эта функция не успела отработать за какой-то промежуток времени, то создаются еще потоки с вызовом этой функции, добавил в Test() кроме записей в лог еще вызов свой функции, которая прогоняет данные по коллекции нейросетей, и количество вызовов с двух-трех увеличилось до пяти.
Лог:
| 06.07.2012 15:22:19.812 | | Стратегия запущена. | 06.07.2012 15:22:20.125 | | Бид 9000 377 | 06.07.2012 15:22:21.125 | | Бид 9000 377 | 06.07.2012 15:22:22.125 | | Бид 9000 377 | 06.07.2012 15:22:23.125 | | Бид 9000 377 | 06.07.2012 15:22:24.125 | | Бид 9000 377 | 06.07.2012 15:22:24.828 | | 1... | 06.07.2012 15:22:24.843 | | Process. Коллекция: FUT_SBER60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 Среднее: -0,64 | 06.07.2012 15:22:24.859 | | Process. Коллекция: IND_RTS60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 Среднее: -0,35 | 06.07.2012 15:22:24.890 | | Process. Коллекция: IND_MICEX60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 Среднее: 1,56 | 06.07.2012 15:22:24.906 | | Прогнозирование. _general_director.Name: FUT_SBER60 = -0,64 IND_RTS60 = -0,35 Cor = 1,00 IND_MICEX60 = 1,56 Cor = 1,00 result: 0,57 | 06.07.2012 15:22:24.921 | | 2... | 06.07.2012 15:22:24.937 | | 3... | 06.07.2012 15:22:24.937 | | 1... | 06.07.2012 15:22:24.953 | | Process. Коллекция: FUT_SBER60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 Среднее: -0,64 | 06.07.2012 15:22:24.984 | | Process. Коллекция: IND_RTS60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 Среднее: -0,35 | 06.07.2012 15:22:25.000 | | Process. Коллекция: IND_MICEX60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 Среднее: 1,56 | 06.07.2012 15:22:25.000 | | Прогнозирование. _general_director.Name: FUT_SBER60 = -0,64 IND_RTS60 = -0,35 Cor = 1,00 IND_MICEX60 = 1,56 Cor = 1,00 result: 0,57 | 06.07.2012 15:22:25.015 | | 2... | 06.07.2012 15:22:25.015 | | 3... | 06.07.2012 15:22:25.031 | | 1... | 06.07.2012 15:22:25.078 | | Process. Коллекция: FUT_SBER60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 Среднее: -0,64 | 06.07.2012 15:22:25.093 | | Process. Коллекция: IND_RTS60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 Среднее: -0,35 | 06.07.2012 15:22:25.093 | | Process. Коллекция: IND_MICEX60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 Среднее: 1,56 | 06.07.2012 15:22:25.093 | | Прогнозирование. _general_director.Name: FUT_SBER60 = -0,64 IND_RTS60 = -0,35 Cor = 1,00 IND_MICEX60 = 1,56 Cor = 1,00 result: 0,57 | 06.07.2012 15:22:25.109 | | 2... | 06.07.2012 15:22:25.109 | | 3... | 06.07.2012 15:22:25.109 | | 1... | 06.07.2012 15:22:25.125 | | Бид 9000 358 | 06.07.2012 15:22:25.140 | | Process. Коллекция: FUT_SBER60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 Среднее: -0,64 | 06.07.2012 15:22:25.156 | | Process. Коллекция: IND_RTS60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 Среднее: -0,35 | 06.07.2012 15:22:25.171 | | Process. Коллекция: IND_MICEX60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 Среднее: 1,56 | 06.07.2012 15:22:25.171 | | Прогнозирование. _general_director.Name: FUT_SBER60 = -0,64 IND_RTS60 = -0,35 Cor = 1,00 IND_MICEX60 = 1,56 Cor = 1,00 result: 0,57 | 06.07.2012 15:22:25.171 | | 2... | 06.07.2012 15:22:25.187 | | 3... | 06.07.2012 15:22:25.203 | | 1... | 06.07.2012 15:22:25.218 | | Process. Коллекция: FUT_SBER60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 -0,64 Среднее: -0,64 | 06.07.2012 15:22:25.234 | | Process. Коллекция: IND_RTS60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 -0,35 Среднее: -0,35 | 06.07.2012 15:22:25.250 | | Process. Коллекция: IND_MICEX60 Дата: 6 июля 2012 г. Время: 14:00:00 Результат: 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 1,56 Среднее: 1,56 | 06.07.2012 15:22:25.250 | | Прогнозирование. _general_director.Name: FUT_SBER60 = -0,64 IND_RTS60 = -0,35 Cor = 1,00 IND_MICEX60 = 1,56 Cor = 1,00 result: 0,57 | 06.07.2012 15:22:25.250 | | 2... | 06.07.2012 15:22:25.265 | | 3... | 06.07.2012 15:22:26.125 | | Бид 9000 358 | 06.07.2012 15:22:27.125 | | Бид 9000 5 | 06.07.2012 15:22:28.125 | | Бид 9000 15 | 06.07.2012 15:22:29.125 | | Бид 9000 15 | 06.07.2012 15:22:30.125 | | Бид 9000 21
Я имел в виду попробуйте версию с codeplex из исходников, из папки trunk\References
С trunk не собирается, говорит что
С trunk не собирается, говорит что
Ух. не собирается что? Ваш проект? Ну так поправьте всё что он вам говорит. RegisterQuotes переименовался в RegisterMarketDepth
Да, собрал, не сообразил просто, что метод переименовали:) А проблема осталось, только теперь не 5 вызовов с включенным прогоном по нейросетям, а так же два-три.
Попробовал воспроизвести ошибку. Сборка 18107.
Это если в качестве вывода лога использовать GuiLogListener. Если с FileLogListener, бага нет.
Но если воткнуть искусственную задержку, то баг снова появляется.
18108 последняя, её и надо использовать. В ней я фиксил.
Спасибо, в 18108 проблема исчезла:) Вот только проблема с MarketRuleHelper.WhenTimeCome осталось Если добавить следующее, то приложение просто падает через 10 секунд без эксцепшенов, а логах из файла видно, что напоследок оно так же несколько раз вызвало Test()
А если использовать следующий код, то падает только на последнем элементе, то есть через 20 секунд после запуска.
Ставьте брейкпоинты в ваш метод Test, смотрите где конкретно падает. Смотрите под VS, в окно Output он всё напишет. Чудес не бывает, приложение не может падать просто так.
до 18108, он просто падал, никаких сообщений в Output не выводил, в логах было видно, что он запускал Test() несколько раз, сейчас в логах из файла так:
Не воспроизводится у меня. Используется 4.1.2?
Если да - кидайте минимальный проект, на котором это воспроизведётся.
Да, 4.1.2
https://dl.dropbox.com/u/13645549/SampleSMAError.zip