Подскажите, пожалуйста, каким образом при формировании заявки в квик через луа соединение должно формироваться значение поля "Торговый счет"? Я правильно понимаю, что оно берется из свойства OrderRegisterMessage.PortfolioName, которое где-то в недрах закрытой библиотеки StockSharp.QuikLua.dll непосредственно при формировании заявки уже в квике передается в параметр t["ACCOUNT"] ? Или алгоритм формирования значения t["ACCOUNT"] более сложный? Я столкнулся с тем, что у меня в значение Portfolio.Name записывается не торговый счет, а код клиента. Это соответственно при выставлении заявки приводит к появлению ошибки "Указанный счет депо не найден". Конфигурация квика открыта из файла info_lua.wnd (из примеров на GitHub). При выставлении заявки через стандартный пример SampleQuik - получается тот же результат (то есть ошибка). Дополнительно пытался заполнить OrderRegisterMessage.ExtensionInfo[PositionChangeTypes.DepoName], но это значение в результате никуда не передалось.
В результате я сейчас не понимаю, то ли у меня некорректно в Portfolio.Name записывается код клиента (а должен торговый счет, хотя в этом случае было бы непонятно, как разделять портфели с разными кодами клиента, но одним торговым счетом), то ли у меня некорректно этот Portfolio.Name преобразуется в значение t["ACCOUNT"] (сейчас он просто туда передается, но возможно должен как-то автоматически определяться по коду клиента, переданному через OrderRegisterMessage.PortfolioName)?
Я искал по форуму похожие проблемы, но в основном все обсуждения касаются DDE соединения и содержат рекомендации с настройками таблиц квика, либо выставлением/снятием заявки. В моем случае ни то, ни другое не помогло, хотя до конца и непонятно, имеют эти решения отношение к луа соединению или нет.
Kommentare (47)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
А ты уверен, что код клиента нужно передавать? Стандартный пример SampleQuik - работает нормально. То есть, заявки через SampleQuik отправляются без кода клиента. Просто указываешь депошку, код клиента вообще не трогаешь т.е. оставляешь это поле на форме отправки заявки - пустым, и заявки проходят на ура. Плюс почитай по этому поводу тут: http://stocksharp.ru/forum/7012/apdeit-bota-s-api-4315-na-api-43195-problemy-resheniya/ А ещё лучше задай вопрос АРКЕ на их форуме. Я вообще не понимаю зачем нужен код клиента, пусть внесут ясность. Либо надо нырять в регламент биржи и смотреть спецификации заявки на фонде, на память я не помню фигурирует ли там вообще код клиента. Если в официальных документах биржи его нет, то это какие-то внутренние хотелки АРКИ. Зачем нужен этот код - для меня загадка, т.к. у нас на каждый рынок своя отдельная депошка: срочка, фонда, валютный и др. То есть, смысла в коде нет вообще. Смысл бы был, если бы у нас был один счёт на все секции, и по кодам можно было бы как-то разделять, а у нас все иначе, у нас и так всё разделено. Короче, попробуй докапаться до АРКИ, ну или покапайся в регламенте биржи, но там написано всё сложным юридическим языком - там без литра вискаря мозг можно поламать ))).
У меня без кода клиента в SampleQuik возникает ошибка, что он не заполнен. Но дойдет до него только в том случае, если вручную заменить значение Portfolio.Name (то есть вместо автоматически полученного из терминала кода клиента подставить туда торговый счет). Если же эту замену не делать, то возникает ошибка, что Указанный счет депо не найден. Я прочитал по ссылке. В моем случае приходит 6 портфелей. Они все соответствуют кодам клиента, их действительно 6 разных. А вот торговых счетов всего 4, но они в данных, которые доходят до стокшарпа, вообще никак не фигурируют. Я потому и задаю вопрос, каким образом должно формироваться значение этого поля при выставлении заявки, т.к. непонятно как от кодов клиента, которые переданы в портфели стокшарпа перейти к торговым счетам? Если честно, я не вижу смысла выяснять эти вопросы ни на форуме арки, ни рыться в доках биржи. Если это поле есть, то независимо от того, кому оно нужно (бирже, брокеру, арке) мы все равно с этим ничего не сделаем и к этому придется приспосабливаться на стороне стокшарпа (ну или обертки над стокшарпом).
Я не догоняю, чего ты там вручную в коде меняешь. Ты пока не код смотри, а форму отправки заявки, т.е. красочное WPF окно. Запусти SampleQuik и попробуй отправить заявку посредством спец-окна. Ничего там менять не нужно, не нужно лезти в код.
Если ты уж так хочешь покапаться в коде, то вот тебе пример кнопки "Лонг по рынку, для акций". Код рабочий. Найди в этом коде свойство - код клиента. Его там нет ))). Я же тебе говорю, ты вначале выясни нужен ли код вообще. Мне он не нужен, всё работает без него.
Да, проблема на спотовом рынке. На срочном рынке код клиента совпадает с торговым счетом и проблемы не возникает. Я еще в первом посте написал, что я искал описание этой проблемы на форуме. Но обсуждения касаются DDE соединения и проблемы не решают. Поэтому если "знающие" люди действительно напишут на форуме решение этой проблемы, я буду им благодарен. Спасибо за помощь.
Ну или придётся ждать нового релиза API, возможно в нём к коннектору прикрутят отдельное свойство-коллекцию, специально под коды клиентов. Обзовут её как-нибудь, типа СlientCods и будет счастие ))). А то сейчас коды попадают в коллекцию портфолио, что не есть гуд. Короче, нужна сепарация кодов и портфелей, а для этого нужно перепиливать коннектор.
Я прочитал топик по ссылке. Не думаю, что текущая проблема из-за того, что Открытие каким-то образом изменила стандартную версию терминала. Поэтому буду ждать какой-нибудь реакции разработчиков и исходя из их ответа делать выводы, как выходить из этой ситуации. Создать свой портфель - да, это одно из возможных решений в случае, если окажется, что торговый счет может заполняться только из свойства Portfolio.Name.
Я ж говорю создай портфель сам. Там не так уж и много свойств у данного объекта. Все их можно заполнить вручную за 5 -10 минут. Но я думаю нужно всего одно, именно то которое ты и упомянул: Name. У меня демо-квик работает с ним одним. Если не заробит так, то заполнишь остальные свойства. Хотя можешь ничего не делать и ждать годами ответа от разработчиков ))). Успехов с ожиданием )))
Напишите чуть подробнее о своей ошибке. Пока не совсем понятно, чем не подходит стандартное решение с передачей кода клиента в заявке.
Да версия АПИ важна.
Slepoy, кого какой хитростью брать, сколько мне ждать ответа и какого чуда я жду, позволь, пожалуйста, я решу без твоих советов. Спасибо за помощь и понимание.
Михаил, версия API 4.3.19.5 (вернее даже чуть новее - коммит 858f2f95 от 18.12.2016). Версия квика 7.5.0.72. Насколько я понимаю, она ни такая уж старая, учитывая, что последняя - 7.6. Или правильная работа зависит от версии сервера квика? Ситуация следующая: у меня у брокера Открытие открыто 2 договора. В квике эти договоры на спотовом рынке различаются кодом клиента. Торговый счет (счет депо) у них - один и не совпадает ни с одним из этих кодов клиента. Если нужно, могу прислать скриншот таблицы лимитов, где эта связь отражена. В стокшарп при соединении автоматически создаются 2 экземпляра класса Portfolio. В свойство Portfolio.Name переданы именно коды клиента. Номер торгового счета при этом вообще нигде не фигурирует. В результате при попытке отправить заявку в торговый счет передается значение из свойства Portfolio.Name, где лежит код клиента, а не торговый счет. Это справедливо приводит к ошибке, что торговый счет не найден. В связи с описанным у меня появилось несколько вопросов:
И еще Михаил, чтобы не было недопонимания как с Slepoy, у меня нет проблемы придумать обходной путь, чтобы решить проблему в случае, если Стокшарп изначально не поддерживает эту ситуацию. Но я хочу разобраться, как это должно работать с точки зрения архитектуры Стокшарпа.
Код клиента и портфель указываются в заявке. Это подход Стокшарпа (не уверен, что понимаю что вы подразумеваете под словом "архитектура" в данном контексте).
Вы смотрели лог луа на наличие ошибок?
С передачей кода клиента все понятно. С ним никаких вопросов нет. Свойство Portfolio.Name передается в свойство Account заявки, которая формируется в Quik с помощью луа. Я правильно понимаю? Никакого дополнительного возможного источника формирования значения свойства Account (или, например, алгоритма, который по данным квика должен на основе кода клиента подменить его на торговый счет) нет? Для чего в OrderRegisterMessage.ExtensionInfo записывается значение с ключом PositionChangeTypes.DepoName? Лог луа я смотрел. Именно в нем я вижу, что в поле t["ACCOUNT"] формируемой в квике заявки попадает не торговый счет, а код клиента. Именно от сюда и появляются те вопросы, которые я написал в предыдущем посте. Никаких ошибок в логе луа нет.
Да, пришлите в личку лог луа под дебагом (нужно включить в скрипте). Пока сложно понять, что не так у вас.
Да, пришлите в личку лог луа под дебагом (нужно включить в скрипте). Пока сложно понять, что не так у вас.
Михаил, скажите, пожалуйста, по данной проблеме у вас получилось что-нибудь посмотреть?
Добрый день,
Я видимо пропустил момент. Вы лог прислали в личку, ок. А вопрос то был какой?
Предлагаю уже переходить на новый формат тех поддержки http://stocksharp.ru/articles/7809/support-20/ На почту саппорту приходят нотификации только от тех, у кого сообщения зеленым помечаются в ленте.
Михаил, проблемы две. Мне сейчас приходят из квика портфели, у которых свойство Portfolio.Name равно коду клиента, причем их несколько. Основные свойства в них заполнены. Дополнительно приходит портфель со свойством Portfolio.Name, равным торговому счету в квике. Однако остальные свойства в нем не заполнены. На скриншоте, который я Вам выслал вместе с логами, портфели 124791 и 124791I соответствуют кодам клиента в квике. Портфель L01-00000F00 соответствует торговому счету в квике. Но по нему не заполнены никакие другие свойства, кроме Name. В результате, если в заявке указывать портфель 124791, то появляется сообщение об ошибке, что торговый счет не найден (видно по логу луа, который я вам выслал). Если же в заявке указывать портфель L01-00000F00, то заявка выставляется нормально, но проблема в том, что по этому портфелю не приходит никаких обновлений по суммам. В итоге непонятно каков подход стокшарпа: сколько портфелей должно быть создано на основе данных квика и какие? Один L01-00000F00 или два 124791 и 124791I (портфели на остальных площадках я пока опускаю)?
Кроме того, в свойства портфелей 124791 и 124791I сейчас передается не текущий остаток денежных средств, а только текущая оценка стоимости ценных бумаг в этом портфеле. Это корректно? Разве не должны отображаться остатки именно денежных средств?
Slepoy, ваши последние чрезвычайно информативные комментарии никоим образом не способствуют решению проблемы. Не думаю, что кому-то на форуме интересны ваши религиозные предпочтения.
Сегодня день горячих обсуждений. Все немного на повышенных тонах.
Помните - серые клетки не восстанавливаются, а в интернете всегда кто-то будет неправ.
Михаил, у вас не получилось посмотреть описанные проблемы?
Несколько потерял нить разговора. Изначально вопрос был как отправлять заявку с кодом клиента. Я дал ответ. Как получить все коды и портфели вроде бы тоже ясно. В чем сейчас вопрос состоит?
Михаил, давайте начнем с малого. Пожалуйста, ответьте на 2 вопроса:
В Квике все достаточно сложно. Там нет четкого понятия счет и с данными, ассоциированными со счетом. Поэтому транслируется все, что можно. Приводит это к тому, что приводит.
Честно говоря, не очень понимаю смысла в этой переписке. Вроде проблема то решилась.
Михаил, никакая проблема не решилась. То, что заявку можно выставить наделав кучу костылей не значит, что проблема решена. Я же не просто так задаю эти вопросы. Эти нерешенные проблемы не позволяют реализовывать конкретные задачи. Например, каким образом я в стратегии могу использовать данные о том, сколько денег у меня на счёте? Причём учитывая то, что нужны эти данные и ведутся в квике они как раз в разрезе кода клиента.
Приведите код как вы регистрируете заявку.
Для того, чтобы это сработало, свойство Strategy.Portfolio приходится заполнять портфелем, у которого свойство Name равно торговому счету, что на мой взгляд - неправильно, т.к. реальное разделение лимитов на ФР в квике происходит по коду клиента. Плюс в PositionManager позиции оказываются привязанными к портфелю с названием, соответствующим торговому счету, что приводит к тому, что невозможно понять по какому коду клиента открыта эта позиция. Но все это пол беды. Самая большая проблема, что ни по портфелю, созданному по торговому счету, ни по портфелю, созданному на основе кода клиента не приходят текущие остатки денежных средств.
Это правильный код регистрации заявки.
Михаил, как понимание того, что этот код правильный, приближает к решению описанных мною проблем?
Вы написали, что вас смущает код регистрации заявки из-за костылей. Я ответил вам, что код вполне нормальный и правильно написан. Костылей не увидел. Если вопрос не в этом, то давайте дальше расследовать причину.
Евгений,
Support,
Михаил, прочитайте, пожалуйста, мое пояснение под эти кодом. Все костыли и проблемы приведены в этом пояснении.
PositionManager расчитывает позу самостоятельно, без привязки в какому либо счету. Начало идет от нуля. И по мере торговли стратегии позиция изменяется. Это сделано для того, чтобы несколько стратегий могли торговать на 1 счету без конфликта друг с другом.
Я не понимаю о каких костылях идет речь.
Если у Вас нет субсчетов, то код клиента в заявке можно не использовать...
Если бы его можно было не использовать, я бы его не использовал и ничего бы у вас не спрашивал. В данном случае без указания кода клиента заявка не выставляется даже напрямую в квике. По поводу субсчетов - возможно технически эти два договора и оформлены в виде субсчетов, но я специально их создания не запрашивал.
Блин, а я так надеялся, читая ветку, что в итоге будет элегантное решение)). Тоже Квик, Тоже Открытие, пробую через не модифицированный свежий Shell. Если в настройки стратегии вбиваю код клиента ругается что нет такого счета, если вбиваю счет - ругается что не указан код клиента. Я так понимаю, нет решения без того чтобы хардкодить нужные поля?
В общем надо будет как-то добавить поле для ввода и кода клиента и портфеля или типа того. Ну ладно, на срочном рынке, действительно, у Открытия нет этой проблемы, там у меня все получилось. Если есть простое элегантное решение для описанного контекста (секция фондовый рынок - Открытие - Shell) - буду благодарен, если нет - думаю, сам что-нибудь придумаю.