← Zurück

Событийная модель S#2.4 не работает

А OnProcess можно использовать в событийных моделях? Создал стратегию, отнаследовался от ActionStrategy. Далее в OnProcess с помощью AddSecurityLastTradePriceMoreAction при превышении определённой ценового порога нужно запустить котирование. Не запускается. Почему в OnProcess, потому что с какой-то частотой этот порог меняется и это нужно отслеживать. Вообще все эти событийные методы Add.... не забирают управление стратегией как котирование? И ещё при компилировании VS мне выдаёт предупреждение, не ошибку, что нельзя проверить код при вызове через ключевое слово "base" из лямбда- выражения, анонимного метода. Это нормально? base.AddSecurityLastTradePriceLessAction(base.Security, price_exe, () => { var direction = OrderDirections.Sell; var order = base.CreateOrder(direction, base.Security.GetMarketPrice(direction, MarketPriceTypes.Following), vlm_int); var strategy = new MarketQuotingStrategy(order, delta); strategy.Start();

base.ChildStrategies.Add(strategy); }

War dieses Thema hilfreich?

Thema teilen

Kommentare (7)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Если Вы так будете делать, то при каждом OnProcess у Вас будет добавляться в очередь событие ожидания. Не очень хорошо для производительности. Добавляйте их, скажем, в конструкторе или OnRunning. И почему у Вас пример с событием ожидания понижения порога цены?

Даже котирование не забирает.http://stocksharp.com/doc/help/html/8ea639f6-ce74-4a00-9f13-db59c8c2396f.htm

(там где написано про параллельную работу)

Я просто это слово убираю. Это особенность лямбда реализаций.

Mikhail Sukhov
Mikhail Sukhov

И еще. В котирование можно пускать заявку без предваритального вычисления цены. Котирование как раз само вычисляет рыночцую цену.

dart
dart Autor

OnRunning не подходит, так как он вызывается только в начале работы стратегии, мне надо чтобы это (пересмотр ценового порога) делалось циклично на протяжении всей работы стратегии. Конструктор имеется ввиду MainWindow? У меня есть примеры и с повышением порога и с понижением. Ни тот ни другой не работает. Стратегия просто проскакивает через него (метод Add...) и выполняет стоящий после него оператор.

Mikhail Sukhov
Mikhail Sukhov

Конечно проскакивает. Событийная модель на то и событийная, что она работает в другом потоке. Но этот поток у Вас не функционирует, потому что Вы переопределили OnProcess.

Вам нужно или отказаться от событий. Или использовать только события. Например, отслеживать те параметры, на основе которых Вы принимаете решение - менять ценовой порог или нет.

dart
dart Autor

Андерстэнд. Тогда получится вложенное ожидание. Сначала с помощью AddAction ждём когда изменится порог, запускаем AddSecurityLastTradePriceMoreAction и ждем когда цена превысит этот порог.

Mikhail Sukhov
Mikhail Sukhov

Вот это уже хорошая событийная модель. Ждем изменения -> реагируем (ввиде заявок или новых ожидания). И т.д. до окончания торговой сессии.

Иванов Андрей
Иванов Андрей

А зачем вы пишете "base."? Я давно хочу понять причины использования "this.", может быть поможете своим ответом =)