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, 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==()

Теги:


Спасибо:


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
Ответить


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

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



Лог залил сюда
Спасибо:

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