недостаточно денег для регистрации заявки.... Подскажите что может быть не так
- Создал трейдера и портфель
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.'.
Comentarios (42)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Проверим..
Вот так попробуйте. _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) то что нужно, но он возвращает ноль (((
А если так: