Trader.GetPosition не работает.


Trader.GetPosition не работает.
Atom
11/5/2012


Вечер добрый.

Метод Trader.GetPosition возвращает 0.

Протестировал на вложенном примере Sample.

Скриншот прилагаю.

Если нажать кнопку Портфель, то в новом окне позиции появляются.
На скриншоте этому факту соответствует переменная _positionsWindow.

А если вызвать в программе метод Trader.GetPosition, то он выдает результат ноль.
На скриншоте этому факту соответствует метод Trader.GetPosition(Trader.Portfolios.ElementAtFromEnd(0), Trader.Securities.ElementAtFromEnd(10))

В чем может быть ошибка?

скриншот

Версия стокшарпа 4.1.4
Квик тестовый.

Tags:


Thanks:


Геннадий Ванин (Gennady Vanin)

Avatar
Date: 11/5/2012
Reply


Maxim Go to

Квик тестовый

Терминал QUIK - тестовый? его представляют практически все брокеры

А сервер/соединение чей? от какого брокера (который Email высылал ключи) - БКС (bcs.ru)?

На тестовом сервере КВИК, для инструмента с кодом бумаги LKOH код класса QJSIM, а у Вас (судя по скриншоту) код класса EQBR (сдаётся мне это у БКС такой)

Кстати, я вообще не могу соединиться к учебному доступу БКС на выходных и ночью.
Вы смогли?

Кроме того, у БКС такая фишка, что на одном из счетов учебного доступа обычно нет денег и выставлять заявки нельзя или на спотовом рынке (акции, со сёта L01-00000F00), или на срочном (фьючерсы (со счета SPBFUT) и перебросить деньги из одного счёта на другой нельзя.

Кстати, получить тестовый доступ КВИК (который, в отличие от БКС, практически круглосуточный)- минутное дело, там Email с ключами высылает бот и не надо днями ждать, как от БКС

Maxim Go to
Метод Trader.GetPosition возвращает 0

Вообще-то, судя по Вашему скриншоту, он возвращает не ноль а позицию 6014-LKOH@EQBR

А на скриншоте Вы обводите красной линией свойства разных позиций.

Насколько я понимаю, даже, когда соединение устанавливается, то заявки могут не приниматься по одному из типов (площадок) и данные по ним не поступать с сервера.
Вот, например, ситуация на тестовом сервере от QUIK на выходных - по акциям заявки принимаются и приходят данные, а по фьючерсам - нет

При этом, я недавно получил доступ, никогда ещё не получал данну по RIZ2, иначе у меня данные по RIZ2 в таблице Инструменты были бы закэшированы (доступны) с предыдущей сессии

Т.е., данные по одним инструментам, по которым получались данные ранее могут быть заполнены (закэшированы из предыдущей, работавшей, сессии ) , а по другим - добавленным, по которым данные не приходили - нет

Экспорт ведь в S# идёт по DDE, т.е. из терминала, а не из сервера

Данные с сервера приходят по акциям, но не по фьючерсам

Maxim Go to
На скриншоте этому факту соответствует метод Trader.GetPosition(Trader.Portfolios.ElementAtFromEnd(0), Trader.Securities.ElementAtFromEnd(10))

Я в Sample (4.1.5) вообще не нахожу ElementAtFromEnd

А в документацции он не описан

Что значит ElementAtFromEnd(10) - взять 10й элемент, начиная отсчёт с конца?
Thanks:

Maxim

Avatar
Date: 11/6/2012
Reply


Геннадий Ванин (Gennady Vanin) Go to

А сервер/соединение чей?


Сервер Цериха




Геннадий Ванин (Gennady Vanin) Go to

На тестовом сервере КВИК, для инструмента с кодом бумаги LKOH код класса QJSIM, а у Вас (судя по скриншоту) код класса EQBR (сдаётся мне это у БКС такой)


С кодами в терминале все нормально.





Геннадий Ванин (Gennady Vanin) Go to

Кстати, я вообще не могу соединиться к учебному доступу БКС на выходных и ночью.
Вы смогли?


В Церихе можно и на выходных торговать в тестовом. Кроме срочного рынка.





Геннадий Ванин (Gennady Vanin) Go to

Кроме того, у БКС такая фишка, что на одном из счетов учебного доступа обычно нет денег и выставлять заявки нельзя или на спотовом рынке (акции, со сёта L01-00000F00), или на срочном (фьючерсы (со счета SPBFUT) и перебросить деньги из одного счёта на другой нельзя.

Кстати, получить тестовый доступ КВИК (который, в отличие от БКС, практически круглосуточный)- минутное дело, там Email с ключами высылает бот и не надо днями ждать, как от БКС


Это к вопросу не относится. В примере рассматривал только ММВБ.





Геннадий Ванин (Gennady Vanin) Go to

Maxim Go to
Метод Trader.GetPosition возвращает 0

Вообще-то, судя по Вашему скриншоту, он возвращает не ноль а позицию 6014-LKOH@EQBR

А на скриншоте Вы обводите красной линией свойства разных позиций.


Да. Все верно. Не совсем точно сформулировал проблему.
Trader.GetPosition возвращает не 0, а возвращает объект Position, в котором все позиции нулевые.
Тогда как в Квике они не нулевые.





Геннадий Ванин (Gennady Vanin) Go to

Насколько я понимаю, даже, когда соединение устанавливается, то заявки могут не приниматься по одному из типов (площадок) и данные по ним не поступать с сервера.
Вот, например, ситуация на тестовом сервере от QUIK на выходных - по акциям заявки принимаются и приходят данные, а по фьючерсам - нет

При этом, я недавно получил доступ, никогда ещё не получал данну по RIZ2, иначе у меня данные по RIZ2 в таблице Инструменты были бы закэшированы (доступны) с предыдущей сессии

Т.е., данные по одним инструментам, по которым получались данные ранее могут быть заполнены (закэшированы из предыдущей, работавшей, сессии ) , а по другим - добавленным, по которым данные не приходили - нет

Экспорт ведь в S# идёт по DDE, т.е. из терминала, а не из сервера




С данными в Квике все нормально.
В момент создания скриншота я покупал и продавал LKOH без проблем и данные в таблице поз корректно менялись.





Геннадий Ванин (Gennady Vanin) Go to

Maxim Go to
На скриншоте этому факту соответствует метод Trader.GetPosition(Trader.Portfolios.ElementAtFromEnd(0), Trader.Securities.ElementAtFromEnd(10))

Я в Sample (4.1.5) вообще не нахожу ElementAtFromEnd

А в документацции он не описан

Что значит ElementAtFromEnd(10) - взять 10й элемент, начиная отсчёт с конца?



ElementAtFromEnd — это метод класса Ecng.Collections.CollectionHelper
Его описания я не знаю, но из названия можно догадаться, что он делает.





Геннадий, большое спасибо за внимание к моему вопросу.
Но, к сожалению, к решению мы не приблизились.

По какой-то причине событие BaseTrader.NewPositions срабатывает и вызывает обновление интерфейса в примере Sample.
А если обратиться к методу Trader.GetPosition, то он возвращает позицию с нулевыми значениями.

Thanks:

Maxim

Avatar
Date: 11/6/2012
Reply


Более подробное описание проблемы.

Скриншот1

Скриншот2


На первом скриншоте показано состояние свойства Positions до того, как я
нажал зеленую кнопку рефреш напротив выражения QuikS.GetPosition(QuikS.Portfolios.First(),QuikS.Securities.First()).


На втором скриншоте показан результат вычисления QuikS.GetPosition(QuikS.Portfolios.First(),QuikS.Securities.First()) и
состояние свойства Positions после этого вычисления.

Исходя из вот этого участка кода в BaseTrade:

Code

var key = new Tuple<Portfolio, Security, string>(portfolio, security, depoName);

if (!_positions.TryGetValue(key, out position))


можно сделать вывод, что при обращении к методу QuikS.GetPosition этот метод никогда не найдет
уже существующую позицию, так как создается новый объект Tuple.
Этого нового объекта Tuple в ключах _positions еще нет.
Thanks:

Mikhail Sukhov

Avatar
Date: 11/6/2012
Reply


Maxim Go to

Исходя из вот этого участка кода в BaseTrade:

Code

var key = new Tuple<Portfolio, Security, string>(portfolio, security, depoName);

if (!_positions.TryGetValue(key, out position))


можно сделать вывод, что при обращении к методу QuikS.GetPosition этот метод никогда не найдет
уже существующую позицию, так как создается новый объект Tuple.
Этого нового объекта Tuple в ключах _positions еще нет.


Tuple работает на основе внутренних полей... Думаю проблема тут или в передаваемых данных или просто косяк в проге. Хотя, если честно, вообще ничего не понял из картинок. Какой-то дебаг, какие-то поля. Что хотел сказать автор?[huh]
Thanks:

Maxim

Avatar
Date: 11/6/2012
Reply


Mikhail Sukhov Go to
Какой-то дебаг, какие-то поля. Что хотел сказать автор?[huh]


Афтар хотел сказать следующее.

До обращения к методу GetPosition в свойстве Position было четыре объекта.

После того, как обратились к методу GetPosition этот метод не смог найти
необходимую позу по переданным параметрам и создал дополнительную позу
с нулевыми позициями. И стало их пять


При этом в GetPosition передавался портфель и секьюрити, которые точно есть в
в одном из объектов свойства Position
Thanks:

Maxim

Avatar
Date: 11/6/2012
Reply


Приношу свои извинения, за потраченное время на этот пост.
К вечеру внимательность падает. Вчера не заметил...


В метод GetPosition надо еще передавать третий параметр DepoName.
Он оказался не равен пустой строке.
Thanks:

Геннадий Ванин (Gennady Vanin)

Avatar
Date: 11/6/2012
Reply


Maxim Go to
В метод GetPosition надо еще передавать третий параметр DepoName

Почему я не передаю и у меня нет таких проблем?

А я не передаю DepoName в GetPosition!
Thanks:

esper

Avatar
Date: 11/6/2012
Reply


Геннадий Ванин (Gennady Vanin) Go to
Почему я не передаю и у меня нет таких проблем?

DepoName есть только для портфелей по бумагам.
Thanks: Геннадий Ванин (Gennady Vanin)

Maxim

Avatar
Date: 11/6/2012
Reply


Потому что у Вас DepoName равно пустой строке, а у меня, по какой-то причине, нет.

Может кому пригодится вот такая строка:
Code

Quik.GetPosition(Portfolio, Security, (String)Portfolio.ExtensionInfo[DdeEquityPositionColumns.Account]);
Thanks: Геннадий Ванин (Gennady Vanin) Axell


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

loading
clippy