[BUG] Функция getParamEx2 не возвращает имеющийся параметр, напр TRADE_DATE_CODE или SECTYPESTATIC
Пользователь
Сообщений: Регистрация: 14.02.2015
06.03.2020 06:14:05
1. Ошибка: - Версия 8.4.1.6 (вообще любая) - Выключить "Умный" заказ параметров, отключить заказ всех параметров (все галки убраны) - Перезаказать данные текущей сессии - Открыть таблицу Текущих торгов - Видим большинство параметров пустые, но некоторые есть (видимо статичные) - Например "Дата торгов" (TRADE_DATE_CODE) и она правильная (еще тип инструмента и еще несколько) - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "TRADE_DATE_CODE") или getParamEx, не важно - В ответ - Пусто - Параметр как бы есть и как бы его нет.
Любопытно, что параметр "Дата торгов" вообще отсутствует в списке параметров для заказа, т.е. заказать его явно как бы и нельзя. Но! Если включить в настройках заказ хотя бы одного любого другого параметра, то и "TRADE_DATE_CODE" начнет нормально возвращаться через getParamEx2. Аналогично SECTYPESTATIC будет нормально читаться только если включить заказ любого другого параметра, не включая даже при этом заказ параметра "Тип инструмента". Признаете вышеуказанное поведение ошибочным?
2. Вообще, что за такие static параметры? Может есть смысл выдавать их в составе getSecurityInfo()?
3. SECTYPESTATIC, SECSUBTYPESTATIC (и т.п.) - строковые, и они как бы есть всегда. Каким образом они определяется? Ведь не строкой же с сервера приходят? Значит есть исходные кодовые поля? Как их получить?
Пользователь
Сообщений: Регистрация: 23.01.2015
06.03.2020 10:36:29
Цитата
Latrop написал: - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "TRADE_DATE_CODE") или getParamEx, не важно
Дата торгов, это не параметр инструмента, а параметр сервера и получить его можно в getInfoParam("TRADEDATE")
Цитата
Latrop написал: Признаете вышеуказанное поведение ошибочным?
Нет.
Цитата
Latrop написал: 2. Вообще, что за такие static параметры? Может есть смысл выдавать их в составе getSecurityInfo()?
Статичные параметры инструментов и так передаются в getSecurityInfo
Цитата
Latrop написал: 3. SECTYPESTATIC, SECSUBTYPESTATIC (и т.п.) - строковые, и они как бы есть всегда. Каким образом они определяется? Ведь не строкой же с сервера приходят? Значит есть исходные кодовые поля? Как их получить?
Тип инстр-та и Подтип инстр-та формируются на основе данных поступающих с биржи. В иных случаях определяются сервером. Тип инструмента. Возможные значения:
Для других значений SecType подтип не используется и всегда равен 0
Пользователь
Сообщений: Регистрация: 14.02.2015
06.03.2020 21:44:23
Цитата
Sergey Gorokhov написал: Дата торгов, это не параметр инструмента, а параметр сервера и получить его можно в getInfoParam("TRADEDATE")
Спасибо, за просвещение, вопрос был в другом. Код: getParamEx2(marketCode, secCode, "TRADE_DATE_CODE") - возвращает дату торгов в виде параметра конкретного инструмента. Обычно это работает, и там возвращается дата в виде числа, чтоб понятнее было. Проблема в том, что не всегда.
Перефразирую проблему, раз есть непонимание.
Ошибка: - Версия 8.4.1.6 (вообще любая) - Выключить "Умный" заказ параметров, отключить заказ всех параметров (все галки убраны) - Перезаказать данные текущей сессии - Открыть таблицу Текущих торгов, добавить любые инструменты - Видим большинство параметров пустые (это норм, раз они не заказаны), но некоторые параметры есть (видимо статичные) - Например "Тип инструмента" (SECTYPESTATIC) и он выводится (напр выдает: "Фьючерсы"/"Опционы"/"Ценные бумаги" и т.п.) - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "SECTYPESTATIC") , где marketCode, secCode соотв код класса и код инструмента, любого - В ответ - Пусто - Параметр в таблице есть, а через lua-код его нет. Признаете вышеуказанное поведение ошибочным?
Цитата
Sergey Gorokhov написал: Тип инстр-та и Подтип инстр-та формируются на основе данных поступающих с биржи.В иных случаях определяются сервером.Тип инструмента. Возможные значения: «1» – Ценная бумага; «2» – Облигация; «3» – Фьючерс; ...
Спасибо, вопрос был другой: SECTYPESTATIC, SECSUBTYPESTATIC (и т.п.) - строковые, и они как бы есть всегда. Каким образом они определяется? Ведь не строкой же с сервера приходят? Значит есть исходные кодовые поля? Как их получить? Как получить эти значения в виде кодов (1,2,3...) в lua-скрипте?
Выделил жирным для лучшего акцента.
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2020 07:03:34
Цитата
Latrop написал: Код: getParamEx2(marketCode, secCode, "TRADE_DATE_CODE") - возвращает дату торгов в виде параметра конкретного инструмента.
TRADE_DATE_CODE - возвращает дату торговой сессии сервера QUIK, а не инструмента Для ее получения, кроме getInfoParam("TRADEDATE"), есть еще функция getTradeDate ()
Если так сделать, то Вы не сможете открыть таблицу текущих торгов, т.к. не будет списка инструментов.
Цитата
Latrop написал: - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "SECTYPESTATIC") , где marketCode, secCode соотв код класса и код инструмента, любого
Функция getParamEx2 возвращает параметры предварительно заказанные с помощью функции ParamRequest. А вот getParamEx не требует такого заказа.
Цитата
Latrop написал: Признаете вышеуказанное поведение ошибочным?
Нет.
Цитата
Latrop написал: Как получить эти значения в виде кодов (1,2,3...) в lua-скрипте?
К сожалению, такой возможности не предусмотрено. Можем предложить зарегистрировать пожелание на добавление функционала.
Выделил жирным для лучшего акцента.
Пользователь
Сообщений: Регистрация: 14.02.2015
10.03.2020 23:46:46
Цитата
Sergey Gorokhov написал: Если так сделать, то Вы не сможете открыть таблицу текущих торгов, т.к. не будет списка инструментов.
Таблица уже открыта. Просто попытался описать кейс с нуля, не учел всех "умностей" терминала.
Скорректировал описание (могли бы и сами догадаться):
Ошибка: - Версия 8.4.1.6 (вообще любая) - Открыть таблицу Текущих торгов, добавить любые инструменты - Выключить "Умный" заказ параметров, отключить заказ всех параметров (все галки убраны) - Перезаказать данные текущей сессии - Видим большинство параметров пустые (это норм, раз они не заказаны), но некоторые параметры есть (видимо статичные) - Например "Тип инструмента" (SECTYPESTATIC) и он выводится (напр выдает: "Фьючерсы"/"Опционы"/"Ценные бумаги" и т.п.) - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "SECTYPESTATIC") , где marketCode, secCode соотв код класса и код инструмента, любого - В ответ - Пусто - Параметр в таблице есть, а через lua-код его нет.
Признаете вышеуказанное поведение ошибочным? (дубль 3)
Пользователь
Сообщений: Регистрация: 21.08.2015
11.03.2020 00:43:31
Вообще-то я тоже не признал бы такое поведение ошибочным с точки зрения луа: бумага не заказана, заказ запрещен фильтром, луа тыкается в строку, строки нет, заказывать нельзя, ок, держите нил. Логично. С точки зрения видимой таблицы разве что, да и то скорей "особенность поведения", это же вью, а не модель. Вот что луа часто от "модели" уклоняется в угоду то ли "упрощению", то ли сокрытию внутренней кухни, это вот хуже ящитаю.
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 01:56:50
Цитата
Anton написал: Вообще-то я тоже не признал бы такое поведение ошибочным с точки зрения луа: бумага не заказана, заказ запрещен фильтром, луа тыкается в строку, строки нет, заказывать нельзя, ок, держите нил. Логично. С точки зрения видимой таблицы разве что, да и то скорей "особенность поведения", это же вью, а не модель. Вот что луа часто от "модели" уклоняется в угоду то ли "упрощению", то ли сокрытию внутренней кухни, это вот хуже ящитаю.
В видимой таблице значит данные инструментов берутся из локального кэша справочников. В луа эти инструменты из кэша все доступны в таблице securities, а вот их закэшированные параметры уже нет. Как вообще корректно определить, что заказ инструмент или нет?
Цитата
Sergey Gorokhov написал: Функция getParamEx2 возвращает параметры предварительно заказанные с помощью функции ParamRequest.А вот getParamEx не требует такого заказа.
Вообще без разницы, какую функцию тут использовать.
Проблема в общем понятна, что это не ошибка функции, а ошибка архитектуры, вопрос можно снять :)
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2020 05:42:13
Цитата
Latrop написал: Как вообще корректно определить, что заказ инструмент или нет?
Зачем? Просто закажите его когда он Вам понадобится и все. Повторного заказа ранее заказанных параметров не будет (в принципе нет такого понятия)
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 07:00:31
Каким образом, используя явно getParamEx(2) и ParamRequest, узнать в скрипте о появлении нового инструмента?
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2020 07:16:28
Цитата
Latrop написал: Каким образом, используя явно getParamEx(2) и ParamRequest, узнать в скрипте о появлении нового инструмента?
Явно никак, просто биржа не сообщает о том новый это инструмент или нет.
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 07:37:58
Переформулирую вопрос:
Если явно заказаны только конкретные инструменты (т.е. задан фильтр по инструментам), то каким образом можно узнать, какие есть еще активные инструменты в текущей сессии для заказа данных?
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 07:50:11
Еще вопрос:
Если заказать ParamRequest(class1, sec1, par1) и ParamRequest(class1, sec2, par2)
Т.е. для разных инструментов одного и того же класса будут заказаны разные параметры. То фактически терминал что сделает? Будет неявно заказывать оба параметра для обоих инструментов, или он умеет заказывать такие "частные" параметры в разрезе инструментов? Просто такое через диалог заказа параметров настроить невозможно - понять как устроен заказ данных.
Если явно заказаны только конкретные инструменты (т.е. задан фильтр по инструментам), то каким образом можно узнать, какие есть еще активные инструменты в текущей сессии для заказа данных?
Есть функция getClassSecurities которая вернет список доступных инструментов. что такое "активные" инструменты? Те что торгуются? Если так то надо заказать какой-нибудь торговый параметр, например цену последней сделки, или еще что-нибудь похожее и проверить.
Цитата
Latrop написал: Будет неявно заказывать оба параметра для обоих инструментов, или он умеет заказывать такие "частные" параметры в разрезе инструментов?
умеет заказывать такие "частные" параметры в разрезе инструментов
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 09:27:50
Цитата
Sergey Gorokhov написал: Есть функция getClassSecurities которая вернет список доступных инструментов.
Т.е. полный список инструментов в терминале заказывается и обновляется всегда? Независимо от каких-либо настроек параметров?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.03.2020 09:36:36
Цитата
Latrop написал: Если заказать ParamRequest(class1, sec1, par1) и ParamRequest(class1, sec2, par2) Т.е. для разных инструментов одного и того же класса будут заказаны разные параметры.То фактически терминал что сделает?
Цитата
Latrop написал: Будет неявно заказывать оба параметра для обоих инструментов
Да. Где-то была тема на форуме. QUIK не умеет фильтровать заказанные параметры внутри класса и будет слать все заказанные явно или неявно параметры для одного класса.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 09:40:11
Цитата
Старатель написал: QUIK не умеет фильтровать заказанные параметры внутри класса и будет слать все заказанные явно или неявно параметры для одного класса.
Тоже так думаю, но вот тех.поддержка иное заявляет:
Цитата
Sergey Gorokhov написал: умеет заказывать такие "частные" параметры в разрезе инструментов
Кому верить? :)
Пользователь
Сообщений: Регистрация: 21.08.2015
11.03.2020 10:48:33
Цитата
Latrop написал: Т.е. полный список инструментов в терминале заказывается и обновляется всегда? Независимо от каких-либо настроек параметров?
Там внутри бумаги по индексу в sec.dat идентифицируются (возможно, не везде, но кое-где точно). То есть свежий sec.dat по-любому надо в начале сессии тащить целиком, иначе ничего не будет толком работать. Соответственно, что в нем приехало, оно уже приехало, а там как раз вот это вот все, возвращаемое getClassSecurities. Кстати говоря, в моем поделии, работающем с биржей напрямую, тоже пришлось весь листинг тащить, прежде чем что-то другое делать. И я на квик как образец для подражания не смотрел, так оно само вышло и, видимо, иначе никак.
Пользователь
Сообщений: Регистрация: 14.02.2015
11.03.2020 23:16:57
Так и я про то. Квик очевидно заказывает всегда весь листинг. Там же в Квик приходит и тот же SECTYPESTATIC, но получить его в скрипте никак, пока не закажешь любой другой совсем ненужный биржевой параметр.
Разботчики: Можно SECTYPESTATIC в виде кода, а также прочие static параметры выдавать через метаданные бумаги (getSecurityInfo) ?
Пользователь
Сообщений: Регистрация: 21.08.2015
12.03.2020 02:14:07
Цитата
Latrop написал: Там же в Квик приходит и тот же SECTYPESTATIC
Вот в этом я не уверен, мне неизвестно соответствующее поле в sec.dat. Как насчет вывести тип бумаги из имеющихся параметров от getSecurityInfo? Наличие базового актива -> дериватив, наличие страйка -> опцион и т.д.
Пользователь
Сообщений: Регистрация: 14.02.2015
12.03.2020 02:52:46
Цитата
Anton написал: Как насчет вывести тип бумаги из имеющихся параметров от getSecurityInfo? Наличие базового актива -> дериватив, наличие страйка -> опцион и т.д.
Тип/подтип бумаги косвенно определить не сложно, что и реализовано, хотелось упростить. На фонде и валютах там правда сложнее (типы облигации например).
Более того, наличие SECTYPESTATIC (или TRADE_DATE_CODE и т.п.) было также нужно, если честно, чтобы надежно определить, есть ли бумага в листинге текущей сессии или нет.
Цитата
Anton написал: Вот в этом я не уверен, мне неизвестно соответствующее поле в sec.dat
Кстати, любопытно, зачем приходится разбирать нутро dat-файлов квика? Какая там есть полезная инфа, которая недоступна в скриптах? И можно где-то раздобыть уже готовые парсеры этих dat-файлов, на C# напр ? А то накопились ежедневные копии квиков за кучу лет, руки не доходят слить из них все данные для истории и удалить наконец :)
Пользователь
Сообщений: Регистрация: 21.08.2015
12.03.2020 04:12:48
Цитата
Latrop написал: надежно определить, есть ли бумага в листинге текущей сессии или нет.
Если бумага возвращена из getClassSecurities, она есть в листинге сегодня, разве нет?
Цитата
Latrop написал: зачем приходится разбирать нутро dat-файлов квика?
Для общего развития в основном. Практического применения этому не может быть, при работающем боевом квике в его файлах ковыряться не есть хорошо, а при неработающем можно просто файлы в архив скопировать, потом подкладываем их квику и открываем. Все уже сделано аркой, и парсинг, и отображение, и экспорт куда угодно.
Цитата
Latrop написал: И можно где-то раздобыть уже готовые парсеры этих dat-файлов, на C# напр ?
Не слыхал о таких.
Цитата
Latrop написал: ежедневные копии квиков за кучу лет
А что из них вытаскивать? ТВС? Дык вон оно все на финаме лежит даром, качать не перекачать.
Пользователь
Сообщений: Регистрация: 27.08.2018
12.03.2020 06:51:35
Цитата
Latrop написал: Кстати, любопытно, зачем приходится разбирать нутро dat-файлов квика? Какая там есть полезная инфа, которая недоступна в скриптах?
это позволяет просто взять инфу без обращения к квику.
Цитата
Latrop написал: И можно где-то раздобыть уже готовые парсеры этих dat-файлов
это вряд ли разумно, тк некий объем работы проделан, а если это вывалить на всеобщее, то арка просто сменит структуры и опять их наново парсить. смысл?
такое часто дает сигнал игнорировать вопрос. шарпеи не в почете у системщиков. ткчт аккуратнее с такими каминг-аутами в правильных сообществах. (имо)
Пользователь
Сообщений: Регистрация: 14.02.2015
12.03.2020 08:54:38
Цитата
Anton написал: Если бумага возвращена из getClassSecurities, она есть в листинге сегодня, разве нет?
У меня скрипт тупо синхронизирует просто всю таблицу securities, ну да, верно, по этой части можно просто брать getTradeDate квика, если бумага есть в списке getClassSecurities, спасибо.
Цитата
Anton написал: А что из них вытаскивать? ТВС? Дык вон оно все на финаме лежит даром, качать не перекачать.
В финаме же урезанные данные, ни точного времени, ни открытого интереса, ни адресных сделок, ни еще чего-то нужного, так, побаловаться только :)
Пользователь
Сообщений: Регистрация: 14.02.2015
12.03.2020 08:57:01
Цитата
новичок написал: такое часто дает сигнал игнорировать вопрос. шарпеи не в почете у системщиков. ткчт аккуратнее с такими каминг-аутами в правильных сообществах. (имо)
Как начинавший еще с ASM на Z80, позволю себе снисходительно отнестись к такой дискриминации по языковому признаку :)))
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.