Вечер добрый.
Метод Trader.GetPosition возвращает 0.
Протестировал на вложенном примере Sample.
Скриншот прилагаю.
Если нажать кнопку Портфель, то в новом окне позиции появляются. На скриншоте этому факту соответствует переменная _positionsWindow.
А если вызвать в программе метод Trader.GetPosition, то он выдает результат ноль. На скриншоте этому факту соответствует метод Trader.GetPosition(Trader.Portfolios.ElementAtFromEnd(0), Trader.Securities.ElementAtFromEnd(10))
В чем может быть ошибка?
Версия стокшарпа 4.1.4 Квик тестовый.
Комментарии (9)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
А сервер/соединение чей? от какого брокера (который Email высылал ключи) - БКС (bcs.ru)?
На тестовом сервере КВИК, для инструмента с кодом бумаги LKOH код класса QJSIM, а у Вас (судя по скриншоту) код класса EQBR (сдаётся мне это у БКС такой)
Кстати, я вообще не могу соединиться к учебному доступу БКС на выходных и ночью. Вы смогли?
Кроме того, у БКС такая фишка, что на одном из счетов учебного доступа обычно нет денег и выставлять заявки нельзя или на спотовом рынке (акции, со сёта L01-00000F00), или на срочном (фьючерсы (со счета SPBFUT) и перебросить деньги из одного счёта на другой нельзя.
Кстати, получить тестовый доступ КВИК (который, в отличие от БКС, практически круглосуточный)- минутное дело, там Email с ключами высылает бот и не надо днями ждать, как от БКС
А на скриншоте Вы обводите красной линией свойства разных позиций.
Насколько я понимаю, даже, когда соединение устанавливается, то заявки могут не приниматься по одному из типов (площадок) и данные по ним не поступать с сервера. Вот, например, ситуация на тестовом сервере от QUIK на выходных - по акциям заявки принимаются и приходят данные, а по фьючерсам - нет
При этом, я недавно получил доступ, никогда ещё не получал данну по RIZ2, иначе у меня данные по RIZ2 в таблице Инструменты были бы закэшированы (доступны) с предыдущей сессии
Т.е., данные по одним инструментам, по которым получались данные ранее могут быть заполнены (закэшированы из предыдущей, работавшей, сессии ) , а по другим - добавленным, по которым данные не приходили - нет
Экспорт ведь в S# идёт по DDE, т.е. из терминала, а не из сервера
А в документацции он не описан
Что значит ElementAtFromEnd(10) - взять 10й элемент, начиная отсчёт с конца?
Сервер Цериха
С кодами в терминале все нормально.
В Церихе можно и на выходных торговать в тестовом. Кроме срочного рынка.
Это к вопросу не относится. В примере рассматривал только ММВБ.
Да. Все верно. Не совсем точно сформулировал проблему. Trader.GetPosition возвращает не 0, а возвращает объект Position, в котором все позиции нулевые. Тогда как в Квике они не нулевые.
С данными в Квике все нормально. В момент создания скриншота я покупал и продавал LKOH без проблем и данные в таблице поз корректно менялись.
ElementAtFromEnd — это метод класса Ecng.Collections.CollectionHelper Его описания я не знаю, но из названия можно догадаться, что он делает.
Геннадий, большое спасибо за внимание к моему вопросу. Но, к сожалению, к решению мы не приблизились.
По какой-то причине событие BaseTrader.NewPositions срабатывает и вызывает обновление интерфейса в примере Sample. А если обратиться к методу Trader.GetPosition, то он возвращает позицию с нулевыми значениями.
Более подробное описание проблемы.
Скриншот1
Скриншот2
На первом скриншоте показано состояние свойства Positions до того, как я нажал зеленую кнопку рефреш напротив выражения QuikS.GetPosition(QuikS.Portfolios.First(),QuikS.Securities.First()).
На втором скриншоте показан результат вычисления QuikS.GetPosition(QuikS.Portfolios.First(),QuikS.Securities.First()) и состояние свойства Positions после этого вычисления.
Исходя из вот этого участка кода в BaseTrade:
можно сделать вывод, что при обращении к методу QuikS.GetPosition этот метод никогда не найдет уже существующую позицию, так как создается новый объект Tuple. Этого нового объекта Tuple в ключах _positions еще нет.
var key = new Tuple<Portfolio, Security, string>(portfolio, security, depoName);
if (!_positions.TryGetValue(key, out position))
Афтар хотел сказать следующее.
До обращения к методу GetPosition в свойстве Position было четыре объекта.
После того, как обратились к методу GetPosition этот метод не смог найти необходимую позу по переданным параметрам и создал дополнительную позу с нулевыми позициями. И стало их пять
При этом в GetPosition передавался портфель и секьюрити, которые точно есть в в одном из объектов свойства Position
Приношу свои извинения, за потраченное время на этот пост. К вечеру внимательность падает. Вчера не заметил...
В метод GetPosition надо еще передавать третий параметр DepoName. Он оказался не равен пустой строке.
Потому что у Вас DepoName равно пустой строке, а у меня, по какой-то причине, нет.
Может кому пригодится вот такая строка: