← Zurück

Имитация исполнения сделки в обычном коннекторе

Здравствуйте.

Есть необходимость запускать в одном роботе как тестовые стратегии (что-то вроде RealTimeEmulationTrader), так и рабочие. Пробовал когда-то давно создавать одновременно два коннектора (один обычный, а другой RealTimeEmulationTrader), но одновременно они работать не захотели. Запуск двух разных роботов с разными коннекторами, тоже нужного результата не дает (первый при запуске второго отключается от терминала и наоборот). Как можно в обычном коннекторе имитировать исполнение заявки как это делается в RealTimeEmulationTrader?

Kommentare (17)

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

Support
Support

Добрый день.

Обычный коннектор не может эмулировать заявки. Только через RealTimeEmulationTrader

Георгий
Георгий Autor

Есть какой-то вариант как их (обычный коннектор и RealTimeEmulationTrader) запустить вместе? Или только либо один работает, либо другой?

Support
Support

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

Георгий
Георгий Autor

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

Название Время Тип Сообщение QuikTrader 01.01.0001 0:00:00 Info Connect QuikTrader 24.01.2018 11:45:16 Info Conected! Quik LUA. Transactions 24.01.2018 11:45:16 Info Connect to 127.0.0.1:5001... Quik LUA. Transactions 24.01.2018 11:45:16 Info Connect to 127.0.0.1:5001 is OK. Quik LUA. Transactions 24.01.2018 11:45:16 Info Sending logon to 127.0.0.1:5001... Quik LUA. Transactions 24.01.2018 11:45:16 Info Logon sent to 127.0.0.1:5001 OK. Quik LUA. Transactions 24.01.2018 11:45:16 Info Start message processing. Quik LUA. Market data 24.01.2018 11:45:16 Info Connect to 127.0.0.1:5001... Quik LUA. Market data 24.01.2018 11:45:16 Info Connect to 127.0.0.1:5001 is OK. Quik LUA. Market data 24.01.2018 11:45:16 Info Sending logon to 127.0.0.1:5001... Quik LUA. Market data 24.01.2018 11:45:16 Info Logon sent to 127.0.0.1:5001 OK. Quik LUA. Market data 24.01.2018 11:45:16 Info Start message processing. BasketMessageAdapter 24.01.2018 11:45:16 Error "Ошибка подключения для LuaFixMarketDataMessageAdapter: System.IO.IOException: Поток вернул 0 байт. в Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte[] buffer, Int32 len, Int32 pos) в StockSharp.Fix.Native.BaseFixReader.ReadByte() в StockSharp.Fix.Native.TextFixReader.ReadTag() в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qE0Anfxcqy0AuFkC9BNimdw==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, FixTags #=q8CHBbEcWtlUxDUR74hOL2g==) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qrKFzm$BmKDZn$x34WCUQ_Q==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, Boolean #=qcSlF3Lacn$$0_Wm1fwstMVJyhL3i7f9Jhu4M4AfOf9E=, String #=qYhgEggmLrrLDIcZ95gA24VLYCvpgK_gl28MiaBbz8XY=) в StockSharp.Fix.Dialects.BaseFixDialect.#=qjaKtWwZN7c59V3rKzmkZUEXXG2Oiq0KqlnmaI_o8UK5XNJKIU12nJxNqHBl2uJCV() в StockSharp.Fix.FixMessageAdapter.#=qRr8kz2unEqwjir4ZKwFqx4U9CA6rgFAATVdCdmOEDAg=()" RealTimeEmulationTrader1 24.01.2018 11:45:16 Error "System.InvalidOperationException: Процесс подключения был прервал из-за неожиданного отключения. ---> System.IO.IOException: Поток вернул 0 байт. в Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte[] buffer, Int32 len, Int32 pos) в StockSharp.Fix.Native.BaseFixReader.ReadByte() в StockSharp.Fix.Native.TextFixReader.ReadTag() в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qE0Anfxcqy0AuFkC9BNimdw==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, FixTags #=q8CHBbEcWtlUxDUR74hOL2g==) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qrKFzm$BmKDZn$x34WCUQ_Q==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, Boolean #=qcSlF3Lacn$$0_Wm1fwstMVJyhL3i7f9Jhu4M4AfOf9E=, String #=qYhgEggmLrrLDIcZ95gA24VLYCvpgK_gl28MiaBbz8XY=) в StockSharp.Fix.Dialects.BaseFixDialect.#=qjaKtWwZN7c59V3rKzmkZUEXXG2Oiq0KqlnmaI_o8UK5XNJKIU12nJxNqHBl2uJCV() в StockSharp.Fix.FixMessageAdapter.#=qRr8kz2unEqwjir4ZKwFqx4U9CA6rgFAATVdCdmOEDAg=() --- Конец трассировки внутреннего стека исключений ---" RealTimeEmulationTrader1 24.01.2018 11:45:16 Error Connection lost... RealTimeEmulationTrader1 24.01.2018 11:45:16 Error Ошибка подключения RealTimeEmulationTrader1 24.01.2018 11:45:16 Error "System.InvalidOperationException: Процесс подключения был прервал из-за неожиданного отключения. ---> System.IO.IOException: Поток вернул 0 байт. в Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte[] buffer, Int32 len, Int32 pos) в StockSharp.Fix.Native.BaseFixReader.ReadByte() в StockSharp.Fix.Native.TextFixReader.ReadTag() в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qE0Anfxcqy0AuFkC9BNimdw==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, FixTags #=q8CHBbEcWtlUxDUR74hOL2g==) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qrKFzm$BmKDZn$x34WCUQ_Q==(IFixReader #=qeM6vQmsh7Gs_ycRvLvKbmQ==, Boolean #=qcSlF3Lacn$$0_Wm1fwstMVJyhL3i7f9Jhu4M4AfOf9E=, String #=qYhgEggmLrrLDIcZ95gA24VLYCvpgK_gl28MiaBbz8XY=) в StockSharp.Fix.Dialects.BaseFixDialect.#=qjaKtWwZN7c59V3rKzmkZUEXXG2Oiq0KqlnmaI_o8UK5XNJKIU12nJxNqHBl2uJCV() в StockSharp.Fix.FixMessageAdapter.#=qRr8kz2unEqwjir4ZKwFqx4U9CA6rgFAATVdCdmOEDAg=() --- Конец трассировки внутреннего стека исключений ---" RealTimeEmulationTrader1 24.01.2018 11:45:16 Error "System.IO.IOException: Не удается записать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение. ---> System.Net.Sockets.SocketException: Программа на вашем хост-компьютере разорвала установленное подключение в System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) в StockSharp.Fix.Native.BaseFixWriter.WriteByte(Byte value) в StockSharp.Fix.Native.TextFixWriter.Write(FixTags tag) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qbnTxebCh5naVKuTP50P3k4KXzA0Fjq_404cZ55rKwX4=(IFixWriter #=qi7FuDeshIXfFfA64Csricw==, IFixWriter #=q5PeD4l514coplRk$2ujIxA==, String #=qsCgJ083TD5Aa$xZvMt42_Q==, String #=qoLAzgN0Kh_lheqhd48N$8g==, String #=q4kBCyTkBkUEn9THCTgFvLg==, String #=q80dqdMkYjgZNW5xMzexXbw==, FastDateTimeParser #=qsbZWEOkg$21jhsBLA6YH1UxwCIg7f0INGhWMj6JBh2c=, Int64 #=qUz4Z6S8dxyBnczddeObmQg==, Action1 #=q8$o8xjMCwIe4kBKR01oc1w==) в StockSharp.Fix.Dialects.BaseFixDialect.#=qIpxBmYgzSoxO08zIcAXVwuu5N1DfaO7cbR5GfOBdcuSAULStpMjkIii7dDQqk22Y(Message #=q$IcwKIHJUjHUfGlAeQ9BUA==) в StockSharp.Fix.FixMessageAdapter.OnSendInMessage(Message message) в StockSharp.Quik.Lua.LuaFixMarketDataMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)" Quik LUA. Market data 24.01.2018 11:45:16 Error "System.IO.IOException: Не удается записать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение. ---> System.Net.Sockets.SocketException: Программа на вашем хост-компьютере разорвала установленное подключение в System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) в StockSharp.Fix.Native.BaseFixWriter.WriteByte(Byte value) в StockSharp.Fix.Native.TextFixWriter.Write(FixTags tag) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qbnTxebCh5naVKuTP50P3k4KXzA0Fjq_404cZ55rKwX4=(IFixWriter #=qi7FuDeshIXfFfA64Csricw==, IFixWriter #=q5PeD4l514coplRk$2ujIxA==, String #=qsCgJ083TD5Aa$xZvMt42_Q==, String #=qoLAzgN0Kh_lheqhd48N$8g==, String #=q4kBCyTkBkUEn9THCTgFvLg==, String #=q80dqdMkYjgZNW5xMzexXbw==, FastDateTimeParser #=qsbZWEOkg$21jhsBLA6YH1UxwCIg7f0INGhWMj6JBh2c=, Int64 #=qUz4Z6S8dxyBnczddeObmQg==, Action1 #=q8$o8xjMCwIe4kBKR01oc1w==) в StockSharp.Fix.Dialects.BaseFixDialect.#=qIpxBmYgzSoxO08zIcAXVwuu5N1DfaO7cbR5GfOBdcuSAULStpMjkIii7dDQqk22Y(Message #=q$IcwKIHJUjHUfGlAeQ9BUA==) в StockSharp.Fix.FixMessageAdapter.OnSendInMessage(Message message) в StockSharp.Quik.Lua.LuaFixMarketDataMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)" Quik LUA. Market data 24.01.2018 11:45:16 Error "System.IO.IOException: Не удается записать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение. ---> System.Net.Sockets.SocketException: Программа на вашем хост-компьютере разорвала установленное подключение в System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) в StockSharp.Fix.Native.BaseFixWriter.WriteByte(Byte value) в StockSharp.Fix.Native.TextFixWriter.Write(FixTags tag) в #=qkEJ7YR1Ul9APsCYTmDY96bOcSkeSTfYFCZP7Gz2wQJCAh1c9$27Y91bZ7IBcwIKK.#=qbnTxebCh5naVKuTP50P3k4KXzA0Fjq_404cZ55rKwX4=(IFixWriter #=qi7FuDeshIXfFfA64Csricw==, IFixWriter #=q5PeD4l514coplRk$2ujIxA==, String #=qsCgJ083TD5Aa$xZvMt42_Q==, String #=qoLAzgN0Kh_lheqhd48N$8g==, String #=q4kBCyTkBkUEn9THCTgFvLg==, String #=q80dqdMkYjgZNW5xMzexXbw==, FastDateTimeParser #=qsbZWEOkg$21jhsBLA6YH1UxwCIg7f0INGhWMj6JBh2c=, Int64 #=qUz4Z6S8dxyBnczddeObmQg==, Action1 #=q8$o8xjMCwIe4kBKR01oc1w==) в StockSharp.Fix.Dialects.BaseFixDialect.#=qIpxBmYgzSoxO08zIcAXVwuu5N1DfaO7cbR5GfOBdcuSAULStpMjkIii7dDQqk22Y(Message #=q$IcwKIHJUjHUfGlAeQ9BUA==) в StockSharp.Fix.FixMessageAdapter.OnSendInMessage(Message message) в StockSharp.Quik.Lua.LuaFixMarketDataMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)" RealTimeEmulationTrader`1 24.01.2018 11:45:16 Error Quik Error

Если подключаться только одним из них (либо только QuikTrader либо только RealTimeEmulationTrader), то все нормально подключается и работает. Одновременно нет.

Support
Support

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

Георгий
Георгий Autor

Пробую такой код:


private void Connection()
{ 
    _trader2 = RealQuikConnector();
 
    RealTimeEmulationTrader<IMessageAdapter> _trader = new RealTimeEmulationTrader<IMessageAdapter>(_trader2.MarketDataAdapter, new Portfolio() { BeginValue = 10000000, Name = "My" });
    
    logManager.Sources.Add(_trader);
    logManager.Sources.Add(_trader2);
  
    _trader2.Connected += () => this.GuiAsync(() =>
    {
        _trader2.AddErrorLog("Подключено.");
    });

    _trader2.ConnectionError += _error => this.GuiAsync(() =>
    {
        _trader.AddErrorLog("Ошибка подключения");
        _trader.AddErrorLog(_error);
    });

    _trader2.Connect();

    
    _trader.Connected += () => this.GuiAsync(() =>
    {
        _trader.AddErrorLog("Подключено.");
    });

    _trader.ConnectionError += _error => this.GuiAsync(() =>
    {
        _trader.AddErrorLog("Ошибка подключения");
        _trader.AddErrorLog(_error);
    });

    _trader.Connect();
}

Выдается ошибка:

Название Время Тип Сообщение QuikTrader 01.01.0001 0:00:00 Info Connect QuikTrader 24.01.2018 13:11:34 Error "System.InvalidOperationException: Сообщение 'Connect,T(L)=2018/01/24 13:11:34.838,Error=Родитель у источника 127.0.0.1:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value' привело к ошибке обработки. ---> System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре. в System.Collections.Generic.Dictionary2.get_Item(TKey key) в Ecng.Collections.SynchronizedDictionary2.get_Item(TKey key) в StockSharp.Algo.Connector.ProcessConnectMessage(BaseConnectionMessage message) в StockSharp.Algo.Connector.OnProcessMessage(Message message) --- Конец трассировки внутреннего стека исключений ---" QuikTrader 24.01.2018 13:11:34 Error Quik Error BasketMessageAdapter 24.01.2018 13:11:34 Error "System.ArgumentException: Родитель у источника 127.0.0.1:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value в StockSharp.Logging.BaseLogSource.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.StockSharp.Logging.ILogSource.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.StockSharp.Logging.ILogSource.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.StockSharp.Logging.ILogSource.set_Parent(ILogSource value) в StockSharp.Algo.BasketMessageAdapter.<>c__DisplayClass53_0.<OnSendInMessage>b__1(IMessageAdapter a) в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) в StockSharp.Algo.BasketMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)"

Support
Support

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

Георгий
Георгий Autor

Здравствуйте. Подскажите данная ошибка в версии 4.4.5.3 исправлена?

Support
Support

Добрый день. Ошибка исправлена в версии 4.4.5.4

Георгий
Георгий Autor

Support: Добрый день. Ошибка исправлена в версии 4.4.5.4

Здравствуйте.

В 4.4.15 не работает одновременно обычный коннектор к Quik и RealTimeEmulationTrader. После подключения обычного коннектора, если вызвать подключение RealTimeEmulationTrader, то выдается ошибка. Если же подключение не вызывать, то RealTimeEmulationTrader остается в состоянии Disconnected, хотя основной коннектор подключился.

Prival
Prival

Возможно полный код поможет вам быстрее мне помочь. Ситуация следующая, если подключаюсь Trader = RealQuikConnector();

Получен портфель - 7600v7m SBER@TQBR - зарегестрирован, все ок RIM8@FORTS - зарегестрирован, все ок ... Событие NewTrades Событие ValuesChanged LastTrade.Price=123180 AsksCount=1831 Событие SecuritiesChangedLastTrade.Price=125170 AsksCount=1831

То все хорошо, все данные приходят, но если подключаюсь Trader = EmulationQuikConnector();

Получен портфель - Симулятор SBER@TQBR - зарегестрирован, все ок RIM8@FORTS - зарегестрирован, все ок Событие ValuesChanged LastTrade.Price=null ... Событие NewTrades Событие ValuesChanged LastTrade.Price=null

То все плохо, событие SecuritiesChanged не срабатывает, в ValuesChanged срабатывает но там null (((

Подскажите что неправильно я делаю ? Как правильно включить режим RealTimeEmulationTrader ? Заранее благодарю. Код под спойлером + прилагаю его к сообщению

using System;
using System.Linq;
using System.Net;
using System.Security;
using System.Windows;
using Ecng.Common;
using MoreLinq;
using StockSharp.Algo;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Messages;
using StockSharp.Quik;

namespace Test
{
    public partial class MainWindow : Window
    {
        public Connector Trader; 

        public MainWindow()
        {
            InitializeComponent();
        }

        private QuikTrader RealQuikConnector()
        {
            var _qtrader = new QuikTrader
            {
                LuaLogin = "quik",
                LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
                LuaPassword = "quik".To<SecureString>()
            };
            return _qtrader;
        }

        private RealTimeEmulationTrader<IMessageAdapter> EmulationQuikConnector()
        {
            var _tMessageAdapter = new QuikTrader
            {
                LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
                LuaLogin = "quik",
                LuaPassword = "quik".To<SecureString>(),
                LogLevel = LogLevels.Debug,
                UpdateSecurityByLevel1 = true
            }.MarketDataAdapter;

            var portfolio = new Portfolio {Name = "Симулятор", BeginValue = 100000};
            var _trader = new RealTimeEmulationTrader<IMessageAdapter>(_tMessageAdapter, portfolio);

            return _trader;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (Trader == null)
            {
                Trader = RealQuikConnector();
                //Trader = EmulationQuikConnector();

                Trader.NewSecurities += securities =>
                {
                    securities.ForEach(s =>
                    {
                        try
                        {
                            if (s.Id == "SBER@TQBR" || s.Id == "SBER@QJSIM") //
                            {
                                Trader.RegisterMarketDepth(s);
                                Trader.RegisterSecurity(s);
                                Trader.RegisterTrades(s);
                                Console.WriteLine(@"{0} - зарегестрирован, все ок", s);
                            }

                            if (s.Id == "RIM8@FORTS") //
                            {
                                Trader.RegisterMarketDepth(s);
                                Trader.RegisterSecurity(s);
                                Trader.RegisterTrades(s);
                                Console.WriteLine(@"{0} - зарегестрирован, все ок", s);
                            }
                        }
                        catch (Exception exc)
                        {
                            Console.WriteLine(exc.Message, @" Ошибка регистрации ", s);
                            throw;
                        }
                    });
                };

                Trader.NewPortfolio += portfolio => { Console.WriteLine(@"Получен портфель - {0}", portfolio.Name); };
                Trader.NewTrades += a => { Console.WriteLine(@"Событие NewTrades"); };


                Trader.ValuesChanged += (sec, b, c, d) =>
                {
                    Console.Write(@"Событие ValuesChanged ");
                    if (sec.LastTrade != null)
                        Console.WriteLine(@"LastTrade.Price={0} AsksCount={1}", sec.LastTrade.Price, sec.AsksCount);
                    else
                        Console.WriteLine(@"LastTrade.Price=null");
                };

                Trader.SecuritiesChanged += sec =>
                {
                    Console.Write(@"Событие SecuritiesChanged");
                    if (sec.Last().LastTrade != null)
                        Console.WriteLine(@"LastTrade.Price={0} AsksCount={1}", sec.Last().LastTrade.Price,
                            sec.Last().AsksCount);
                    else
                        Console.WriteLine(@"LastTrade.Price=null");
                };
            }

            Trader.Connect();
        }
    }
}

Версия 4.4.5.4

З.Ы. Для тех кто пользуется решарпером, возможно это будет интересно. Вечный триал. Просто раз в месяц удаляйте Удалить ключь Windows Registry Editor Version 5.00 [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings{9656c84c-e0b4-4454-996d-977eabdf9e86}]

Support
Support

Добрый день

Спасибо за ваш отчёт. Пожалуйста, приведите текст ошибки.

Георгий
Георгий Autor

Текст ошибки:

Название Время Тип Сообщение QuikTrader 01.01.0001 0:00:00 Info Connect BasketMessageAdapter 04.12.2018 18:09:18 Info Connecting 'Quik LUA. Transactions: 127.0.0.1:5001 Sender quik Target StockSharpTS'. BasketMessageAdapter 04.12.2018 18:09:18 Info Connecting 'Quik LUA. Market data: 127.0.0.1:5001 Sender quik Target StockSharpMD'. BasketMessageAdapter 04.12.2018 18:09:18 Error "System.ArgumentException: Родитель у источника Quik LUA. Market data: 127.0.0.1:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value в StockSharp.Logging.BaseLogSource.set_Parent(ILogSource value) в StockSharp.Algo.Testing.RealTimeEmulationTrader1.RealTimeEmulationMarketDataAdapter.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Messages.MessageAdapterWrapper.set_Parent(ILogSource value) в StockSharp.Algo.BasketMessageAdapter.<>c__DisplayClass89_0.<OnSendInMessage>b__1(IMessageAdapter a) в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) в StockSharp.Algo.BasketMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)" RealTimeEmulationTrader1 04.12.2018 18:09:18 Error "System.InvalidOperationException: Сообщение 'Connect,T(L)=2018/12/04 18:09:18.660,Error=Родитель у источника Quik LUA. Market data: 127.0.0.1:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value' привело к ошибке обработки. ---> System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре. в System.Collections.Generic.Dictionary2.get_Item(TKey key) в Ecng.Collections.SynchronizedDictionary2.get_Item(TKey key) в StockSharp.Algo.Connector.ProcessConnectMessage(BaseConnectionMessage message) в StockSharp.Algo.Connector.OnProcessMessage(Message message) --- Конец трассировки внутреннего стека исключений ---" Quik LUA. Transactions 04.12.2018 18:09:18 Info Connect to 127.0.0.1:5001... Quik LUA. Transactions 04.12.2018 18:09:18 Info Connect to 127.0.0.1:5001 is OK. Quik LUA. Transactions 04.12.2018 18:09:18 Info Sending logon to 127.0.0.1:5001... Quik LUA. Transactions 04.12.2018 18:09:18 Info Logon sent to 127.0.0.1:5001 OK. Quik LUA. Transactions 04.12.2018 18:09:18 Info Start message processing. Quik LUA. Market data 04.12.2018 18:09:18 Info Connect to 127.0.0.1:5001... Quik LUA. Market data 04.12.2018 18:09:18 Info Connect to 127.0.0.1:5001 is OK. Quik LUA. Market data 04.12.2018 18:09:18 Info Sending logon to 127.0.0.1:5001... Quik LUA. Market data 04.12.2018 18:09:18 Info Logon sent to 127.0.0.1:5001 OK. Quik LUA. Market data 04.12.2018 18:09:18 Info Start message processing. BasketMessageAdapter 04.12.2018 18:09:18 Info Connected to 'Quik LUA. Transactions: 127.0.0.1:5001 Sender quik Target StockSharpTS'. BasketMessageAdapter 04.12.2018 18:09:18 Info Connected to 'Quik LUA. Market data: 127.0.0.1:5001 Sender quik Target StockSharpMD'.

Support
Support

Добрый день

Ошибка не подтвердилась. Проверка была на примере SampleRealtimeEmulation

Георгий
Георгий
Георгий Autor

Спасибо. Нашел в чем у меня были грабли. Теперь работает. Еще возникло два вопроса:

  1. Не совсем понятно за что отвечает флаг ownAdapter в RealTimeEmulationTrader. У меня если его не поставить в false, то не работает. Подключение прописываю в коде, а не так как это делается в SampleRealtimeEmulation
  2. Если я хочу чтобы одна страта работала на нормальном коннекторе, а другая на реалтайм эмуляторе, то надо в явном виде в страту коннектор передавать или правильно как-то по другому делать?
Георгий
Георгий Autor

Чтобы воспроизвести ошибку на примере RealTimeEmulationTrader нужно: в настройках подключения добавить "Quik Lua. Trabsactions" и "Quik Lua. Market Data", в коде в строке

_emuConnector = new RealTimeEmulationTrader<IMessageAdapter>(_realConnector.MarketDataAdapter ?? new PassThroughMessageAdapter(new IncrementalIdGenerator()), _emuPf, false);

удаляем false в конце, т.е. должно быть

_emuConnector = new RealTimeEmulationTrader<IMessageAdapter>(_realConnector.MarketDataAdapter ?? new PassThroughMessageAdapter(new IncrementalIdGenerator()), _emuPf);

Запускаем. Ошибка:

Название Время Тип Сообщение Connector 01.01.0001 0:00:00 Info Connect RealTimeEmulationTrader1 01.01.0001 0:00:00 Info Connect BasketMessageAdapter 16.12.2018 23:05:18 Info Connecting 'Quik LUA. Transactions: localhost:5001 Sender quik Target StockSharpTS'. BasketMessageAdapter 16.12.2018 23:05:18 Error "System.ArgumentException: Родитель у источника Quik LUA. Market data: localhost:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value в StockSharp.Logging.BaseLogSource.set_Parent(ILogSource value) в StockSharp.Algo.Testing.RealTimeEmulationTrader1.RealTimeEmulationMarketDataAdapter.set_Parent(ILogSource value) в StockSharp.Algo.BasketMessageAdapter.<>c__DisplayClass89_0.<OnSendInMessage>b__1(IMessageAdapter a) в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) в StockSharp.Algo.BasketMessageAdapter.OnSendInMessage(Message message) в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)" RealTimeEmulationTrader1 16.12.2018 23:05:18 Error "System.InvalidOperationException: Сообщение 'Connect,T(L)=2018/12/16 23:05:18.897,Error=Родитель у источника Quik LUA. Market data: localhost:5001 Sender quik Target StockSharpMD уже установлен в BasketMessageAdapter. Имя параметра: value' привело к ошибке обработки. ---> System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре. в System.ThrowHelper.ThrowKeyNotFoundException() в System.Collections.Generic.Dictionary2.get_Item(TKey key) в Ecng.Collections.SynchronizedDictionary`2.get_Item(TKey key) в StockSharp.Algo.Connector.ProcessConnectMessage(BaseConnectionMessage message) в StockSharp.Algo.Connector.OnProcessMessage(Message message) --- Конец трассировки внутреннего стека исключений ---" Quik LUA. Transactions 16.12.2018 23:05:18 Info Connect to localhost:5001... Quik LUA. Transactions 16.12.2018 23:05:18 Info Connect to localhost:5001 is OK. Quik LUA. Transactions 16.12.2018 23:05:18 Info Sending logon to localhost:5001... Quik LUA. Transactions 16.12.2018 23:05:18 Info Logon sent to localhost:5001 OK. ......

Support
Support

Добрый день

Параметр ownAdapter указывает, будет ли эмулятор контролировать время жизни реального подключения. В вашем случае он должен быть false, так как у вас есть ещё и реальная торговля.