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

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


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

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




Спасибо:


1 2  >
Support

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


Добрый день.

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

Спасибо:

Георгий

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


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

Спасибо:

Support

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


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

Спасибо:

Георгий

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


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

[spoiler]Название Время Тип Сообщение 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 [/spoiler]

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

connection.cs 1 KB (477)
Спасибо:

Support

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


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

Спасибо:

Георгий

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


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

[code] 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();

} [/code]

Выдается ошибка: [spoiler] Название Время Тип Сообщение 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.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)" [/spoiler]

Спасибо:

Support

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


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

Спасибо:

Георгий

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


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

Спасибо:

Support

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


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

Спасибо:

Prival

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


Возможно полный код поможет вам быстрее мне помочь. Ситуация следующая, если подключаюсь 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 ? Заранее благодарю. Код под спойлером + прилагаю его к сообщению [spoiler][code]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();
    }
}

}[/code][/spoiler]

Версия 4.4.5.4

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

Test.rar 17 MB (552)
Спасибо:
1 2  >

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

loading
clippy