Protect в событийной модели
Atom
28.03.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==()


Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


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

Спасибо:

vvt

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


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

Спасибо:

Mikhail Sukhov

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


vvt:

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

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

Спасибо: vvt

vvt

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


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

Спасибо:

vvt

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


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

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

Спасибо:

Mikhail Sukhov

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


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

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

Спасибо:

vvt

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


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

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

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

Спасибо:

Mikhail Sukhov

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


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

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

Спасибо:

Mikhail Sukhov

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


Mikhail Sukhov:

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

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

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

Спасибо:

Mikhail Sukhov

Фотография
Дата: 30.03.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 пунктов
				

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

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

loading
clippy