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 4  >
esper

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


А какую версию используете? У меня код из вашего сообщения никаких ошибок не выдает.
Спасибо:

longtrades

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


4.1.12
321.png 27 KB (176)
Спасибо:

longtrades

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


Вот еще провел експеремент с _trader.CancelOrder , заявки не снимаються а остаются висеть активными :
Код:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;




using Ecng.Common;
using StockSharp.Quik;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Algo.Testing;





namespace ConsoleApplication1
{
    class Program
    {

        Portfolio _account = new Portfolio();


        static void Main(string[] args)
        {



            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 = new Portfolio();;

                    //ITrader _trader;

                    QuikTrader trader;
                    DdeCustomTable _table;


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

                    trader = new QuikTrader(quikPath);

                    using (var _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);
                            }

                            var Sec = securities.Where(x => x.Code == "RIM3").FirstOrDefault();



                            for (int i = 0; i < 10; i++)
                            {

                                var ord = new Order();
                                ord.Security = Sec;
                                ord.Portfolio = _portfolio;
                                ord.Trader = _trader;
                                ord.Direction = OrderDirections.Buy;
                                ord.Price = Sec.LastTrade.Price - 1000;
                                ord.Volume = 1;

                                _trader.RegisterOrder(ord);


                                System.Threading.Thread.Sleep(5 * 1000);

                                _trader.CancelOrder(ord);

                            }

                            System.Threading.Thread.Sleep(10 * 1000);

                            var b = 0;
                        };

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

                        };



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

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

                        Console.ReadLine();

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


        }

    }
}


и Активные ордеда в трейдере : + лог - файл
123.jpg 183 KB (179) log.txt 87 KB (178)
Спасибо:

longtrades

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


Включил :

Код

                        _trader.LogLevel = LogLevels.Debug;
                        trader.LogLevel = LogLevels.Debug;


вот лог.

Плюс во время исполнения вsскочило вот такое сообщение:
log.txt 1 MB (204) 456.png 37 KB (194)
Спасибо:

Иван З.

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


Если не секрет,у вас с Москвой во времени сколько разница?
Спасибо:

esper

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


longtrades Перейти
Вот еще провел експеремент с _trader.CancelOrder , заявки не снимаються а остаются висеть активными

По заявкам будет фикс.
Спасибо:

longtrades

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


Иван З. Перейти
Если не секрет,у вас с Москвой во времени сколько разница?


Разница в -1 час , но я что-то сомневають что проблема в разнице во времени.

Хотя время сервера квик -1 час ко времени в таблице всех сделок.

я пробовал сделать:
Код

LoggingHelper.SyncMarketTime(10000);
LoggingHelper.NowOffset = new TimeSpan(-1, 0, 0);


мои трейды приходят в тоже время что и транслируються все тейды с биржы , но те же ошыбки и далее прут.
Спасибо:

Иван З.

Фотография
Дата: 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.

А на картинке вроде нормальное время, только миллисекунды отличаются
Спасибо:

longtrades

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


Ну да тут дело в милисекундах , на час отличается только время записи в лог.
Спасибо:

longtrades

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


esper Перейти
А какую версию используете? У меня код из вашего сообщения никаких ошибок не выдает.


А может вы не включили логирование КвикТрейдера ?
Спасибо:
< 1 2 3 4  >

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

loading
clippy