Взял пример кода из хелпа (событийная модель):
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, 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==()
Комментарии (19)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Security.MinStepPrice чему равен?
А в программе? Вы делали, как показано здесь?
Спасибо, включил экспорт дополнительных колонок.
Код в первом сообщении работает, но при срабатывании он гернерирует огромное количество заявок вместо одной по тейку или по лоссу, с одинаковым временем, хотя защищается покупка всего 1-го лота.
Как видно после покупки сработал тейк на 50 пунков в 16:41:19, но вместо 1 заявки на 1 лот выставилась куча заявок по 1 лоту на все депо. Что я делаю не так?
Без логов не понять.
В код добавил и по тейку и по лоссу.
Запустил сейчас, результат
Лог залил сюда
Выглядит как баг. Проверю.
Перед When первой строчкой выведите что-нибудь в лог.
в обоих случаях уже стоит new Unit(50) и тейке и в лоссе, до этого я тоже додумался, так что дело не в этом вот код
еще раз запустил с логированием
лог здесь
Цитата из вашего лога:
Документация по методу When:
Дальше объяснять где бага?
Вы регистрируете условие несколько десятков раз. Поэтому когда наступает событие о новых сделках, то и регистрация срабатывает ровно столько раз (и ровно столько будет сделок), сколько вы зарегистрировали условие.
Все, принцип понял, спасибо.
Еще есть пара вопросов:
попробовал перейти на [3.1], изменил код в соответствии с новым синтаксисом (на [3.0.19] работало как нужно)
видно, что сработал TakeProfit, но вместо одной заявки выставляет кучу, похоже на баг
вот лог
Да, баг, причем судя по логу не один. Буду разбираться. Спасибо за фидбек.
в [3.1.2] баг исправлен