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


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


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

Теги:


Спасибо:




20 Ответов
esper

Фотография
Программист
Дата: 21.09.2011
Ответить


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

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

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

Код
this
	.When(this.StrategyNewMyTrades())
	.Do<IEnumerable<MyTrades>>(trades =>
	{
	}

Спасибо: frontman

frontman

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


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

esper

Фотография
Программист
Дата: 21.09.2011
Ответить


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

На форуме этот вопрос поднимался уже, еще в документации указано
Спасибо: frontman

Supervisor

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


esper Перейти

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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.10.2011
Ответить


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


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

Supervisor

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


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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.10.2011
Ответить


Supervisor Перейти

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


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

InsiderHSE

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


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

Alexander

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


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


Suspend
Спасибо:

pehas

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


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

На форуме этот вопрос поднимался уже, еще в документации указано


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

Код

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

     private void DoTrade(string s)
     {
        this.AddInfoLog(s);
     }
Спасибо:

esper

Фотография
Программист
Дата: 02.11.2011
Ответить


Код

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

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

Спасибо: pehas

InsiderHSE

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


Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Михаил, а возможно ли приостановить работу правила, а потом возобновить?


Suspend

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

Alexander

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


InsiderHSE Перейти
Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Михаил, а возможно ли приостановить работу правила, а потом возобновить?


Suspend

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


IsRulesSuspended = true для стратегии
Спасибо:

InsiderHSE

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


Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Михаил, а возможно ли приостановить работу правила, а потом возобновить?


Suspend

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


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 02.11.2011
Ответить


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


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

frontman

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


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


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.11.2011
Ответить


frontman Перейти

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


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

Supervisor

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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 09.11.2011
Ответить


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


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

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

frontman

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


ThumpUp
Автор топика
Спасибо:


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

loading
clippy