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

Имитация исполнения сделки в обычном коннекторе
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
Ответить


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

Название Время Тип Сообщение 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), то все нормально подключается и работает. Одновременно нет.

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

Support

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


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

Спасибо:

Георгий

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


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


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

Фотография
Дата: 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 ? Заранее благодарю. Код под спойлером + прилагаю его к сообщению

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}]

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

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

loading
clippy