RealTimeEmulationTrader постоянно выдает Error
Atom
14.05.2013


Помогите разобраться в чем проблема.В логах постоянно выдает такую ошыбку:

2013/05/14 10:03:12.061|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 10:03:12.062|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 10:03:12.272|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 10:03:12.274|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 10:03:13.269|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 10:03:13.269|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)

Спасибо.



Спасибо:


1 2 3  > >>
esper

Фотография
Дата: 14.05.2013
Ответить


Как воспроизвести?
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Пока не знаю из-за чего ошибка :(
Может какойто уровень лога повыше поможет разобраться ?

может из-за этой ошибки у меня не отменяються ордера и висят активными в Трейдере ?

но ошибка появляется еще до начала выставления и снятия заявок :(
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Ошибка появляется сразу после :

_trader.RegisterMarketDepth(Sec);

вот:

2013/05/14 11:19:07.401| |QuikTrader|Экспорт запущен.
2013/05/14 11:19:16.509|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 11:19:16.509|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty
at Ecng.Collections.PriorityQueue`2.Peek()
at Ecng.Collections.PriorityQueue`2.PeekValue()
at StockSharp.Algo.Testing.MarketEmulator.#=qs79PTBWoBFuRx8Q2yrv5adgu4HB4C8yklBG_NoWJcqY=.#=q5OvkGwWOHSKoy$qfYt6cNg==()
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 11:19:16.509|Error |QuikTrader|System.ArgumentException: Новое событие MarketDepth, T=12:19:16.471Бид 1970 2/Оффер 1990 20(1) имеет дату более раннюю, чем текущее время эмулятора 14.05.2013 12:19:16.
Parameter name: message
at StockSharp.Algo.Testing.MarketEmulator.#=qzpj$x3Te7dhB7R4FsKcXgw==(Message #=qtJKTkjNOI_BSH$I1woquYw==)
at StockSharp.Algo.Testing.MarketEmulator.EnqueueMessage(Message message)
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
2013/05/14 11:19:25.334| |QuikTrader|Экспорт остановлен.


Такие ошибки тоже выскакивают постоянно:
: Новое событие MarketDepth, T=12:19:16.471Бид 1970 2/Оффер 1990 20(1) имеет дату более раннюю, чем текущее время эмулятора 14.05.2013 12:19:16.
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Почему время ємулятора постоянно отстает ? Постоянно такое пишет:


2013/05/14 12:24:07.990|Error |QuikTrader|System.ArgumentException: Новое событие Changed,T=14:24:07.812,47855496/1270 Продажа Цена=8070 Объем=1 Сост=Done Бал=1
имеет дату более раннюю, чем текущее время эмулятора 14.05.2013 13:24:07.
Parameter name: message
at StockSharp.Algo.Testing.MarketEmulator.#=qzpj$x3Te7dhB7R4FsKcXgw==(Message #=qtJKTkjNOI_BSH$I1woquYw==)
at StockSharp.Algo.Testing.MarketEmulator.#=qnWK1AT0RAi$1GUZuQlgTOQihLsAS3JKusmAdSX5HniA=(Message #=q8zwQ2rFCa4DFOfcAfCBgmg==)
at StockSharp.Algo.Testing.MarketEmulator.#=qzbQwtxUJhdiGR3wnszAnFrDpBbrnHhHbSyDrN6bGBiM=()
at StockSharp.Algo.Testing.MarketEmulator.#=qlA1EdkS6ZZmWy5hZ0x$pEITVZr2jLC7e9PLeF3dVQ88=()
at StockSharp.Algo.Testing.MarketEmulator.set_CurrentTime(DateTime value)
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta)
at StockSharp.Algo.Testing.RealTimeEmulationTrader`1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable`1 #=qut1NpOdjYCX2CJaEhX1aVg==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)
Спасибо:

esper

Фотография
Дата: 14.05.2013
Ответить


Давайте минимальный код, который воспроизводит проблему. Код ниже у меня работает нормально:
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Вот:

Код

 try
            {


                // для теста выбираем бумагу Лукойл
                const string secCode = "LKOH";

                var quikPath = QuikTerminal.GetDefaultPath();

                /*if (quikPath.IsEmpty())
                {
                    Console.WriteLine("Не найден ни один запущенный Quik");
                    return;
                }*/

                Console.WriteLine("Запущенный Quik найден по пути " + quikPath);

                var account = "59072";

                using (var waitHandle = new AutoResetEvent(false))
                {
                    Portfolio _portfolio = null;

                    ITrader _trader;

                    QuikTrader trader;
                    DdeCustomTable _table;


                    // создаем шлюз к Quik-у

                    trader = new QuikTrader(quikPath);

                    using (_trader = new RealTimeEmulationTrader(trader))
                    {
                        _trader.LogLevel = LogLevels.Info;

                        var lm = new LogManager();
                        lm.Sources.Add(_trader);
                        lm.Sources.Add(trader);
                        lm.Listeners.Add(new FileLogListener("log.txt"));

                        // подписываемся на событие успешного подключения
                        // все действия необходимо производить только после подключения
                        _trader.Connected += () =>
                        {
                            Console.WriteLine("Подключение было произведено успешно.");

                            // извещаем об успешном соединени
                            waitHandle.Set();
                        };

                        Console.WriteLine("Производим подключение...");

                        _trader.Connect();

                        // дожидаемся события об успешном соединении
                        waitHandle.WaitOne();

                        _trader.NewPortfolios += portfolios =>
                        {


                        };

                        // подписываемся на событие появление инструментов
                        _trader.NewSecurities += securities =>
                        {
                            foreach (var sec in securities)
                            {
                                trader.RegisterMarketDepth(sec);
                            }
                        };

                        // подписываемся на событие обновления стакана
                        _trader.MarketDepthsChanged += depths =>
                        {

                        };



                        // запускаем экспорт по DDE
                        _trader.StartExport();

                        // дожидаемся появления портфеля и инструмента
                        waitHandle.WaitOne();

                        Console.ReadLine();

                        // останавливаем экспорт по DDE
                        _trader.StopExport();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }

Спасибо:

esper

Фотография
Дата: 14.05.2013
Ответить


Код
_trader.RegisterMarketDepth(sec);


P.s. для исходников есть специальные теги [ code=csharp ][ /code ]
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Ошибка начинает сыпаться в логи после:

Код

                   ITrader _trader;
 
                   QuikTrader trader;
                   DdeCustomTable _table;
 
 
                   // создаем шлюз к Quik-у
 
                   trader = new QuikTrader(quikPath);
 
                   using (_trader = new RealTimeEmulationTrader(trader)



почему так делаю , потому что мне нужны дополнительные поля которые я могу прописать только к Квик трейдеру :( , а к
мулятору нет

Код

 trader = new QuikTrader(quik_path);

                       
                        trader.CancelOrderInstantly = true;
                        trader.SupportManualOrders = false;

                        // изменяем метаданные так, чтобы начали обрабатывать дополнительные колонки опционов
                        var columns = trader.SecuritiesTable.Columns;
                        columns.Add(DdeSecurityColumns.Strike);
                        columns.Add(DdeSecurityColumns.ImpliedVolatility);
                        columns.Add(DdeSecurityColumns.UnderlyingSecurity);
                        columns.Add(DdeSecurityColumns.TheorPrice);
                        columns.Add(DdeSecurityColumns.OptionType);
                        columns.Add(DdeSecurityColumns.ExpiryDate);
                        columns.Add(DdeSecurityColumns.OpenPositions);
                        columns.Add(DdeSecurityColumns.MinStepPrice);
                        // new 
                        var columns1 = trader.DerivativePortfoliosTable.Columns;
                        columns1.Add(DdeDerivativePortfolioColumns.PlannedPositionsPrice);
                        columns1.Add(DdeDerivativePortfolioColumns.ACI);
                        columns1.Add(DdeDerivativePortfolioColumns.MarketCommission);
                       
                        trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);


                        _trader = new RealTimeEmulationTrader<QuikTrader>(trader);

Спасибо:

esper

Фотография
Дата: 14.05.2013
Ответить


Регистрируйте стаканы в эмуляторе, а на напрямую в квике.
Спасибо:

longtrades

Фотография
Дата: 14.05.2013
Ответить


Я так и делал :
Код

trader.RegisterMarketDepth(sec);  // (QuikTrader )

попробовал
Код

_trader.RegisterMarketDepth(sec); // RealTimeEmulationTrader

ничего не изменилось , та же ошибка.

Насколько я понял ошибку выдает не RealTimeEmulationTrader , а QuikTrader

потому как убираю строку :
Код

lm.Sources.Add(trader);

и в логах уже нет этой ошибки.
Спасибо:
1 2 3  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy