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 
vvt

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


в обоих случаях уже стоит new Unit(50) и тейке и в лоссе, до этого я тоже додумался, так что дело не в этом вот код

				if (_order != null)
				{
					AddLog(StrategyErrorStates.None ,"Перед предпоследним When");
					When(_order.NewTrades()).
					Do(this.Protect(_order, 
					t => new TakeProfitStrategy(t, new Unit(50)) { IsForts = true, IsParallel = true }, // тейк на 50 пунктов
					t => new StopLossStrategy(t, new Unit(50)) { IsForts = true, IsParallel = true })). // стоп на 50 пунктов
					Activated<Strategy>(s =>
					                    	{
												AddLog(StrategyErrorStates.None ,"Перед последним When");
					                    		When(s.Stopped()).
					                    			Do(() =>
					                    			   	{
					                    			   		/* сработало стоп условие */
					                    			   	});
					                    	});
				}

еще раз запустил с логированием

лог здесь

Спасибо:

Mikhail Sukhov

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


vvt: лог здесь

Цитата из вашего лога:

CPS 23:07:28.9470510 Перед предпоследним When CPS 23:07:29.9601089 Перед предпоследним When CPS 23:07:30.9611662 Перед предпоследним When CPS 23:07:31.9612234 Перед предпоследним When CPS 23:07:32.9612806 Перед предпоследним When CPS 23:07:33.9613378 Перед предпоследним When CPS 23:07:34.9613950 Перед предпоследним When CPS 23:07:35.9644523 Перед предпоследним When CPS 23:07:36.9645095 Перед предпоследним When CPS 23:07:37.9645667 Перед предпоследним When CPS 23:07:38.9646239 Перед предпоследним When CPS 23:07:39.9646811 Перед предпоследним When CPS 23:07:40.9647383 Перед предпоследним When CPS 23:07:41.9647955 Перед предпоследним When CPS 23:07:42.9648527 Перед предпоследним When CPS 23:07:43.9649099 Перед предпоследним When CPS 23:07:44.9659672 Перед предпоследним When CPS 23:07:45.9660244 Перед предпоследним When CPS 23:07:46.9660816 Перед предпоследним When CPS 23:07:47.9661388 Перед предпоследним When CPS 23:07:48.9661960 Перед предпоследним When CPS 23:07:49.9662532 Перед предпоследним When CPS 23:07:50.9663104 Перед предпоследним When CPS 23:07:51.9663676 Перед предпоследним When CPS 23:07:52.9674248 Перед предпоследним When CPS 23:07:53.9674820 Перед предпоследним When CPS 23:07:54.9685393 Перед предпоследним When CPS 23:07:55.9695966 Перед предпоследним When CPS 23:07:56.9836546 Перед предпоследним When CPS 23:07:57.9857119 Перед предпоследним When CPS 23:07:58.9877692 Перед предпоследним When CPS 23:07:59.9888264 Перед предпоследним When CPS 23:08:00.9888836 Перед предпоследним When CPS 23:08:02.0049418 Перед предпоследним When CPS 23:08:03.0179997 Перед предпоследним When CPS 23:08:04.0250573 Перед предпоследним When CPS 23:08:05.0271146 Перед предпоследним When CPS 23:08:06.0271718 Перед предпоследним When CPS 23:08:07.0272290 Перед предпоследним When CPS 23:08:08.0272862 Перед предпоследним When CPS 23:08:09.0283435 Перед предпоследним When

Документация по методу When:

Зарегистрировать условие. Условие будет не активно до тех пор, пока к нему не будет добавлено действие через метод Do(Action).

Дальше объяснять где бага?

Спасибо:

vvt

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


Дальше объяснять где бага? Да, просьба объяснить.

Спасибо:

Mikhail Sukhov

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


Дальше объяснять где бага? Да, просьба объяснить.

Вы регистрируете условие несколько десятков раз. Поэтому когда наступает событие о новых сделках, то и регистрация срабатывает ровно столько раз (и ровно столько будет сделок), сколько вы зарегистрировали условие.

Спасибо:

vvt

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


Все, принцип понял, спасибо.

Еще есть пара вопросов:

  1. метод MakePeriodical() выполняется с частотой Strategy.Interval ?
  2. можно ли в коде приведенном выше динамически изменять размер стопа в TakeProfitStrategy и StopLossStrategy во время работы стратегии? Если да, то как (желательно пример кода).
Спасибо:

Mikhail Sukhov

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


vvt: Все, принцип понял, спасибо.

Еще есть пара вопросов:

  1. метод MakePeriodical() выполняется с частотой Strategy.Interval ?
  2. можно ли в коде приведенном выше динамически изменять размер стопа в TakeProfitStrategy и StopLossStrategy во время работы стратегии? Если да, то как (желательно пример кода).
  1. Это минимум.
  2. Через изменение свойства ProtectiveDelta.
Спасибо:

vvt

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


попробовал перейти на [3.1], изменил код в соответствии с новым синтаксисом (на [3.0.19] работало как нужно)

							if (_isPosition != true)
							{
									AddLog(StrategyErrorStates.None, "Перед предпоследним When");
									When(_order.NewTrades()). //() =>
										Protect(_order,
													 t =>
													 new TakeProfitStrategy(t, new Unit(150)) { IsParallel = true, IsMarket = true },
													 t =>
													 Sls1 = new StopLossStrategy(t, new Unit(_stopPrice)) { IsParallel = true, IsMarket = true, IsTrailing = true }).Activated<Strategy>(
															s =>
															{
																AddLog(StrategyErrorStates.None, "Перед последним When");
																When(s.Stopped()).
																	Do(() =>
																		{
																			// сработало стоп условие
																			_isPosition = false;
																			AddLog(StrategyErrorStates.None, string.Format("Сработало стоп-условие _stopPrice={0}", Sls1.ProtectiveDelta));
																		});
															});

								}

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

вот лог

CPS 16:32:40.9762649 Стратегия запущена. CPS 16:35:03.7004282 Правило активировано. CPS 16:35:03.7074286 Правило удалено. CPS 16:40:03.4545732 Правило активировано. CPS 16:40:03.4605735 Перед предпоследним When CPS 16:40:03.5345778 Правило удалено. CPS 16:40:04.5366351 Правило активировано. CPS 16:40:04.5416354 Стратегия запущена. CPS 16:40:04.5426354 Перед последним When CPS 16:40:04.5426354 Правило удалено. CPS 16:40:05.5436927 Правило активировано. CPS 16:40:05.5546933 Стратегия запущена. CPS 16:40:05.5546933 Стратегия запущена. CPS 16:40:05.5546933 Стратегия запущена. CPS 16:40:05.5546933 Стратегия запущена. CPS 16:40:05.5546933 Правило удалено. CPS 16:40:58.8447413 Регистрация защитной заявки с ценой 196185 и объемом 1. CPS 16:40:58.8447413 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:40:58.8457414 Заявка 58461521 на Sell отправлена с ценой 196185 объемом 1. CPS 16:40:59.8467987 Котируемая заявка 58461521 исполнилась. CPS 16:40:59.8467987 Осталось 2 контрактов. CPS 16:41:00.8478559 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:41:00.8478559 Заявка 58461522 на Sell отправлена с ценой 196185 объемом 1. CPS 16:41:01.8909156 Котируемая заявка 58461522 исполнилась. CPS 16:41:01.8909156 Осталось 3 контрактов. CPS 16:41:02.8929729 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:41:02.8929729 Заявка 58461523 на Sell отправлена с ценой 196185 объемом 1. CPS 16:41:03.9060308 Котируемая заявка 58461523 исполнилась. CPS 16:41:03.9060308 Осталось 4 контрактов. CPS 16:41:04.9080881 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:41:04.9080881 Заявка 58461524 на Sell отправлена с ценой 196185 объемом 1. CPS 16:41:05.9191460 Котируемая заявка 58461524 исполнилась. CPS 16:41:05.9191460 Осталось 5 контрактов. CPS 16:41:06.9202032 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:41:06.9202032 Заявка 58461525 на Sell отправлена с ценой 196185 объемом 1. CPS 16:41:16.9537771 Котируемая заявка 58461525 исполнилась. CPS 16:41:16.9537771 Осталось 6 контрактов. CPS 16:41:17.9548344 Котируемая заявка 0 снята. CPS 16:41:17.9548344 Осталось 6 контрактов. CPS 16:41:18.9588918 Котируемая заявка 0 снята. CPS 16:41:18.9588918 Осталось 6 контрактов. CPS 16:41:19.9619492 Котируемая заявка 0 снята. CPS 16:41:19.9619492 Осталось 6 контрактов. CPS 16:41:20.9650065 Котируемая заявка 0 снята. CPS 16:41:20.9650065 Осталось 6 контрактов. CPS 16:41:21.9710641 Котируемая заявка 0 снята. CPS 16:41:21.9710641 Осталось 6 контрактов. CPS 16:41:22.9721213 Регистрация новой заявки на Sell с ценой 196185 и объемом 1. CPS 16:41:22.9721213 Заявка 58461526 на Sell отправлена с ценой 196185 объемом 1. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.6174442 Стратегия останавливается. CPS 16:41:28.9854653 Котирование отменяет заявку 58461526. CPS 16:41:28.9864653 Стратегия остановлена. CPS 16:41:28.9864653 Котирование закончилось. CPS 16:41:28.9864653 Стратегия остановлена. CPS 16:41:28.9934657 Стратегия остановлена. CPS 16:41:29.0404684 Стратегия остановлена. CPS 16:41:29.0414685 Стратегия остановлена. CPS 16:41:29.0424685 Стратегия остановлена.

Спасибо:

Mikhail Sukhov

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


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

Да, баг, причем судя по логу не один. Буду разбираться. Спасибо за фидбек.

Спасибо:

vvt

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


в [3.1.2] баг исправлен

Спасибо:
< 1 2 

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

loading
clippy