RealTimeEmulationTrader

RealTimeEmulationTrader
Atom
2/11/2017
Prival


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

  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.'.




Thanks:


< 1 2 3 4  > >>
Support

Avatar
Date: 2/22/2017
Reply


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

RealTimeEmulation.7z 107 KB (613)
Thanks:

Prival

Avatar
Date: 2/22/2017
Reply


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

Thanks:

Support

Avatar
Date: 2/27/2017
Reply


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

Thanks:

Prival

Avatar
Date: 2/28/2017
Reply


Спасибо всем кто помогает. С вашими подсказками многое получилось. Файл прилагаю Осталось 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;

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

Thanks:

Support

Avatar
Date: 2/28/2017
Reply


Вот так можно данные в 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. в этой таблице должно быть добавлено поле Открытые позиции..

Thanks:

Support

Avatar
Date: 2/28/2017
Reply


.

Thanks:

Prival

Avatar
Date: 3/16/2017
Reply


Натолкнулся еще на 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) больше не активна.

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

Thanks:

Support

Avatar
Date: 3/17/2017
Reply


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

Thanks:

Prival

Avatar
Date: 3/17/2017
Reply


Код + лог.

TestBag04.rar 13 MB (574) log.log 217 KB (574)
Thanks:

Support

Avatar
Date: 3/20/2017
Reply


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

Thanks:
< 1 2 3 4  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy