В пятницу стратегия в голову пришла, протестировать можно только на реале. Прошерстил студию, как понял в ней тестирование есть, но на реальных рыночных данных не возможно тестировать стратегию? Если я не прав, то напишете инструкцию маленькую.
Так вот, взял SampleSMA, поменял пару строк, для начала на проверенной стратегии, RealTimeEmulationTrader решил посмотреть.
Код
private RealTimeEmulationTrader<QuikTrader> _trader;
Код
_trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text));
Да еще вывел ордера в таблицу, прочему то в SampleSMA таблица ордеров есть, а выводить в нее ни чего не выводиться.
Код
_strategy.OrderRegistered += order => this.GuiAsync(() =>
{
_orders.Orders.Add(order);
});
По идее должно работать, но нет. Ордера выставляются, отменяются, переставляются, но сделок не происходит хотя должны происходить. Заявка стоит, ее пересекает поток сделок, она просто передвигается котированием. Очень редко, так и не смог выяснить, при каких обстоятельствах все таки происходит сделка.
Поехали дальше. [biggrin]
На выходных, уже на демо квике. Удалил стратегию, написал простейшую, при появлении свечи выставлять ордер на покупку или продажу, без котирования.
Код
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 на сколько много проблем вы встречали, и были ли выше перечисленные?