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

8 views
Skip to first unread message

dart

unread,
Sep 16, 2010, 4:02:19 AM9/16/10
to Stock#
А 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);
}

Mikhail Sukhov

unread,
Sep 16, 2010, 4:43:06 AM9/16/10
to Stock#
>Далее в OnProcess с помощью AddSecurityLastTradePriceMoreAction

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

>Вообще все эти событийные методы Add.... не забирают управление стратегией как котирование?

Даже котирование не забирает. http://stocksharp.com/doc/help/html/8ea639f6-ce74-4a00-9f13-db59c8c2396f.htm
(там где написано про параллельную работу)

>И ещё при компилировании VS мне выдаёт предупреждение, не ошибку, что нельзя проверить код при вызове через ключевое слово "base"

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

Mikhail Sukhov

unread,
Sep 16, 2010, 4:44:09 AM9/16/10
to Stock#
И еще. В котирование можно пускать заявку без предваритального
вычисления цены. Котирование как раз само вычисляет рыночцую цену.

dart

unread,
Sep 16, 2010, 5:59:51 AM9/16/10
to Stock#
> Если Вы так будете делать, то при каждом OnProcess у Вас будет
> добавляться в очередь событие ожидания. Не очень хорошо для
> производительности. Добавляйте их, скажем, в конструкторе или
> OnRunning. И почему у Вас пример с событием ожидания понижения порога
> цены?
OnRunning не подходит, так как он вызывается только в начале работы
стратегии, мне надо чтобы это (пересмотр ценового порога) делалось
циклично на протяжении всей работы стратегии. Конструктор имеется
ввиду MainWindow?
У меня есть примеры и с повышением порога и с понижением. Ни тот ни
другой не работает. Стратегия просто проскакивает через него (метод
Add...) и выполняет стоящий после него оператор.

Mikhail Sukhov

unread,
Sep 16, 2010, 6:13:59 AM9/16/10
to Stock#
Конечно проскакивает. Событийная модель на то и событийная, что она
работает в другом потоке. Но этот поток у Вас не функционирует, потому
что Вы переопределили OnProcess.

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

dart

unread,
Sep 16, 2010, 7:22:53 AM9/16/10
to Stock#
Андерстэнд.
Тогда получится вложенное ожидание. Сначала с помощью AddAction ждём
когда изменится порог, запускаем AddSecurityLastTradePriceMoreAction и
ждем когда цена превысит этот порог.

Mikhail Sukhov

unread,
Sep 16, 2010, 7:26:14 AM9/16/10
to Stock#
Вот это уже хорошая событийная модель. Ждем изменения -> реагируем
(ввиде заявок или новых ожидания). И т.д. до окончания торговой
сессии.

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

unread,
Sep 16, 2010, 5:21:08 PM9/16/10
to Stock#
А зачем вы пишете "base."? Я давно хочу понять причины использования
"this.", может быть поможете своим ответом =)

On 16 сен, 12:02, dart <ivanov_i...@mail.ru> wrote:

Reply all
Reply to author
Forward
0 new messages