Странное дело... В 4.0.23 версии отлично срабатывали правила. Поставил последнюю версию с dev-ветки, изменил лишь с this.When(this.Security.BestAskPriceLess()) на this.Security.WhenBestAskPriceLess(). Стало примерно так:
StrategyRule<Security> _opRule;
Unit _opPriceUnit = new Unit() { Type = UnitTypes.Limit };
......
_opPriceUnit.Value = this.Security.ShrinkPrice(_indicator.LastValue);
_opRule = this.Security.WhenBestAskPriceLess(_opPriceUnit).Do(() =>
{
MQStrategy = new MarketQuotingStrategy(OrderDirections.Buy, this.Volume)
{ PriceType = MarketPriceTypes.Following };
this.ChildStrategies.Add(MQStrategy);
}).Once().Apply(this);
Теперь правила перестали срабатывать на тех же периодах: Цена срабатывания правила равна Unit = 100,98, Low опустился ниже, но покупки не произошло. Бумага Сбер обычка, сред маленький
MarketTime:2012.03.02 12:40:00, позиция = 0, Unit = 100,98, H = 101,45, L = 101,20 MarketTime:2012.03.02 12:50:00, позиция = 0, Unit = 100,98, H = 101,27, L = 100,83 MarketTime:2012.03.02 13:00:01, позиция = 0, Unit = 100,98, H = 100,97, L = 100,76 MarketTime:2012.03.02 13:10:03, позиция = 0, Unit = 100,98, H = 100,98, L = 100,79 MarketTime:2012.03.02 13:20:00, позиция = 0, Unit = 100,98, H = 101,03, L = 100,91 MarketTime:2012.03.02 13:30:04, позиция = 0, Unit = 100,98, H = 101,02, L = 100,93
Comentarios (26)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Никто не отвечает - стало быть, и нет проблемы?
Подтверждаю баг. Также не работают правила WhenLastTradePriceLessи WhenLastTradePriceMore.
В итоге
Проверил на свежей версии с codeplex, запустил SampleSma, на квике. Всё срабатывает:
Это фьюч ртс.
Нужна дополнительная информация - срабатывает ли событие Trader.SecuritiesChanged, изменяется ли по данному событию Security.LastTrade и Security.LastChangeTime? В конце концов - какой шлюз используется?
Попробовал поставить 10, как на скрине, фьюч РИ - правило сработало. Поставил - 100 - сработало. Поставил - 1000 - не сработало.
В чем прикол я так и не понял.🤨
Заменил бумагу на Сбер. Получилось так:
Правило не срабатывает Trader.SecuritiesChanged тоже не срабатывает: ни в теле стратегии, ни в MainWindow
В EmulationTrader ветки 4.1 есть баг, SecurityChanged не вызывается. Будет поправлено.
Еще не пофиксили, случайно)))?
Пофиксили, но пока на codeplex не положили.
Извиняюсь спросить, на codeplex еще не выложили?
Положили, в транке лежит 4.1.2
Взял dll с кодеплекс stocksharp-17807.zip из trunk, но ошибка осталась используется EmulationTrader
Какая именно ошибка? EmulationTrader.SecurityChanged вызывается?
Тогда приведите лог - с изменением Security.Trader.SecuritiesChanged - с выводом LastTrade и с созданием правила.
лог:
подписываюсь на правило так:
ActivatePrice - это что? Попробуйте передавать new Unit(153215, UnitTypes.Limit)
Это только при EmulationTrader?
Действительно в коде в одном месте для ActivatePrice присваивалось значение decimal, из-за этого и не срабатывало правило. Поправил на Unit и все заработало
Приложите минимальный проект, на котором воспроизводится. Не получается воспроизвести.
Взял папку trunk\References из stocksharp-17830 В указанном выше примере все еще не срабатывает правило
Взял папку trunk\References из stocksharp-17830 В указанном выше примере все еще не срабатывает правило
Проверил с WhenLastTradePriceMore - всё работает.
Вы говорите о правиле WhenBestAskPriceLess - здесь надо смотреть не LastTrade, а BestAsk
Смотрите на событие Security.Trader.SecuritiesChanged и за изменением security.BestAsk. Скиньте лог изменений и правила с конкретным числом как вы создаёте.
Так будет починка правила или нет?
Проблемы с правилами значит нет. Как Михаил (pyhta4og) вернётся с отдыха, посмотрит на ту проблему.