В пятницу стратегия в голову пришла, протестировать можно только на реале. Прошерстил студию, как понял в ней тестирование есть, но на реальных рыночных данных не возможно тестировать стратегию? Если я не прав, то напишете инструкцию маленькую. Так вот, взял SampleSMA, поменял пару строк, для начала на проверенной стратегии, RealTimeEmulationTrader решил посмотреть.
private RealTimeEmulationTrader<QuikTrader> _trader;
_trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text));
Да еще вывел ордера в таблицу, прочему то в SampleSMA таблица ордеров есть, а выводить в нее ни чего не выводиться.
_strategy.OrderRegistered += order => this.GuiAsync(() =>
{
_orders.Orders.Add(order);
});
По идее должно работать, но нет. Ордера выставляются, отменяются, переставляются, но сделок не происходит хотя должны происходить. Заявка стоит, ее пересекает поток сделок, она просто передвигается котированием. Очень редко, так и не смог выяснить, при каких обстоятельствах все таки происходит сделка. Поехали дальше. 😀 На выходных, уже на демо квике. Удалил стратегию, написал простейшую, при появлении свечи выставлять ордер на покупку или продажу, без котирования.
order = this.CreateOrder(OrderDirections.Buy, (decimal)Security.GetCurrentPrice(OrderDirections.Buy), 1);
if (order != null)
RegisterOrder(order);
Здесь, ситуация по лучше. Заявки как правило исполняются, редко когда не исполняются. Несколько раз через не исполненные ордера прогонишь поток сделок они сработают. Пол депозита на демо слил, гоняя сделки. Может это из-за демо, но я связи не вижу. Еще одну проблему заметил,
order = this.BuyAtMarket(1);
RegisterOrder(order);
order = this.SellAtMarket(1);
RegisterOrder(order);
по рынку продает, а покупать не покупает. Здесь даже картинку приложу. Цена при покупке 0. И еще, опять разница во времени, на рисунке видно время сделок и время графика 5 часов. В тестировании на истории я в трейдере прописывал
MarketEmulator = new MarketEmulator(new QuikTrader())
{
EmulatorTimeZone = TimeZoneInfo.CreateCustomTimeZone("Moscow", TimeSpan.FromHours(4), "Moscow", "Moscow"),
},
в RealTimeEmulationTrader такой фокус не проходит. Пробовал по разному, ордера выставляет сделок нет. На форуме где то, что то писали, разобраться сил уже не хватило. В итоге свою стратегию даже не писал. Кто пользуется RealTimeEmulationTrader на сколько много проблем вы встречали, и были ли выше перечисленные?
Comments (8)
Login or Create account, Log in or register to leave a comment
MarketEmulator = new MarketEmulator(new QuikTrader()) { EmulatorTimeZone = TimeZoneInfo.CreateCustomTimeZone("Moscow", TimeSpan.FromHours(4), "Moscow", "Moscow"), },
Но события появлении новых сделок, если подписываться от стратегии, при котировании не приходят. Хотя при исполнении лимитных сделок или по рынку события приходят. Так и должно быть? при выводе сделок из трэйдера, все нормально:
MarketEmulator = new MarketEmulator(new QuikTrader()) { EmulatorTimeZone = TimeZoneInfo.CreateCustomTimeZone("Moscow", TimeSpan.FromHours(4), "Moscow", "Moscow"), },
Думаю вы хотели написать так
Спасибо за направление, помогло. Может стоит это как то на автомате сделать? У многих эта ошибка встречается.
А про рыночные заявки баг?
Вопрос по RealTimeEmulationTrader Раньше в старых версиях S#.API конструктор был таким:
Т.е. трейдера можно было определить как:
В новой версии S#.API 4.1.19.1 конструктор вызывается так:
Но этот код почему то не передает портфель в _trader поэтому и нельзя выставить заявку ((( При регистрации ордера система пишет "не задан портфель". Подскажите пожалуйста как правильно должно быть чтоб заявку выставить можно было?? Спасибо.
Нужен полный текст ошибки.
Передать портфель в interFace получается если создать отдельный метод, где создается заявка и зарегистрируется в interFace.SafeConnection.Trader. После того как заявка отправлена в interFace.SelectedPortfolio портфель передается.
Если запустить метод CreateOrderClick 2 раза, сначала заявка будет с портфелем Name = "portfel" а вторая уже Name = "EmulationTrader" т.е. interFace.SelectedPortfolionull а уже после отправки заявки interFace.SelectedPortfolio"EmulationTrader" Подскажите что нужно сделать чтобы портфель передавался в interFace.SelectedPortfolio сразу после вызова метода _safeConnection.ConnectSafe(); (Кнопка Connect)(interFace.SelectedSecurity Securities приходят сразу ) StockSharp.Algo версия 4.1.19.1
up
Можете чуть подробнее объяснить о проблеме? Что такое SafeConnection?
SafeConnection это наша штукенция. Григорий, заходите в наш чат техподдержки, поможем с вопросом.