.Do((e) => {})
Atom Ответить
16.09.2011


raf

Фотография
Имеется следующая проблема

Допустим имеется класс-правило MyStrategyRuleClass унаследованное от StrategyRule
если использовать this.When(this.MayStrategyRule).Do<AnyType>((e) => {})
и в классе MyStrategyRuleClass при вызове base.Activate(NOTAnyType) передать по ошибке другой тип,
то никаких ошибок не последут,
выполнится override метод MyStrategyRuleClass.DisposeManaged() и правило перестанет работать

Думаю стоит должным образом обрабатывать подобную ошибку в реализации base.Activate() и Do(), чтобы генерировалось исключение

Теги:


Спасибо:




11 Ответов
Mikhail Sukhov

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


Strategy.OnError + ITrader.ProcessDataError?
Спасибо:

raf

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


Mikhail Sukhov Перейти
Strategy.OnError + ITrader.ProcessDataError?

ИМХО удобней использовать throw
Автор топика
Спасибо:

Alexander

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


raf Перейти
Mikhail Sukhov Перейти
Strategy.OnError + ITrader.ProcessDataError?

ИМХО удобней использовать throw


Так вы саме обрабатываете событие OnError и ProcessDataError и реагируете как хотите.
Останавливать работу приложения из-за ошибки внутри стратегии - не лучшая затея. Даже без имхо :)
Спасибо:

raf

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


Alexander Перейти
raf Перейти
Mikhail Sukhov Перейти
Strategy.OnError + ITrader.ProcessDataError?

ИМХО удобней использовать throw


Так вы саме обрабатываете событие OnError и ProcessDataError и реагируете как хотите.
Останавливать работу приложения из-за ошибки внутри стратегии - не лучшая затея. Даже без имхо :)


Если в стратегии возникают несовпадения типов, то это стратегия написана с критической ошибкой и программа не должна исполняться дальше. Несовпадение типов в C# в случае, когда нет возможности оповестить об этом на этапе компиляцмм, всегда вызывает исключение на этапе исполнения. Это не логическая ошибка, чтобы ее ловить Strategy.OnError + ITrader.ProcessDataError. И я слабо представляю себе ситуации, когда несовпадение типов заложено в логику исполнения программы намеренно... - если уж это делается намеренно, то и не забывается про try{} catch().
Автор топика
Спасибо:

Alexander

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


raf Перейти
Alexander Перейти
raf Перейти
Mikhail Sukhov Перейти
Strategy.OnError + ITrader.ProcessDataError?

ИМХО удобней использовать throw


Так вы саме обрабатываете событие OnError и ProcessDataError и реагируете как хотите.
Останавливать работу приложения из-за ошибки внутри стратегии - не лучшая затея. Даже без имхо :)


Если в стратегии возникают несовпадения типов, то это стратегия написана с критической ошибкой и программа не должна исполняться дальше. Несовпадение типов в C# в случае, когда нет возможности оповестить об этом на этапе компиляцмм, всегда вызывает исключение на этапе исполнения. Это не логическая ошибка, чтобы ее ловить Strategy.OnError + ITrader.ProcessDataError. И я слабо представляю себе ситуации, когда несовпадение типов заложено в логику исполнения программы намеренно... - если уж это делается намеренно, то и не забывается про try{} catch().


Вы не поняли.
Исключение генерируется и оно перехватывается OnError и ProcessDataError. Обрабатывайте его там дальше как вам угодно. Хотите - делайте throw, хотите - перезагружайте стратегии. Всё зависит от вас.
Спасибо:

raf

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


Alexander Перейти

Вы не поняли.
Исключение генерируется и оно перехватывается OnError и ProcessDataError. Обрабатывайте его там дальше как вам угодно. Хотите - делайте throw, хотите - перезагружайте стратегии. Всё зависит от вас.

Дело не в том. Я просто не очень согласен с концепцией перехвата для дальнейшей пользовательской обработки абсолютно всех ошибок. Ну да бог с ним)
Возможно в этом есть свои плюсы.

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

Mikhail Sukhov

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


raf Перейти
Дело не в том. Я просто не очень согласен с концепцией перехвата для дальнейшей пользовательской обработки абсолютно всех ошибок.


Распишите по подробнее вашу концепцию.
Спасибо:

raf

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


Mikhail Sukhov Перейти
raf Перейти
Дело не в том. Я просто не очень согласен с концепцией перехвата для дальнейшей пользовательской обработки абсолютно всех ошибок.


Распишите по подробнее вашу концепцию.


Мне кажется обработку ошибок обращения к данным надо отдать в руки разработчика. Тем более обрабатывать такие смешные явные ошибки как int i = "строка" (как в данном случае) вообще нет смысла. их надо ловить на этапе выявления и однозначно останавливать ход выполнения программы.
Автор топика
Спасибо:

Mikhail Sukhov

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


raf Перейти
Мне кажется обработку ошибок обращения к данным надо отдать в руки разработчика.


Оборачивайте код в try catch. Или еще как-то. S# тут при чем?
Спасибо:

raf

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


по .ProcessDataError пришла ошибка (до установки версии S# 4.00 ее не было)

Цитата:
System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в StockSharp.Smart.SmartTrader.#=q3tLr$QxrenSG5YjlASuEI3YJKIPBQt01k9cpFHgYyJQ=.#=q$5T2LCDBBwM47J333ZpQN36ivGAIvPSDWMTtg61c0To=(Security #=q9Td6zhg46FvqcJdw5D1efg==)
в StockSharp.Algo.BaseTrader.ProcessSecurityAction(String nativeSecurityId, Action`1 action, Boolean ignoreIfNotExist)
в StockSharp.Smart.SmartTrader.#=qSh1vnskI1TRN0VXH6_nhVXXVGijngdMW2AF_OFWjCXE=(String #=qyB8WsQekpkIh6dSNGced6A==, Trade #=qEBLG0UGbL90b4xwxzy0R6A==, Decimal #=q0E_NA6nZmhvkhKH9Ci8zww==, Decimal #=qrYwttbT28gJSOUZtT_4JZA==, Decimal #=qEfyBi1RA4cGneDuQdY1hwQ==, Decimal #=qZGMC$OXg6K$aauN5DNv2dA==, Int32 #=qT0uNmuX0Fqr6QaLol1s56w==, Quote #=qTapZLK3QErZ7k09eitKrgA==, Quote #=q2pQGnK9SatV4DyqfKpw1aA==, Decimal #=q$HfbK2GI21tagi2bu2fLwA==, Pair`2 #=qpLMOA6PGGidWhGuu6M6c2w==, Pair`2 #=qIGoV0D89lP0Mcox407wPfA==, Pair`2 #=q7DyFstvU7yzu9l4DEYRD9g==, Int32 #=qj7GnYHiH938qOmf2rsb_$w==)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14](Action`14 handler, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
в StockSharp.Smart.SmartComWrapper.#=q25OG9KgOP3T$2fbADDueKDH$kJg0yiuVvMXisxs4WHg=.#=qssQr6uP7yJ480vRmReP11dv9g6dlSBmwuTLvi5k1_5I=()
в StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)



где ее искать, не подскажете?
Автор топика
Спасибо:

Mikhail Sukhov

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


raf Перейти
где ее искать, не подскажете?


Так, это бага у нас. Будем заливать фикс на КодеПлекс.
Спасибо:


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

loading
clippy