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

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


Взял пример кода из хелпа (событийная модель): [code] When(_order.NewTrades()). Do(this.Protect(_order, t => new TakeProfitStrategy(t, 150.Points(Security)), // тейк на 150 пунктов t => new StopLossStrategy(t, 100.Points(Security)))). // стоп на 100 пунктов Activated(s => { When(s.Stopped()). Do(() => { /* сработало стоп условие */ }); }); [/code]

при наступлении события NewTrades выдает следующее: [quote]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==()[/quote]


Tags:


Thanks:


< 1 2 
vvt

Avatar
Date: 3/30/2011
Reply


в обоих случаях уже стоит [b]new Unit(50)[/b] и тейке и в лоссе, до этого я тоже додумался, так что дело не в этом вот код [code] if (_order != null) { AddLog(StrategyErrorStates.None ,"Перед предпоследним When"); When(_order.NewTrades()). Do(this.Protect(_order, t => new TakeProfitStrategy(t, new Unit(50)) , // тейк на 50 пунктов t => new StopLossStrategy(t, new Unit(50)) )). // стоп на 50 пунктов Activated(s => { AddLog(StrategyErrorStates.None ,"Перед последним When"); When(s.Stopped()). Do(() => { /* сработало стоп условие */ }); }); } [/code]

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

[img]http://content.screencast.com/users/vvt/folders/Jing/media/16624a65-0411-43a6-954c-f7ee1b7556dc/2011-03-30_2323.png[/img]

лог [url=http://rapidshare.com/files/455166237/mylog2.txt]здесь[/url]

Thanks:

Mikhail Sukhov

Avatar
Date: 3/31/2011
Reply


[quote=vvt;7192]лог [url=http://rapidshare.com/files/455166237/mylog2.txt]здесь[/url][/quote]

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

[quote]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[/quote]

Документация по методу [url=http://stocksharp.com/doc/help/html/M_Ecng_Trading_Algo_Strategies_ActionStrategy_When_1_a38de74d.htm]When[/url]: [quote][b]Зарегистрировать условие[/b]. Условие будет не активно до тех пор, пока к нему не будет добавлено действие через метод Do(Action).[/quote]

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

Thanks:

vvt

Avatar
Date: 3/31/2011
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/31/2011
Reply


[quote=vvt;7202][quote]Дальше объяснять где бага?[/quote] Да, просьба объяснить. [/quote]

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

Thanks:

vvt

Avatar
Date: 4/1/2011
Reply


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

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

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

Mikhail Sukhov

Avatar
Date: 4/2/2011
Reply


[quote=vvt;7237]Все, принцип понял, спасибо.

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

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

vvt

Avatar
Date: 4/14/2011
Reply


попробовал перейти на [3.1], изменил код в соответствии с новым синтаксисом (на [3.0.19] работало как нужно) [code] if (_isPosition != true) { AddLog(StrategyErrorStates.None, "Перед предпоследним When"); When(_order.NewTrades()). //() => Protect(_order, t => new TakeProfitStrategy(t, new Unit(150)) , t => Sls1 = new StopLossStrategy(t, new Unit(_stopPrice)) ).Activated( s => { AddLog(StrategyErrorStates.None, "Перед последним When"); When(s.Stopped()). Do(() => { // сработало стоп условие _isPosition = false; AddLog(StrategyErrorStates.None, string.Format("Сработало стоп-условие _stopPrice={0}", Sls1.ProtectiveDelta)); }); });

							}

[/code]

[img]http://content.screencast.com/users/vvt/folders/Jing/media/dedc1e11-8002-4fe2-a78a-e67360cd0d43/2011-04-14_1643.png[/img]

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

вот лог [quote]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 Стратегия остановлена. [/quote]

Thanks:

Mikhail Sukhov

Avatar
Date: 4/15/2011
Reply


[quote=vvt;7434] видно, что сработал TakeProfit, но вместо одной заявки выставляет кучу, похоже на баг [/quote]

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

Thanks:

vvt

Avatar
Date: 4/19/2011
Reply


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

Thanks:
< 1 2 

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

loading
clippy