Trader.GetPosition не работает.
Atom Ответить
05.11.2012


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

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

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

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

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

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

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

скриншот

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

Теги:


Спасибо:




9 Ответов
Геннадий Ванин (Gennady Vanin)

Фотография
Дата: 05.11.2012
Ответить


Maxim Перейти

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

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

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

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

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

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

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

Maxim Перейти
Метод Trader.GetPosition возвращает 0

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

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

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

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

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

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

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

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

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

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

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

Maxim

Фотография
Дата: 06.11.2012
Ответить


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

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


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




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

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


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





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

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


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





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

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

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


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





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

Maxim Перейти
Метод Trader.GetPosition возвращает 0

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

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


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





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

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

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

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

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




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





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

Maxim Перейти
На скриншоте этому факту соответствует метод 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, то он возвращает позицию с нулевыми значениями.

Автор топика
Спасибо:

Maxim

Фотография
Дата: 06.11.2012
Ответить


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

Скриншот1

Скриншот2


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


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

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

Код

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

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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.11.2012
Ответить


Maxim Перейти

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

Код

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

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


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


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

Maxim

Фотография
Дата: 06.11.2012
Ответить


Mikhail Sukhov Перейти
Какой-то дебаг, какие-то поля. Что хотел сказать автор?Huh


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

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

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


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

Maxim

Фотография
Дата: 06.11.2012
Ответить


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


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

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

Фотография
Дата: 06.11.2012
Ответить


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

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

А я не передаю DepoName в GetPosition!
Спасибо:

esper

Фотография
Программист
Дата: 06.11.2012
Ответить


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

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

Maxim

Фотография
Дата: 06.11.2012
Ответить


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

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

Quik.GetPosition(Portfolio, Security, (String)Portfolio.ExtensionInfo[DdeEquityPositionColumns.Account]);
Автор топика
Спасибо: Геннадий Ванин (Gennady Vanin) Axell


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy