← Voltar

Различия между созданием правил внутри стратегии и обработкой конкретных событий

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

Este tópico foi útil?

Compartilhar tópico

Comentários (20)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

esper
esper

frontman: Я не совсем понимаю в каких случаях лучше использовать создание правил а в каких обработку событий. Вот например событие появления новых сделок я могу обработать с помощью правила и с помощью события то же. В чем тогда разница?

  • Правила автоматизируют процесс подписки/отписки от событий, т.е. не надо думать когда и где отписаться от события.
  • Можно создавать цепочки обработчиков с различными дополнительными условиями.
  • Форма записи кода становится более декларативной.
  • Есть множество предопределенных правил.

frontman: И еще как быть с входными параметрами? Вот например при обработки события NewMyTrades в качестве входного параметра передаются новые сделки, в случае с правилом нет.

this
	.When(this.StrategyNewMyTrades())
	.Do<IEnumerable<MyTrades>>(trades =>
	{
	}
frontman
Supervisor
Supervisor

esper: Правила автоматизируют процесс подписки/отписки от событий, т.е. не надо думать когда и где отписаться от события. Можно подробнее насчет отписки от событий? Once() - полезная штука, но я не нашел стандартного способа просто отменить правило в любой момент. Мне пришлось присваивать всем правилам имена и написать функцию для удаления правил по имени.

Mikhail Sukhov
Mikhail Sukhov

Supervisor: Мне пришлось присваивать всем правилам имена и написать функцию для удаления правил по имени.

А почему не работать с объектами StrategyRule?

Supervisor
Supervisor

Mikhail Sukhov:

Supervisor: Мне пришлось присваивать всем правилам имена и написать функцию для удаления правил по имени.

А почему не работать с объектами StrategyRule? А как можно получить объект кроме как Strategy.Rules.Last()? Напрямую к конструктору нет доступа..

Mikhail Sukhov
Mikhail Sukhov

Supervisor: А как можно получить объект кроме как Strategy.Rules.Last()? Напрямую к конструктору нет доступа..

Вы посмотри сигнатуры методов When и Do, что они возвращают.

frontman
frontman Autor

Как то странно... А где посмотреть какие данные в результате срабатывания правила генерируются? Как вы узнали что при срабатывании правила на событие StrategyNewMyTrades() у нас на выходе будет IEnumerable<MyTrades>?

esper
esper

frontman: Как то странно... А где посмотреть какие данные в результате срабатывания правила генерируются? Как вы узнали что при срабатывании правила на событие StrategyNewMyTrades() у нас на выходе будет IEnumerable<MyTrades>? На форуме этот вопрос поднимался уже, еще в документации указано

pehas
pehas

esper:

frontman: Как то странно... А где посмотреть какие данные в результате срабатывания правила генерируются? Как вы узнали что при срабатывании правила на событие StrategyNewMyTrades() у нас на выходе будет IEnumerable<MyTrades>? На форуме этот вопрос поднимался уже, еще в документации указано

Я так понял, что .Do передаются параметры, генерируемые событием в .When. А как передать свой параметр?


     this
	.When(this.StrategyNewMyTrades())
	.Do(DoTrade);

     private void DoTrade(string s)
     {
        this.AddInfoLog(s);
     }

esper
esper

     this
	.When(this.StrategyNewMyTrades())
	.Do(trades => DoTrade("param1"));

     private void DoTrade(string s)
     {
        this.AddInfoLog(s);
     }

InsiderHSE
InsiderHSE

Михаил, а возможно ли приостановить работу правила, а потом возобновить?

Alexander
Alexander

InsiderHSE: Михаил, а возможно ли приостановить работу правила, а потом возобновить?

Suspend

InsiderHSE
InsiderHSE

Alexander Mukhanchikov:

InsiderHSE: Михаил, а возможно ли приостановить работу правила, а потом возобновить?

Suspend А где он находится? Если имеется в виду SuspendRules, то он приостанавливает все правила, а мне нужно приостановить работу одного конкретного правила, чтобы при этом остальные продолжали выполняться.

Alexander
Alexander

InsiderHSE:

Alexander Mukhanchikov:

InsiderHSE: Михаил, а возможно ли приостановить работу правила, а потом возобновить?

Suspend А где он находится? Если имеется в виду SuspendRules, то он приостанавливает все правила, а мне нужно приостановить работу одного конкретного правила, чтобы при этом остальные продолжали выполняться.

IsRulesSuspended = true для стратегии

InsiderHSE
InsiderHSE

Alexander Mukhanchikov:

InsiderHSE:

Alexander Mukhanchikov:

InsiderHSE: Михаил, а возможно ли приостановить работу правила, а потом возобновить?

Suspend А где он находится? Если имеется в виду SuspendRules, то он приостанавливает все правила, а мне нужно приостановить работу одного конкретного правила, чтобы при этом остальные продолжали выполняться.

IsRulesSuspended = true для стратегии

Например, у меня в стратегии 2 правила, Rule1 и Rule2. Как мне приостановить работу Rule1, но при этом чтобы Rule2 оставалось включенным? Свойство стратегии IsRulesSuspended не имеет публичного сеттера и, судя по мануалу, является индикатором, приостановлены ли все правила в стратегии через метод Strategy.SuspendRules().

Mikhail Sukhov
Mikhail Sukhov

InsiderHSE: Например, у меня в стратегии 2 правила, Rule1 и Rule2. Как мне приостановить работу Rule1, но при этом чтобы Rule2 оставалось включенным?

Логически через код. Флажок например.

frontman
frontman Autor

Mikhail Sukhov:

InsiderHSE: Например, у меня в стратегии 2 правила, Rule1 и Rule2. Как мне приостановить работу Rule1, но при этом чтобы Rule2 оставалось включенным?

Логически через код. Флажок например.

Ну вообще то канешь не оч хорошо это... Глобальные параметры... Таким образом если например у меня 5 стратегий и мне надо по одной каждую приостанавливать, что создавать 5 флажков?!)) Я о том что может быть стоит как то расширить класс правил. Там же есть метод Periodical, ну почему бы не сделать что то подобное для приостановки (временной) правила...

Mikhail Sukhov
Mikhail Sukhov

frontman: Я о том что может быть стоит как то расширить класс правил. Там же есть метод Periodical, ну почему бы не сделать что то подобное для приостановки (временной) правила...

Логично. В след версии на КодеПлексе появится.

Supervisor
Supervisor

frontman: Я о том что может быть стоит как то расширить класс правил. Там же есть метод Periodical, ну почему бы не сделать что то подобное для приостановки (временной) правила... Точно, именно этого не хватает :) Еще от себя добавлю, было бы неплохо сделать метод для ре-активации .Once правила, чтобы не создавать его каждый раз заново.

Mikhail Sukhov
Mikhail Sukhov

Supervisor: Еще от себя добавлю, было бы неплохо сделать метод для ре-активации .Once правила, чтобы не создавать его каждый раз заново.

Такого точно не будет, потому что правило не просто отрабатывает, оно еще и диспозиться.

Положил на КП версию Алго, где появился метод Or. Можно комбинировать по несколько условий для одного действия.

frontman
frontman Autor

👍