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 (и т.п.) - строковые, и они как бы есть всегда. Каким образом они определяется? Ведь не строкой же с сервера приходят? Значит есть исходные кодовые поля? Как их получить?
Latrop написал: - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "TRADE_DATE_CODE") или getParamEx, не важно
Дата торгов, это не параметр инструмента, а параметр сервера и получить его можно в getInfoParam("TRADEDATE")
Цитата
Latrop написал: Признаете вышеуказанное поведение ошибочным?
Нет.
Цитата
Latrop написал: 2. Вообще, что за такие static параметры? Может есть смысл выдавать их в составе getSecurityInfo()?
Статичные параметры инструментов и так передаются в getSecurityInfo
Цитата
Latrop написал: 3. SECTYPESTATIC, SECSUBTYPESTATIC (и т.п.) - строковые, и они как бы есть всегда. Каким образом они определяется? Ведь не строкой же с сервера приходят? Значит есть исходные кодовые поля? Как их получить?
Тип инстр-та и Подтип инстр-та формируются на основе данных поступающих с биржи. В иных случаях определяются сервером. Тип инструмента. Возможные значения:
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-скрипте?
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-скрипте?
К сожалению, такой возможности не предусмотрено. Можем предложить зарегистрировать пожелание на добавление функционала.
Sergey Gorokhov написал: Если так сделать, то Вы не сможете открыть таблицу текущих торгов, т.к. не будет списка инструментов.
Таблица уже открыта. Просто попытался описать кейс с нуля, не учел всех "умностей" терминала.
Скорректировал описание (могли бы и сами догадаться):
Ошибка: - Версия 8.4.1.6 (вообще любая) - Открыть таблицу Текущих торгов, добавить любые инструменты - Выключить "Умный" заказ параметров, отключить заказ всех параметров (все галки убраны) - Перезаказать данные текущей сессии - Видим большинство параметров пустые (это норм, раз они не заказаны), но некоторые параметры есть (видимо статичные) - Например "Тип инструмента" (SECTYPESTATIC) и он выводится (напр выдает: "Фьючерсы"/"Опционы"/"Ценные бумаги" и т.п.) - Попытаться получить этот параметр getParamEx2(marketCode, secCode, "SECTYPESTATIC") , где marketCode, secCode соотв код класса и код инструмента, любого - В ответ - Пусто - Параметр в таблице есть, а через lua-код его нет.
Признаете вышеуказанное поведение ошибочным? (дубль 3)
Вообще-то я тоже не признал бы такое поведение ошибочным с точки зрения луа: бумага не заказана, заказ запрещен фильтром, луа тыкается в строку, строки нет, заказывать нельзя, ок, держите нил. Логично. С точки зрения видимой таблицы разве что, да и то скорей "особенность поведения", это же вью, а не модель. Вот что луа часто от "модели" уклоняется в угоду то ли "упрощению", то ли сокрытию внутренней кухни, это вот хуже ящитаю.
Anton написал: Вообще-то я тоже не признал бы такое поведение ошибочным с точки зрения луа: бумага не заказана, заказ запрещен фильтром, луа тыкается в строку, строки нет, заказывать нельзя, ок, держите нил. Логично. С точки зрения видимой таблицы разве что, да и то скорей "особенность поведения", это же вью, а не модель. Вот что луа часто от "модели" уклоняется в угоду то ли "упрощению", то ли сокрытию внутренней кухни, это вот хуже ящитаю.
В видимой таблице значит данные инструментов берутся из локального кэша справочников. В луа эти инструменты из кэша все доступны в таблице securities, а вот их закэшированные параметры уже нет. Как вообще корректно определить, что заказ инструмент или нет?
Цитата
Sergey Gorokhov написал: Функция getParamEx2 возвращает параметры предварительно заказанные с помощью функции ParamRequest.А вот getParamEx не требует такого заказа.
Вообще без разницы, какую функцию тут использовать.
Проблема в общем понятна, что это не ошибка функции, а ошибка архитектуры, вопрос можно снять :)
Если явно заказаны только конкретные инструменты (т.е. задан фильтр по инструментам), то каким образом можно узнать, какие есть еще активные инструменты в текущей сессии для заказа данных?
Если заказать ParamRequest(class1, sec1, par1) и ParamRequest(class1, sec2, par2)
Т.е. для разных инструментов одного и того же класса будут заказаны разные параметры. То фактически терминал что сделает? Будет неявно заказывать оба параметра для обоих инструментов, или он умеет заказывать такие "частные" параметры в разрезе инструментов? Просто такое через диалог заказа параметров настроить невозможно - понять как устроен заказ данных.
Если явно заказаны только конкретные инструменты (т.е. задан фильтр по инструментам), то каким образом можно узнать, какие есть еще активные инструменты в текущей сессии для заказа данных?
Есть функция getClassSecurities которая вернет список доступных инструментов. что такое "активные" инструменты? Те что торгуются? Если так то надо заказать какой-нибудь торговый параметр, например цену последней сделки, или еще что-нибудь похожее и проверить.
Цитата
Latrop написал: Будет неявно заказывать оба параметра для обоих инструментов, или он умеет заказывать такие "частные" параметры в разрезе инструментов?
умеет заказывать такие "частные" параметры в разрезе инструментов
Latrop написал: Если заказать ParamRequest(class1, sec1, par1) и ParamRequest(class1, sec2, par2) Т.е. для разных инструментов одного и того же класса будут заказаны разные параметры.То фактически терминал что сделает?
Цитата
Latrop написал: Будет неявно заказывать оба параметра для обоих инструментов
Да. Где-то была тема на форуме. QUIK не умеет фильтровать заказанные параметры внутри класса и будет слать все заказанные явно или неявно параметры для одного класса.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель написал: QUIK не умеет фильтровать заказанные параметры внутри класса и будет слать все заказанные явно или неявно параметры для одного класса.
Тоже так думаю, но вот тех.поддержка иное заявляет:
Цитата
Sergey Gorokhov написал: умеет заказывать такие "частные" параметры в разрезе инструментов
Latrop написал: Т.е. полный список инструментов в терминале заказывается и обновляется всегда? Независимо от каких-либо настроек параметров?
Там внутри бумаги по индексу в sec.dat идентифицируются (возможно, не везде, но кое-где точно). То есть свежий sec.dat по-любому надо в начале сессии тащить целиком, иначе ничего не будет толком работать. Соответственно, что в нем приехало, оно уже приехало, а там как раз вот это вот все, возвращаемое getClassSecurities. Кстати говоря, в моем поделии, работающем с биржей напрямую, тоже пришлось весь листинг тащить, прежде чем что-то другое делать. И я на квик как образец для подражания не смотрел, так оно само вышло и, видимо, иначе никак.
Так и я про то. Квик очевидно заказывает всегда весь листинг. Там же в Квик приходит и тот же SECTYPESTATIC, но получить его в скрипте никак, пока не закажешь любой другой совсем ненужный биржевой параметр.
Разботчики: Можно SECTYPESTATIC в виде кода, а также прочие static параметры выдавать через метаданные бумаги (getSecurityInfo) ?
Latrop написал: Там же в Квик приходит и тот же SECTYPESTATIC
Вот в этом я не уверен, мне неизвестно соответствующее поле в sec.dat. Как насчет вывести тип бумаги из имеющихся параметров от getSecurityInfo? Наличие базового актива -> дериватив, наличие страйка -> опцион и т.д.
Anton написал: Как насчет вывести тип бумаги из имеющихся параметров от getSecurityInfo? Наличие базового актива -> дериватив, наличие страйка -> опцион и т.д.
Тип/подтип бумаги косвенно определить не сложно, что и реализовано, хотелось упростить. На фонде и валютах там правда сложнее (типы облигации например).
Более того, наличие SECTYPESTATIC (или TRADE_DATE_CODE и т.п.) было также нужно, если честно, чтобы надежно определить, есть ли бумага в листинге текущей сессии или нет.
Цитата
Anton написал: Вот в этом я не уверен, мне неизвестно соответствующее поле в sec.dat
Кстати, любопытно, зачем приходится разбирать нутро dat-файлов квика? Какая там есть полезная инфа, которая недоступна в скриптах? И можно где-то раздобыть уже готовые парсеры этих dat-файлов, на C# напр ? А то накопились ежедневные копии квиков за кучу лет, руки не доходят слить из них все данные для истории и удалить наконец :)
Latrop написал: надежно определить, есть ли бумага в листинге текущей сессии или нет.
Если бумага возвращена из getClassSecurities, она есть в листинге сегодня, разве нет?
Цитата
Latrop написал: зачем приходится разбирать нутро dat-файлов квика?
Для общего развития в основном. Практического применения этому не может быть, при работающем боевом квике в его файлах ковыряться не есть хорошо, а при неработающем можно просто файлы в архив скопировать, потом подкладываем их квику и открываем. Все уже сделано аркой, и парсинг, и отображение, и экспорт куда угодно.
Цитата
Latrop написал: И можно где-то раздобыть уже готовые парсеры этих dat-файлов, на C# напр ?
Не слыхал о таких.
Цитата
Latrop написал: ежедневные копии квиков за кучу лет
А что из них вытаскивать? ТВС? Дык вон оно все на финаме лежит даром, качать не перекачать.
Latrop написал: Кстати, любопытно, зачем приходится разбирать нутро dat-файлов квика? Какая там есть полезная инфа, которая недоступна в скриптах?
это позволяет просто взять инфу без обращения к квику.
Цитата
Latrop написал: И можно где-то раздобыть уже готовые парсеры этих dat-файлов
это вряд ли разумно, тк некий объем работы проделан, а если это вывалить на всеобщее, то арка просто сменит структуры и опять их наново парсить. смысл?
Anton написал: Если бумага возвращена из getClassSecurities, она есть в листинге сегодня, разве нет?
У меня скрипт тупо синхронизирует просто всю таблицу securities, ну да, верно, по этой части можно просто брать getTradeDate квика, если бумага есть в списке getClassSecurities, спасибо.
Цитата
Anton написал: А что из них вытаскивать? ТВС? Дык вон оно все на финаме лежит даром, качать не перекачать.
В финаме же урезанные данные, ни точного времени, ни открытого интереса, ни адресных сделок, ни еще чего-то нужного, так, побаловаться только :)
новичок написал: такое часто дает сигнал игнорировать вопрос. шарпеи не в почете у системщиков. ткчт аккуратнее с такими каминг-аутами в правильных сообществах. (имо)
Как начинавший еще с ASM на Z80, позволю себе снисходительно отнестись к такой дискриминации по языковому признаку :)))
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.