недостаточно денег для регистрации заявки.... Подскажите что может быть не так
- Создал трейдера и портфель
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.'.
Комментарии (42)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Проверим..
Вот так попробуйте. _portfolio = new Portfolio { Name = "test", BeginValue = 1000000 }; _connector = new RealTimeEmulationTrader(quikMd, _portfolio);
Спасибо помогло. Но не до конца. Заявка отправляется, но не появляется позиций. Все время висит статус -> Регистрация https://yadi.sk/i/njAg6-vh3EAwKs Пробовал смотреть примеры, но к сожалению из примера SampleRealTimeEmulation убран вариант подключения к квику. Может у когото есть простой пример где все работает ? Типа нажали кнопу....появилась позиция по фьючерсу. Заранее Спасибо.
Скорее всего это баг.
Написал на githabe. Приложил полный код. https://github.com/StockSharp/StockSharp/issues/291 Прикладываю его сюда. Мне кажется это я что то не так делаю, т.к. учусь (разбираюсь с библиотекой). Буду исренне удивлен если это действительно баг, т.к. мне кажется эта функция должна быть очень востребована, А пишу про неё только я. Если не трудно подтвердите что у Вас тоже позиция равна 0. Заранее благодарю
На ГИте Михаил писав Вам, чтобы проверили на последней версии... Проверяли?
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() нужно на первое место поставить..
Вот этот пример коннектора попробуйте.
Вот так измените: _connector.NewPortfolios += portfolios => { portfolios.ForEach(portfolio => { Console.WriteLine("Получен портфель: {0}", portfolio.Name); _connector.RegisterPortfolio(portfolio); _portfolio = portfolio; }); };
.
Спасибо всем кто помогает. С вашими подсказками многое получилось. Файл прилагаю Осталось 2 вопроса (проблемы)
Заранее благодарю за помощь (подсказки)
Вот так можно данные в 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. в этой таблице должно быть добавлено поле Открытые позиции..
Натолкнулся еще на 3 неточности (проблемы). Подключаюсь к реальному счету в режиме Симуляции.
Окно вывода 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.
20:00:01.9982056 Заявка Sell RIM7 полностью исполнена Volume=1. Позиция -1 AveragePrice=0
Код для проверки ... var order = this.SellAtMarket(volume); ...
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) больше не активна.
Заранее благодарю за помощь.
Нужен код и логи под debug в файле..
Код + лог.
Хорошо, передадим разработчикам..
Хотелось бы получить информацию, как и что делать (прошло уже больше недели). Сегодня обновилась версия квика, проверил на ней работу робота TestBag04.rar
Все ошибки сохранилось.
Сделки проходят по неверным цена 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.
AveragePrice=0 может я его както не так запрашиваю ?
И снова нехватает денег (( уже на 9-м перевороте. Заявка 69154072 (0xF8B369) не была зарегистрирована по причине 'На счету Симулятор недостаточно денег для регистрации заявки 69154072. Необходимо 1026974.88, имеется 999992, заблокировано 998447.80.'.
Ошибки переданы, когда будут фиксы я не знаю..
Вышла новая версия. 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>
Сделайте следующую проверку с последней версией: посмотрите добавляются ли сделки в коллекцию strategy.MyTrades
так я написал, что сделал проверку с новой версия. 4.3.23 Все ошибки сохранились. Про политику работы над ошибками прочитал, это право компании, как хочет так и работает. Меня другое интересует, такое ощущение что никто даже не посмотрел код, не проверил.
Скажите эти ошибки (что описаны выше) у вас воспроизводятся или нет ? Это действительно баг или незнание мной библиотеки ? Ведь от этого ответа зависят мои действия (и ваши тоже)...
Проверил. Одну ошибку так и не поправили. Версия 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>
Может я что то не так делаю (не понимаю). Мне нужно получить цену по которой прошла сделка. Как её получить ?
См. также политику по ошибкам и исправлениям здесь: http://stocksharp.ru/articles/8204/faq-po-razrabatyvaemym-ficham/
Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?
Скажите описанные баги в этой ветке уже поправлены ?
Спасибо за вашу информацию. Проверьте, пожалуйста, на последних версиях.
Не могу понять почему PnL= 194,539840 Это сделка фьючерс RIM8 125890-125720 должно быть.... =170
this.AddInfoLog("Position = {0} Current P/L = {1} ", Position, this.PnLManager.PnL);
Вопрос PnL он в пунктах выводиться или в деньгах ? Если в деньгах, то как его привести к пунктам ? Заранее спасибо. Версия 4.4.5.3
Проверил. К сожалению режим совсем поломался ((( 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
Пожалуйста сделайте режим работоспособным. И курсы покупал и платная тех поддержка, а за эти годы так рабочего варианта и не смог получить (увидеть). Обидно очень ....
У вас нет активной подписки на техническую поддержку. По нашей информации она истекла более полу года назад. Наши специалисты не видят ваши сообщения. Приобретите подписку и тогда мы сможем вам помочь - http://stocksharp.ru/support/ Или вы можете найти программиста на S# среди зарегистрированных пользователей и на коммерческой основе помочь вам сделать желаемый результат.
Михаил а как быть с тем фактом, что пока она была (платная тех поддержка). Так и не починили. Не смогли исправить все ошибки ? Мне снова платить и ждать когда заработает ? Первое сообщение 11.02.2017....сейчас 21.04.2018 Какую вы даете гарантию что починят, если я снова заплачу ?
Михаил пожалуйста посмотрите нашими глазами на тех. поддержку. Я готов заплатить снова, но где гарантия что через год мы снова не вернемся к этому вопросу ? Пока была платная тех. поддержка так и не смогли починить... Мне платить и снова ждать, сколько ждать ? Я прошел обучение 29.05.2013 и с тех пор режим RealTimeEmulationTrader так ни разу и не увидел полностью работоспособным. Все время вылазят ошибки, баги. Я их нахожу (баги), показываю и еще должен платить за их исправление ? Михаил нужно уметь держать свое слово. Пожалуйста почините режим. Я за это уже заплатил. Перестаньте вытягивать деньги из ваших клиентов. Михаил 5 лет !!! 5 ЛЕТ ЖДУ...
Возможно у нас не полная информация, и вы платили с другой учетной записи. Но за техничесную поддержку у вас нет ни одного платежа. Предыдущий раз вам была предоставлена подписка на 1 год в рамках программы лояльности. Это был бонус, а не обязательное условие с нашей стороны.
Так же за разработку или экспресс- устранение багов от вас мы никогда не получали платежи. Вы можете написать на info@stocksharp.com если такие платежи действительно когда-либо существовали.
Если правильно понимаю вопрос то сделки приходят.
Лог показывает что сюда сделки приходят 2017/04/11 21:24:54.378| |S_RIM7@FORTS_Симулятор|21:24:54.4203760 Прошла сделка №1 RIM7 по цене 108902, объём 1, направление Buy.
Не правильно... В коллекцию strategy.MyTrades записываются сделки, совершенные стратегией, а средняя цена считается на базе этой коллекции..
А вы что не знаете ? Исправили вы это или нет ? Баг был показан в апреле месяце, сейчас конец сентября ... пол года жду.
Проверил на версии 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| |RealTimeEmulationTrader
1|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.Скоро будет год как жду исправления...
На сколько я понимаю Price = 0 может быть у ордера который исполнен по рынку.
Ордер большой объем, и нужно получить среднюю цену когда он весь исполниться. order.WhenNewTrade пробовал, там да, цена приходит this.AddInfoLog(@"WhenNewTrade Цена заявки ={0}, Цена сделки={0} ", trade.Order.Price, trade.Trade.Price);
а вот как её получить в order.WhenMatched никак не пойму. TraderHelper.GetAveragePrice(order, Connector) то что нужно, но он возвращает ноль (((
А если так: