← Atrás

RealTimeEmulationTrader

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

  1. Создал трейдера и портфель

var quikMd = new LuaFixMarketDataMessageAdapter(new MillisecondIncrementalIdGenerator())
            {
                Login = "quik",
                Password = "quik".To<SecureString>(),
                Address = QuikTrader.DefaultLuaAddress,
                TargetCompId = "StockSharpMD",
                SenderCompId = "quik",
                RequestAllSecurities = true
            };

            _trader = new RealTimeEmulationTrader<IMessageAdapter>(quikMd);

            _portfolio = new Portfolio { Name = "test account", BeginValue = 1000000, CurrentValue = 1000000};

По кнопке запускаю стратегию

    class Strategy01:Strategy
    {
        protected override void OnStarted()
        {
            this.AddInfoLog("---Start---{0}---{1}---{2}---{3}---{4}---", Connector, Security, Portfolio, Portfolio.BeginValue, Portfolio.CurrentValue);
            var order = this.BuyAtMarket();
            RegisterOrder(order);
            base.OnStarted();

        }

В логе ошибка недостаточно средств ((( RealTimeEmulationTrader1 11.02.2017 18:32:47 Info Создан новый портфель Симулятор. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для MarketDepth. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Level1. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Trades. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info RegisterOrder: 0/ Покупка Цена=0 Объем=1 Сост=None Бал=0 RealTimeEmulationTrader1 11.02.2017 18:33:01 Info New order: 66767638/ Покупка Цена=0 Объем=1 Сост=Pending Бал=1 S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info Стратегия Запущена. [0,-1]. Позиция 0. S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info ---Start---RealTimeEmulationTrader`1---SBER@QJSIM---test account---1000000---1000000--- S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info Регистрация новой Market (0x65FB2A) заявки на Buy с ценой 0 и объемом 1. SecurityMarketEmulator 11.02.2017 18:33:01 Info Заявка 66767638 не зарегистрирована. Причина 'На счету test account недостаточно денег для регистрации заявки 66767638. Необходимо 131.92, имеется 0, заблокировано 0.00.'.

¿Le resultó útil este tema?

Compartir tema

Comentarios (42)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Support
Support

Проверим..

Support
Support

Вот так попробуйте. _portfolio = new Portfolio { Name = "test", BeginValue = 1000000 }; _connector = new RealTimeEmulationTrader(quikMd, _portfolio);

Prival
Prival Autor

Спасибо помогло. Но не до конца. Заявка отправляется, но не появляется позиций. Все время висит статус -> Регистрация https://yadi.sk/i/njAg6-vh3EAwKs Пробовал смотреть примеры, но к сожалению из примера SampleRealTimeEmulation убран вариант подключения к квику. Может у когото есть простой пример где все работает ? Типа нажали кнопу....появилась позиция по фьючерсу. Заранее Спасибо.

Support
Support

Скорее всего это баг.

Prival
Prival Autor

Написал на githabe. Приложил полный код. https://github.com/StockSharp/StockSharp/issues/291 Прикладываю его сюда. Мне кажется это я что то не так делаю, т.к. учусь (разбираюсь с библиотекой). Буду исренне удивлен если это действительно баг, т.к. мне кажется эта функция должна быть очень востребована, А пишу про неё только я. Если не трудно подтвердите что у Вас тоже позиция равна 0. Заранее благодарю

Support
Support

На ГИте Михаил писав Вам, чтобы проверили на последней версии... Проверяли?

Support
Support

protected override void OnStarted() { Console.WriteLine(@"---Start---{0}---{1}---{2}---{3}---{4}---{5}", Connector, Security, Portfolio, Portfolio.BeginValue, Portfolio.CurrentValue, Position); base.OnStarted(); var order = this.BuyAtLimit((decimal)117400); RegisterOrder(order); } В данному контексте base.OnStarted() нужно на первое место поставить..

Prival
Prival Autor
  1. base.OnStarted() переставил на первое место. - не помогло
  2. Скачал 4.3.21 перестал находится _ri
  3. Собрал проект по новой, с нуля. событие _trader.NewSecurities += - не срабатывает, инструменты не приходят. Хотя раньше приходили.
Support
Support
  1. base.OnStarted() - и не должно было помочь... Просто base.OnStarted() должен быть вызван раньше, чем начнет выполняться основная логика стратегии..
  2. В Квике скрипт Lua из сборки 4.3.21 подключаете?
Prival
Prival Autor
  1. Скрипт lua из сборки 4.3.21 но инструменты не приходят (((
  2. Скажите у вас TestBag01.rar нормально все работает ? или тоже не приходят инструменты ? Я возможно как то неправильно инициализирую, а как правильно не понимаю, в прошлой сборке инструменты приходили без проблем Заранее спасибо.
Support
Support

Вот этот пример коннектора попробуйте.

Prival
Prival Autor

Support: Вот этот пример коннектора попробуйте. Тоже не работает выдает ошибку. переменная _portfolio=null ((

Support
Support

Вот так измените: _connector.NewPortfolios += portfolios => { portfolios.ForEach(portfolio => { Console.WriteLine("Получен портфель: {0}", portfolio.Name); _connector.RegisterPortfolio(portfolio); _portfolio = portfolio; }); };

Support
Support

.

Prival
Prival Autor

Спасибо всем кто помогает. С вашими подсказками многое получилось. Файл прилагаю Осталось 2 вопроса (проблемы)

  1. Console.WriteLine(@"Событие появления новых сделок, по нашим заявкам " + _strategy.MyTrades.Count()); выдает 0
  2. Не срабатывает событие Connector.SecuritiesChanged +=... соответсвенно не понимаю как получить security.LastTrade.Price, открытый интерес и т.д.
  3. Две строки пришлось закоментировать, там все время ошибки, но думаю это не критично //_trader.EmulationAdapter.Emulator.Settings.TimeZone = TimeHelper.Est; //_trader.EmulationAdapter.Emulator.Settings.ConvertTime = true;

Заранее благодарю за помощь (подсказки)

Support
Support

Вот так можно данные в ValuesChanged получать.. Просто нужное поле из перечисления Level1Fields выбираете...

_connector.ValuesChanged += (security, values, serverTime, localTime) => { if (security != _security || values.All(kvp => kvp.Key != Level1Fields.TheorPrice)) return; var fields = values.ToDictionary(); Console.WriteLine("Инструмент: {0}, Время: {1}, Теор.цена: {2}", security.Id, fields[Level1Fields.TheorPrice], serverTime); };

Но для Вашей задачи Вам проще всего подписаться на событие NewTrades и и получать обычные сделки по нужному инструменту... В классе Trade есть поле OpenInterest... Кроме того в этом событии в ы получите историю по сделкам (и OI) c с начала торговой сессии, т.е. с 19-00 предыдущего дня. Чтобы получать сделки с OI нужно 1. Чтобы инструмент был добавлен в таблицу обезличенных сделок, 2. в этой таблице должно быть добавлено поле Открытые позиции..

Prival
Prival Autor

Натолкнулся еще на 3 неточности (проблемы). Подключаюсь к реальному счету в режиме Симуляции.

  1. Иногда сделки проходят по неправильным ценам. У фьючерса RIM7 цена должна быть кратка 10, но иногда это не так. Код
        private void Connector_NewMyTrades(IEnumerable<MyTrade> trades)
        {
            foreach (var trade in trades)
            {
                Console.WriteLine(@"{0} Прошла сделка {5} {4} по цене {1}, объём {2}, направление {3}.",
                    TimeHelper.Now.TimeOfDay, trade.Trade.Price, trade.Trade.Volume, trade.Order.Direction,
                    trade.Trade.Security.Code, trade.Trade.Id);
            }
        }

Окно вывода 14:06:32.6568830 Прошла сделка 11 RIM7 по цене 108588, объём 2, направление Sell. 14:06:39.7736608 Прошла сделка 12 RIM7 по цене 108610, объём 1, направление Buy. 14:06:39.7791045 Прошла сделка 13 RIM7 по цене 108610, объём 1, направление Buy. 14:07:01.4183506 Прошла сделка 14 RIM7 по цене 108590, объём 2, направление Sell. 14:07:14.6335282 Прошла сделка 15 RIM7 по цене 108552, объём 2, направление Buy. 14:07:15.4650348 Прошла сделка 16 RIM7 по цене 108530, объём 1, направление Sell. 14:07:15.4652660 Прошла сделка 17 RIM7 по цене 108529, объём 1, направление Sell.

  1. Вторая проблема не могу получить AveragePrice

20:00:01.9982056 Заявка Sell RIM7 полностью исполнена Volume=1. Позиция -1 AveragePrice=0

Код для проверки ... var order = this.SellAtMarket(volume); ...

 order
                .WhenMatched(this.Connector)
                .Do(() =>
                {
                    Console.WriteLine(@"{0} Заявка {2} {3} полностью исполнена Volume={4}. Позиция {1} AveragePrice={5}", TimeHelper.Now.TimeOfDay, PositionManager.Position, order.Direction, order.Security.Code, order.Volume, TraderHelper.GetAveragePrice(order, Connector) );

                })
                .Once()
                .Apply(this);

  1. Если сделать переворотную систему (мы все время в рынке), т.е. первый вход 1 контрактом Volumeу=1, а затем все время переворачиваемся 2*Volume, то через некоторое время приблизительно на 30-40 перевороте. Не хватает денег ...

2017/03/16 20:13:57.674| |S_RIM7@FORTS_Симулятор|Новая Buy сделка 24 по цене 109380 на 2 заявки 71722071. 2017/03/16 20:14:00.464| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0xDF6003) заявки на Sell с ценой 0 и объемом 2. 2017/03/16 20:14:00.465| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=-1. 2017/03/16 20:14:00.465| |S_RIM7@FORTS_Симулятор|Заявка 71722072 (0xDF6003) больше не активна. 2017/03/16 20:14:00.465| |S_RIM7@FORTS_Симулятор|Новая Sell сделка 25 по цене 109360 на 1 заявки 71722072. 2017/03/16 20:14:00.465| |S_RIM7@FORTS_Симулятор|Новая Sell сделка 26 по цене 109359 на 1 заявки 71722072. 2017/03/16 20:14:16.808| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x6FABE9) заявки на Buy с ценой 0 и объемом 2. 2017/03/16 20:14:16.808| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=1. 2017/03/16 20:14:16.808| |S_RIM7@FORTS_Симулятор|Заявка 71722073 (0x6FABE9) больше не активна. 2017/03/16 20:14:16.808| |S_RIM7@FORTS_Симулятор|Новая Buy сделка 27 по цене 109380 на 2 заявки 71722073. 2017/03/16 20:15:07.679| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x2CE1F40) заявки на Sell с ценой 0 и объемом 2. 2017/03/16 20:15:07.680| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=-1. 2017/03/16 20:15:07.680| |S_RIM7@FORTS_Симулятор|Заявка 71722074 (0x2CE1F40) больше не активна. 2017/03/16 20:15:07.680| |S_RIM7@FORTS_Симулятор|Новая Sell сделка 28 по цене 109380 на 2 заявки 71722074. 2017/03/16 20:15:20.863| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x1500FC8) заявки на Buy с ценой 0 и объемом 2. 2017/03/16 20:15:20.870|Error |S_RIM7@FORTS_Симулятор|Заявка 71722075 (0x1500FC8) не была зарегистрирована по причине 'Коллекция была изменена после создания экземпляра перечислителя.'. 2017/03/16 20:15:20.870| |S_RIM7@FORTS_Симулятор|Заявка 71722075 (0x1500FC8) больше не активна. 2017/03/16 20:15:20.906| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x2CE342) заявки на Buy с ценой 0 и объемом 2. 2017/03/16 20:15:20.994| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=0. 2017/03/16 20:15:20.994| |S_RIM7@FORTS_Симулятор|Заявка 71722076 (0x2CE342) больше не активна. 2017/03/16 20:15:20.994| |S_RIM7@FORTS_Симулятор|Новая Buy сделка 29 по цене 109420 на 1 заявки 71722076. 2017/03/16 20:15:20.994| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x31A0F6C) заявки на Buy с ценой 0 и объемом 1. 2017/03/16 20:15:20.995| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=0. 2017/03/16 20:15:20.995| |S_RIM7@FORTS_Симулятор|Заявка 71722077 (0x31A0F6C) больше не активна. 2017/03/16 20:15:21.041| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x2E71A07) заявки на Buy с ценой 0 и объемом 1. 2017/03/16 20:15:21.041|Error |S_RIM7@FORTS_Симулятор|Заявка 71722078 (0x2E71A07) не была зарегистрирована по причине 'На счету Симулятор недостаточно денег для регистрации заявки 71722078. Необходимо 1006189.99, имеется 999685, заблокировано 992018.30.'. 2017/03/16 20:15:21.041| |S_RIM7@FORTS_Симулятор|Заявка 71722078 (0x2E71A07) больше не активна. 2017/03/16 20:15:21.483| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x1998D3) заявки на Buy с ценой 0 и объемом 1. 2017/03/16 20:15:21.483|Error |S_RIM7@FORTS_Симулятор|Заявка 71722079 (0x1998D3) не была зарегистрирована по причине 'На счету Симулятор недостаточно денег для регистрации заявки 71722079. Необходимо 1006189.99, имеется 999685, заблокировано 992018.30.'. 2017/03/16 20:15:21.483| |S_RIM7@FORTS_Симулятор|Заявка 71722079 (0x1998D3) больше не активна.

Заранее благодарю за помощь.

Support
Support

Нужен код и логи под debug в файле..

Prival
Prival Autor

Код + лог.

Support
Support

Хорошо, передадим разработчикам..

Prival
Prival Autor

Хотелось бы получить информацию, как и что делать (прошло уже больше недели). Сегодня обновилась версия квика, проверил на ней работу робота TestBag04.rar

Все ошибки сохранилось.

  1. Сделки проходят по неверным цена 19:14:18.8260759 Прошла сделка 7 RIM7 по цене 112180, объём 2, направление Buy. 19:14:18.8265779 Заявка Sell RIM7 полностью исполнена Volume=2. Позиция -1 AveragePrice=0 19:14:18.8266919 Прошла сделка 8 RIM7 по цене 112178, объём 1, направление Sell. 19:14:18.8268459 Прошла сделка 9 RIM7 по цене 112177, объём 1, направление Sell.

  2. AveragePrice=0 может я его както не так запрашиваю ?

  3. И снова нехватает денег (( уже на 9-м перевороте. Заявка 69154072 (0xF8B369) не была зарегистрирована по причине 'На счету Симулятор недостаточно денег для регистрации заявки 69154072. Необходимо 1026974.88, имеется 999992, заблокировано 998447.80.'.

Support
Support

Ошибки переданы, когда будут фиксы я не знаю..

Prival
Prival Autor

Вышла новая версия. 4.3.23 К сожалению все ошибки остались (((

19:29:04.1517536 Заявка Buy RIM7 полностью исполнена Volume=1. Позиция 1 AveragePrice=0 19:29:04.1685022 Прошла сделка 1 RIM7 по цене 111122, объём 1, направление Buy.

2017/04/07 19:29:08.871| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0x1E7434C) заявки на Sell с ценой 0 и объемом 2. 2017/04/07 19:29:08.872| |S_RIM7@FORTS_Симулятор|Новая позиция: (S#:RIM7@FORTS, Native:,Type:Future, Симулятор)=1. 2017/04/07 19:29:08.872| |S_RIM7@FORTS_Симулятор|Заявка 69934145 (0x1E7434C) больше не активна. 2017/04/07 19:29:08.969| |S_RIM7@FORTS_Симулятор|Регистрация новой Market (0xDF06CA) заявки на Sell с ценой 0 и объемом 2. 2017/04/07 19:29:08.969|Error |S_RIM7@FORTS_Симулятор|Заявка 69934146 (0xDF06CA) не была зарегистрирована по причине 'На счету Симулятор недостаточно денег для регистрации заявки 69934146. Необходимо 4667460, имеется 1000000, заблокировано 4445200.'. 2017/04/07 19:29:08.969| |S_RIM7@FORTS_Симулятор|Заявка 69934146 (0xDF06CA) больше не активна.

<u>Пожалуйста обратите внимание разработчиков.</u>

  1. RIM7 по цене 111122 такого не может быть, цена должна быть кратна 10
  2. order.GetAveragePrice(Connector) выдает ноль. Может я как то неправильно запрашиваю ? подскажите как правильно узнать среднюю цену позиции
  3. Несколько переворотов и снова нехватает денег (лог выше) .... (((
Support
Support

Сделайте следующую проверку с последней версией: посмотрите добавляются ли сделки в коллекцию strategy.MyTrades

Prival
Prival Autor

Support: Сделайте следующую проверку с последней версией: посмотрите добавляются ли сделки в коллекцию strategy.MyTrades

так я написал, что сделал проверку с новой версия. 4.3.23 Все ошибки сохранились. Про политику работы над ошибками прочитал, это право компании, как хочет так и работает. Меня другое интересует, такое ощущение что никто даже не посмотрел код, не проверил.

Скажите эти ошибки (что описаны выше) у вас воспроизводятся или нет ? Это действительно баг или незнание мной библиотеки ? Ведь от этого ответа зависят мои действия (и ваши тоже)...

Prival
Prival Autor

Support: Сделайте следующую проверку с последней версией: посмотрите добавляются ли сделки в коллекцию strategy.MyTrades

Проверил. Одну ошибку так и не поправили. Версия 4.4.5.3 order .WhenMatched(Connector) .Do(() => { this.AddInfoLog(@"{0} Заявка {2} {3} полностью исполнена Volume={4}. Позиция {1} Price={5} TH={6}", TimeHelper.Now.TimeOfDay, Position, order.Direction, order.Security.Code, order.Volume, order.Price, TraderHelper.GetAveragePrice(order, Connector)); }

в лог выводиться 20:31:30.086| |S_RIH8@FORTS_Симулятор|20:31:30.1103235 Заявка Buy RIH8 полностью исполнена Volume=1. Позиция 1 <u>Price=0 TH=0</u>

Может я что то не так делаю (не понимаю). Мне нужно получить цену по которой прошла сделка. Как её получить ?

Support
Support

См. также политику по ошибкам и исправлениям здесь: http://stocksharp.ru/articles/8204/faq-po-razrabatyvaemym-ficham/

Support
Support

Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Prival
Prival Autor

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

Support
Support

Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

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

Prival
Prival Autor

Support:

Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

Спасибо за вашу информацию. Проверьте, пожалуйста, на последних версиях. 1 ошибка все таки осталась или я неправильно понимаю PnL Вот лог 07:41:13.611| |S_RIM8@FORTS_Симулятор|Стратегия Запущена. [0,-1]. Позиция 0. 07:41:13.611| |S_RIM8@FORTS_Симулятор|07:41:14.6011093 Strategy OnStarted: S_RIM8@FORTS_Симулятор BeginValue=1000000 CurrentValue=1000000 Position=0 10:07:32.771| |S_RIM8@FORTS_Симулятор|=> ENTER SHORT. 10:07:32.771| |S_RIM8@FORTS_Симулятор|Регистрация новой Market (0x2B3FFA1) заявки на Sell с ценой 0 и объемом 1. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Новая позиция: (S#:RIM8@FORTS, Native:,Type:Future, Симулятор)=-1. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Заявка 27662344 (0x2B3FFA1) больше не активна. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Новая Sell сделка 1 по цене 125890 на 1 заявки 27662344. 10:07:32.823| |S_RIM8@FORTS_Симулятор|*** Заявка исполнена полностью Цена заявки =0, Цена сделки=125890 AveragePrice=125890 TP=125790 SL= 125990 *** 10:07:32.823| |S_RIM8@FORTS_Симулятор|Position = -1 Current P/L = 0 10:23:18.514| |S_RIM8@FORTS_Симулятор|<= EXIT SHORT. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Регистрация новой Market (0x1C5627E) заявки на Buy с ценой 0 и объемом 1. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Новая позиция: (S#:RIM8@FORTS, Native:,Type:Future, Симулятор)=0. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Заявка 27662345 (0x1C5627E) больше не активна. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Новая Buy сделка 2 по цене 125720 на 1 заявки 27662345. 10:23:18.514| |S_RIM8@FORTS_Симулятор|*** Заявка исполнена полностью Цена заявки =0, Цена сделки=125720 AveragePrice=125720 TP=125790 SL= 125990 *** 10:23:18.514| |S_RIM8@FORTS_Симулятор|Position = 0 Current P/L = 194,539840

Не могу понять почему PnL= 194,539840 Это сделка фьючерс RIM8 125890-125720 должно быть.... =170

this.AddInfoLog("Position = {0} Current P/L = {1} ", Position, this.PnLManager.PnL);

Вопрос PnL он в пунктах выводиться или в деньгах ? Если в деньгах, то как его привести к пунктам ? Заранее спасибо. Версия 4.4.5.3

Prival
Prival Autor

Support:

Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

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

Проверил. К сожалению режим совсем поломался ((( Quik 7.16.3.14 Версия 4.4.6.1 В режиме RealQuikConnector(); Все работает, все приходит В режиме EmulationQuikConnector() и EmulationQuikConnector2(); событие ValuesChanged срабатывает, но OpenInterest BidsCount ... не приходят ((

Версия 4.4.5.4 В режиме RealQuikConnector(); Все работает, все приходит В режиме EmulationQuikConnector() и EmulationQuikConnector2(); событие ValuesChanged срабатывает, но OpenInterest BidsCount ... не приходят ((

Версия 4.4.5.3 Во всех режимах, все приходит. Получен портфель - Симулятор SBER@TQBR - зарегестрирован, все ок RIM8@FORTS - зарегестрирован, все ок RIM8@FORTS BidsCount=798 RIM8@FORTS OpenInterest=510700

using System;
using System.Collections.Generic;
using System.Diagnostics;
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;
using StockSharp.Quik.Lua;

namespace Test2
{
    public partial class MainWindow : Window
    {
        private Connector _trader;

        public MainWindow()
        {
            InitializeComponent();
        }

        private QuikTrader RealQuikConnector()
        {
            var qtrader = new QuikTrader
            {
                LuaLogin = "quik",
                LuaFixServerAddress = QuikTrader.DefaultLuaAddress,
                LuaPassword = "quik".To<SecureString>()
            };
            return qtrader;
        }

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

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

            return etrader;
        }

        private RealTimeEmulationTrader<IMessageAdapter> EmulationQuikConnector2()
        {
            var quikMd = new LuaFixMarketDataMessageAdapter(new MillisecondIncrementalIdGenerator())
            {
                Login = "quik",
                Password = "quik".To<SecureString>(),
                Address = QuikTrader.DefaultLuaAddress,
                TargetCompId = "StockSharpMD",
                SenderCompId = "quik",
                RequestAllSecurities = true
            };

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

            return etrader;
        }

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


                _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 += Trader_NewTrades;
                //_trader.SecuritiesChanged += Trader_SecuritiesChanged;
                _trader.ValuesChanged += _trader_ValuesChanged;
            }

            _trader.Connect();
        }


        private void _trader_ValuesChanged(Security security, IEnumerable<KeyValuePair<Level1Fields, object>> value,
            DateTimeOffset serverTime, DateTimeOffset localTime)
        {
            if (security == null || value == null) return;
            if (security.Code == "SBER" || security.Code == "RIM8")
                foreach (var keyValuePair in value)
                    if (keyValuePair.Key == Level1Fields.OpenInterest || keyValuePair.Key == Level1Fields.BidsCount)
                        Console.WriteLine(@"{0} {1}={2}", security, keyValuePair.Key, keyValuePair.Value);
        }

        private void Trader_SecuritiesChanged(IEnumerable<Security> securities)
        {
            foreach (var security in securities)
            {
                Console.Write(@"Событие SecuritiesChanged");
                if (security.LastTrade != null)
                    Console.WriteLine(@" Name={0} LastTrade.Price={1} AsksCount={2}", security.Id, security.LastTrade.Price, security.AsksCount);
                else
                    Console.WriteLine(@" LastTrade.Price=null");
            }
        }

        private void Trader_NewTrades(IEnumerable<Trade> trades)
        {
            foreach (var trade in trades) Debug.Print(trade.ToString());
        }
    }
}

Пожалуйста сделайте режим работоспособным. И курсы покупал и платная тех поддержка, а за эти годы так рабочего варианта и не смог получить (увидеть). Обидно очень ....

Mikhail Sukhov
Mikhail Sukhov

Prival: и платная тех поддержка

У вас нет активной подписки на техническую поддержку. По нашей информации она истекла более полу года назад. Наши специалисты не видят ваши сообщения. Приобретите подписку и тогда мы сможем вам помочь - http://stocksharp.ru/support/ Или вы можете найти программиста на S# среди зарегистрированных пользователей и на коммерческой основе помочь вам сделать желаемый результат.

Prival
Prival Autor

Mikhail Sukhov:

Prival: и платная тех поддержка

У вас нет активной подписки на техническую поддержку. По нашей информации она истекла более полу года назад. Наши специалисты не видят ваши сообщения. Приобретите подписку и тогда мы сможем вам помочь - http://stocksharp.ru/support/ Или вы можете найти программиста на S# среди зарегистрированных пользователей и на коммерческой основе помочь вам сделать желаемый результат.

Михаил а как быть с тем фактом, что пока она была (платная тех поддержка). Так и не починили. Не смогли исправить все ошибки ? Мне снова платить и ждать когда заработает ? Первое сообщение 11.02.2017....сейчас 21.04.2018 Какую вы даете гарантию что починят, если я снова заплачу ?

Михаил пожалуйста посмотрите нашими глазами на тех. поддержку. Я готов заплатить снова, но где гарантия что через год мы снова не вернемся к этому вопросу ? Пока была платная тех. поддержка так и не смогли починить... Мне платить и снова ждать, сколько ждать ? Я прошел обучение 29.05.2013 и с тех пор режим RealTimeEmulationTrader так ни разу и не увидел полностью работоспособным. Все время вылазят ошибки, баги. Я их нахожу (баги), показываю и еще должен платить за их исправление ? Михаил нужно уметь держать свое слово. Пожалуйста почините режим. Я за это уже заплатил. Перестаньте вытягивать деньги из ваших клиентов. Михаил 5 лет !!! 5 ЛЕТ ЖДУ...

Mikhail Sukhov
Mikhail Sukhov

Prival: Мне снова платить и ждать когда заработает ?

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

Так же за разработку или экспресс- устранение багов от вас мы никогда не получали платежи. Вы можете написать на info@stocksharp.com если такие платежи действительно когда-либо существовали.

Prival
Prival Autor

Если правильно понимаю вопрос то сделки приходят.

 
......         
Connector.NewMyTrades += Connector_NewMyTrades;
            base.OnStarted();
        }

        private void Connector_NewMyTrades(IEnumerable<MyTrade> trades)
        {
            foreach (var trade in trades)
            {
                this.AddInfoLog(@"{0} Прошла сделка №{5} {4} по цене {1}, объём {2}, направление {3}.",
                    TimeHelper.Now.TimeOfDay, trade.Trade.Price, trade.Trade.Volume, trade.Order.Direction,
                    trade.Trade.Security.Code, trade.Trade.Id);
            }
        }

Лог показывает что сюда сделки приходят 2017/04/11 21:24:54.378| |S_RIM7@FORTS_Симулятор|21:24:54.4203760 Прошла сделка №1 RIM7 по цене 108902, объём 1, направление Buy.

Support
Support

Не правильно... В коллекцию strategy.MyTrades записываются сделки, совершенные стратегией, а средняя цена считается на базе этой коллекции..

Prival
Prival Autor

А вы что не знаете ? Исправили вы это или нет ? Баг был показан в апреле месяце, сейчас конец сентября ... пол года жду.

Prival
Prival Autor

Проверил на версии 4.4.4 - ошибка не исправлена. на 800-м перевороте снова недостаточно денег на счете. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794 зарегистрирована. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794. Исполнение объема 2 по цене 130030. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794 полностью исполнена. 23:31:03.100| |SecurityMarketEmulator|Сделка 798 заявки 84322794 P=130030 V=2. 23:31:03.082| |RealTimeEmulationTrader1|Order changed: 84322794/810 RIH8@FORTS Симулятор Продажа Цена=0 Объем=2 Сост=Done Бал=0 23:31:03.082| |RealTimeEmulationTrader1|RegisterOrder: 0/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=None Бал=0 23:31:03.082| |RealTimeEmulationTrader1|New order: 84322795/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=Pending Бал=2 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795 зарегистрирована. 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795. Исполнение объема 1 по цене 130040. 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795 отменяется, так как является рыночной с неисполненным объемом 1. 23:31:03.101| |SecurityMarketEmulator|Сделка 799 заявки 84322795 P=130040 V=1. 23:31:03.082| |RealTimeEmulationTrader1|Order changed: 84322795/811 RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=Done Бал=1 23:31:03.082| |RealTimeEmulationTrader1|RegisterOrder: 0/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=None Бал=0 23:31:03.082| |RealTimeEmulationTrader1|New order: 84322796/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=Pending Бал=1 23:31:03.102| |SecurityMarketEmulator|Заявка 84322796 не зарегистрирована. Причина 'На счету Симулятор недостаточно денег для регистрации заявки 84322796. Необходимо 1016816.43, имеется 985580, заблокировано 1002079.96.'. 23:31:03.082|Error |RealTimeEmulationTrader`1|OrderRegisterFailed 84322796/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=Failed Бал=1 System.InvalidOperationException: На счету Симулятор недостаточно денег для регистрации заявки 84322796. Необходимо 1016816.43, имеется 985580, заблокировано 1002079.96.

Скоро будет год как жду исправления...

Константин
Константин

Может я что то не так делаю (не понимаю). Мне нужно получить цену по которой прошла сделка. Как её получить ? Вам наверное нужно подписаться на сделки по ордеру чтоб узнать их цену

order.WhenNewTrade

На сколько я понимаю Price = 0 может быть у ордера который исполнен по рынку.

Prival
Prival Autor

Ордер большой объем, и нужно получить среднюю цену когда он весь исполниться. order.WhenNewTrade пробовал, там да, цена приходит this.AddInfoLog(@"WhenNewTrade Цена заявки ={0}, Цена сделки={0} ", trade.Order.Price, trade.Trade.Price);

а вот как её получить в order.WhenMatched никак не пойму. TraderHelper.GetAveragePrice(order, Connector) то что нужно, но он возвращает ноль (((

Константин
Константин

А если так:

                order.WhenNewTrade(Connector).Do((trade) =>
                    {

                                                if (trade.Order.State == OrderStates.Done)
                        {
                            //Заявка исполнена полностью
                            var averagePrice = order.GetAveragePrice(Connector);
                        }
                        else
                        {
                            //Заявка исполнена не полностью
                            return;
                        }

                    })
                    .Apply(this);