← 返回

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

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

2013/05/14 10:03:12.061|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 10:03:12.062|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 10:03:12.272|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 10:03:12.274|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 10:03:13.269|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 10:03:13.269|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items)

Спасибо.

本主题对您有帮助吗?

分享主题

评论 (33)

登录创建账户, 登录或注册以发表评论

esper
esper

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

longtrades
longtrades 作者

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

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

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

longtrades
longtrades 作者

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

_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.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/14 11:19:16.509|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue2.Peek() at Ecng.Collections.PriorityQueue2.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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.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
longtrades 作者

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

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.RealTimeEmulationTrader1.#=qzDfzsZDU5Gz7JvAOX_Z4QRgGyGyywkTFxgtASVcbd0M=(IEnumerable1 #=qut1NpOdjYCX2CJaEhX1aVg==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable`1 items)

esper
esper

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

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))
				{
					// создаем шлюз к Quik-у
					using (var trader = new RealTimeEmulationTrader(new QuikTrader(quikPath)))
					{
						trader.LogLevel = LogLevels.Debug;

						var lm = new LogManager();
						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 =>
						{
							if (_portfolio == null)
							{
								// находим нужный портфель и присваиваем его переменной _portfolio
								_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

								if (_portfolio != null)
								{
									Console.WriteLine("Портфель {0} появился.", account);

									// если инструмент и стакан уже появились,
									// то извещаем об этом основной поток для выставления заявки
									if (_lkoh != null && _depth != null)
										waitHandle.Set();
								}
							}
						};

						// подписываемся на событие появление инструментов
						trader.NewSecurities += securities =>
						{
							if (_lkoh == null)
							{
								// находим Лукойл и присваиваем ее переменной lkoh
								_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode);

								if (_lkoh != null)
								{
									Console.WriteLine("Инструмент Лукойл появился.");

									// запускаем экспорт стакана
									trader.RegisterMarketDepth(_lkoh);

									if (_portfolio != null && _depth != null)
										waitHandle.Set();
								}
							}
						};

						// подписываемся на событие обновления стакана
						trader.MarketDepthsChanged += depths =>
						{
							if (_depth == null && _lkoh != null)
							{
								_depth = depths.FirstOrDefault(d => d.Security == _lkoh);

								if (_depth != null)
								{
									Console.WriteLine("Стакан Лукойла появился.");

									// если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки
									if (_portfolio != null && _lkoh != null)
										waitHandle.Set();
								}
							}
						};

						Console.WriteLine("Дожидаемся появления в программе инструмента Лукойл и портфеля {0}...".Put(account));

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

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

						Console.ReadLine();

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

Вот:


 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
esper
_trader.RegisterMarketDepth(sec);

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

longtrades
longtrades 作者

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


                   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
esper

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

longtrades
longtrades 作者

Я так и делал :


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

попробовал


_trader.RegisterMarketDepth(sec); // RealTimeEmulationTrader

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

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

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


lm.Sources.Add(trader);

и в логах уже нет этой ошибки.

esper
esper

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

longtrades
longtrades 作者

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

А может вы не включили логирование КвикТрейдера ?

esper
esper

longtrades: А может вы не включили логирование КвикТрейдера ? Код 1 в 1 как в сообщении.

longtrades
longtrades 作者

4.1.12

longtrades
longtrades 作者

Вот еще провел експеремент с _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);
            }


        }

    }
}

и Активные ордеда в трейдере : + лог - файл

esper
esper

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

longtrades
longtrades 作者

Включил :


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

вот лог.

Плюс во время исполнения вsскочило вот такое сообщение:

Иван З.
Иван З.

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

longtrades
longtrades 作者

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

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

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

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


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

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

Иван З.
Иван З.

Я к тому, что в логе интересное время

2013/05/14 <mark>12:24:07.990</mark>|Error |QuikTrader|System.ArgumentException: Новое событие Changed,T=<mark>14:24:07.812,47855496</mark>/1270 Продажа Цена=8070 Объем=1 Сост=Done Бал=1 имеет дату более раннюю, чем текущее время эмулятора 14.05.2013 <mark>13:24:07</mark>. А на картинке вроде нормальное время, только миллисекунды отличаются

longtrades
longtrades 作者

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

longtrades
longtrades 作者

Как такое может быть что один и тотже код по разному работает ? В чем может быть причина у меня ? Где мне копать дальше ?

Moadip
Moadip

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


var trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader());
trader.UnderlyingTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinStepPrice);

По ошибке. Попробуйте установить на компе московский часовой пояс + время. Это надо чтобы проверить во времени проблема или нет.

longtrades
longtrades 作者

Moadip: По ошибке. Попробуйте установить на компе московский часовой пояс + время. Это надо чтобы проверить во времени проблема или нет.

Установил московский часовой пояс - не помогло все те же ошибки :(

longtrades
longtrades 作者

Moadip: Можно так сделать:

var trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader()); trader.UnderlyingTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinStepPrice);


Переделал так , тоже не помогло :(

Moadip
Moadip

Ок. Тогда еще одни тест.

Открываем Sample для Quik и меняем QuikTrader на RealTimeEmulationTrader<QuikTrader>. Запускаем. Пробуем открыть стакан.

Стакан открывается без проблем, ошибок нет.

Ошибка только на этой версии или воспроизводится на более ранних тоже?

longtrades
longtrades 作者

Moadip: Ок. Тогда еще одни тест.

Открываем Sample для Quik и меняем QuikTrader на RealTimeEmulationTrader<QuikTrader>. Запускаем. Пробуем открыть стакан.

Стакан открывается без проблем, ошибок нет.

Ошибка только на этой версии или воспроизводится на более ранних тоже?

Попробуйте одновременно включить на експорт много стаканов , у меня одновременно подключены больше двадцати стаканов, може тогда и у вас будет та же ошибка и вы сможете ее локализовать.

Кроме того попробуйте сделать как в посте номер 9. Один трейдер в другой и включить логирование на обоих трейдерах.

Спасибо.

longtrades
longtrades 作者

4.1.8

Ошибка: Новое событие ... имеет дату более раннюю, чем текущее время эмулятора ... --- не появляется

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

Столько версий изменилось с 4.1.8 до 4.1.12 , а КанцелОрдер как там не работал так и до сих пор не работает , неужели никто не использует РиалТаймЭмулятор , как по мне так то должен бы быть самый реальный тест .

Moadip
Moadip

Вы пример пробовали переделывать и запускать, как в посте №27?

longtrades
longtrades 作者

Moadip: Вы пример пробовали переделывать и запускать, как в посте №27?

Нет не пробовал. Меня просили показать код в которм есть такие ошибки , я показал его в посте 14, 15 и логи показал от него. Так же попробовал тот же код с более ранней версией библиотеки, ошибка со ранним появлением события там не наблюдается.

Если этого не достаточно, еще и пример попробую переделать ...

esper
esper

longtrades: Если этого не достаточно, еще и пример попробую переделать ... Повторить получилось, будем смотреть в чем дело.

longtrades
longtrades 作者

esper:

longtrades: Если этого не достаточно, еще и пример попробую переделать ... Повторить получилось, будем смотреть в чем дело.

Ок. Спасибо.

longtrades
longtrades 作者

Поставил версию 4.1.13.1 Ошибки с которой начинался топик уже нет. Спасибо большое. А ошибка со временем все же очень редко но проскакивает :

2013/05/24 20:41:14.307|Error |QuikTrader|System.ArgumentException: Новое событие MarketDepth, T=21:41:14.299Бид 3570 29/Оффер 3610 17(1) имеет дату более раннюю, чем текущее время эмулятора 24.05.2013 21:41:14. Parameter name: message at StockSharp.Algo.Testing.MarketEmulator.#=qVTJhqdFfwN13BFw70_rUnQ==(Message #=qBQkYrem7F7dV_qXZXz3BuA==) 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.RealTimeEmulationTrader1.#=qfSvSHyioh3cjIo_pGNOVZfIUIQQtwtHqyl2QJN7Zv5hMxbJ4nn7vOhdgvhNMLA0y(MarketDepth #=qzRsGKaSVz5IK8zfhVfiYVA==) at Ecng.Collections.CollectionHelper.ForEach(IEnumerable1 source, Action1 action) at StockSharp.Algo.Testing.RealTimeEmulationTrader1.#=qYpGtYsqMRi2o2z6Tewq1Hm3pzOYn7E6885Vm3IVOhBE=(IEnumerable1 #=qhK9XyF6opYtc5YfsIp_f4g==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items) 2013/05/24 20:57:17.189|Error |QuikTrader|System.ArgumentException: Новое событие MarketDepth, T=21:57:17.184Бид 6700 35/Оффер 6780 20(1) имеет дату более раннюю, чем текущее время эмулятора 24.05.2013 21:57:17. Parameter name: message at StockSharp.Algo.Testing.MarketEmulator.#=qVTJhqdFfwN13BFw70_rUnQ==(Message #=qBQkYrem7F7dV_qXZXz3BuA==) 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.RealTimeEmulationTrader1.#=qfSvSHyioh3cjIo_pGNOVZfIUIQQtwtHqyl2QJN7Zv5hMxbJ4nn7vOhdgvhNMLA0y(MarketDepth #=qzRsGKaSVz5IK8zfhVfiYVA==) at Ecng.Collections.CollectionHelper.ForEach(IEnumerable1 source, Action1 action) at StockSharp.Algo.Testing.RealTimeEmulationTrader1.#=qYpGtYsqMRi2o2z6Tewq1Hm3pzOYn7E6885Vm3IVOhBE=(IEnumerable1 #=qhK9XyF6opYtc5YfsIp_f4g==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 items)