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


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


vvt

Avatar
Взял пример кода из хелпа (событийная модель):
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<Strategy>(s =>
                         {
                             When(s.Stopped()).
                                 Do(() =>
                                      {
                                          /* сработало стоп условие */
                                      });
                         });


при наступлении события 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, Func`3 operation, Func`3 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 Go to
Security.MinStepPrice чему равен?

Security это RIM1
значит Security.MinStepPrice равен 5
Thanks:

Mikhail Sukhov

Avatar
Date: 3/28/2011
Reply


vvt Go to
Mikhail Sukhov Go to
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 Go to
Как видно после покупки сработал тейк на 50 пунков в 16:41:19, но вместо 1 заявки на 1 лот выставилась куча заявок по 1 лоту на все депо.
Что я делаю не так?


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

vvt

Avatar
Date: 3/30/2011
Reply


В код добавил { IsForts = true, IsParallel = true } и по тейку и по лоссу.

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



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

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


vvt Go to
Лог залил сюда


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

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


Mikhail Sukhov Go to
vvt Go to
Лог залил сюда


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


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

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


vvt Go to
Взял пример кода из хелпа (событийная модель):
Code
                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