Protect в событийной модели

Protect в событийной модели
Atom
3/28/2011
vvt


Взял пример кода из хелпа (событийная модель):

				When(_order.NewTrades()).
					Do(this.Protect(_order,
					                t => new TakeProfitStrategy(t, 150.Points(Security)), // тейк на 150 пунктов
					                t => new StopLossStrategy(t, 100.Points(Security)))). // стоп на 100 пунктов
					Activated<Strategy>(s =>
					                    	{
					                    		When(s.Stopped()).
					                    			Do(() =>
					                    			   	{
					                    			   		/* сработало стоп условие */
					                    			   	});
					                    	});

при наступлении события NewTrades выдает следующее:

System.InvalidOperationException: Значение стоимости шага цены не инициализировано. в Ecng.Trading.BusinessEntities.UnitHelper.GetStepPrice(Unit unit) в Ecng.Trading.BusinessEntities.Unit.op_Explicit(Unit unit) в Ecng.Trading.BusinessEntities.Unit.CreateResult(Unit u1, Unit u2, Func3 operation, Func3 percentOperation) в Ecng.Trading.BusinessEntities.Unit.op_Subtraction(Unit u1, Unit u2) в Ecng.Trading.Algo.Strategies.StopLossStrategy.GetNewPrice() в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategies.Strategy. #=qnMN_PMdUfHysEK$_tfQ8grn_QTjzOIMGPiv$tYCH2Bw=.#=q3rD2zIrUx4ViUbhRH66B2w==()


Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 3/28/2011
Reply


Security.MinStepPrice чему равен?

Thanks:

vvt

Avatar
Date: 3/28/2011
Reply


Mikhail Sukhov: Security.MinStepPrice чему равен? Security это RIM1 значит Security.MinStepPrice равен 5

Thanks:

Mikhail Sukhov

Avatar
Date: 3/28/2011
Reply


vvt:

Mikhail Sukhov: Security.MinStepPrice чему равен? Security это RIM1 значит Security.MinStepPrice равен 5

А в программе? Вы делали, как показано здесь?

Thanks: vvt

vvt

Avatar
Date: 3/28/2011
Reply


Спасибо, включил экспорт дополнительных колонок.

Thanks:

vvt

Avatar
Date: 3/29/2011
Reply


Код в первом сообщении работает, но при срабатывании он гернерирует огромное количество заявок вместо одной по тейку или по лоссу, с одинаковым временем, хотя защищается покупка всего 1-го лота.

Как видно после покупки сработал тейк на 50 пунков в 16:41:19, но вместо 1 заявки на 1 лот выставилась куча заявок по 1 лоту на все депо. Что я делаю не так?

Thanks:

Mikhail Sukhov

Avatar
Date: 3/29/2011
Reply


vvt: Как видно после покупки сработал тейк на 50 пунков в 16:41:19, но вместо 1 заявки на 1 лот выставилась куча заявок по 1 лоту на все депо. Что я делаю не так?

Без логов не понять.

Thanks:

vvt

Avatar
Date: 3/30/2011
Reply


В код добавил и по тейку и по лоссу.

Запустил сейчас, результат

Лог залил сюда

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


vvt: Лог залил сюда

Выглядит как баг. Проверю.

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


Mikhail Sukhov:

vvt: Лог залил сюда

Выглядит как баг. Проверю.

Перед When первой строчкой выведите что-нибудь в лог.

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


vvt: Взял пример кода из хелпа (событийная модель):

			When(_order.NewTrades()).
				Do(this.Protect(_order,
				                t => new TakeProfitStrategy(t, 150.Points(Security)), // тейк на 150 пунктов
				                t => new StopLossStrategy(t, 100.Points(Security)))). // стоп на 100 пунктов
				

Багу в примере заметил - тут нужно использовать просто new Unit(150) и new Unit(100). Потому что защиту мы выставляем в абсолютном значении. По фьючам абсолютное значение и есть пункты. А вот если мы хотим перевести пункты в реальную стоимость (в доллары), то нужно создавать Unit в пунктах, и переводить их в double (через cast).
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy