← Zurück

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)

Спасибо.

War dieses Thema hilfreich?

Thema teilen

Kommentare (33)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

esper
esper

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

longtrades
longtrades Autor

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

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

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

longtrades
longtrades Autor

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

_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 Autor

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

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 Autor

Вот:


 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 Autor

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


                   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 Autor

Я так и делал :


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

попробовал


_trader.RegisterMarketDepth(sec); // RealTimeEmulationTrader

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

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

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


lm.Sources.Add(trader);

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

esper
esper

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

longtrades
longtrades Autor

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

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

esper
esper

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

longtrades
longtrades Autor

4.1.12

longtrades
longtrades Autor

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

Включил :


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

вот лог.

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

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

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

longtrades
longtrades Autor

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

Разница в -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 Autor

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

longtrades
longtrades Autor

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

Moadip
Moadip

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


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

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

longtrades
longtrades Autor

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

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

longtrades
longtrades Autor

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

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


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

Moadip
Moadip

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

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

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

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

longtrades
longtrades Autor

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

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

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

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

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

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

Спасибо.

longtrades
longtrades Autor

4.1.8

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

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

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

Moadip
Moadip

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

longtrades
longtrades Autor

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

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

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

esper
esper

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

longtrades
longtrades Autor

esper:

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

Ок. Спасибо.

longtrades
longtrades Autor

Поставил версию 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)