Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?

Страницы: 1
RSS
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
В таблице QUIK depo_limits согласно документации QLUA по инструменту представлен только "код инструмента" sec_code. Как мне проще и быстрее вычислить "код класса" для инструмента, представленного в таблице лимитов по бумагам depo_limits? Код класса требуется, например, для вызова функции getSecurityInfo.  
 
Цитата
Андрей написал:
В таблице QUIK depo_limits согласно документации QLUA по инструменту представлен только "код инструмента" sec_code. Как мне проще и быстрее вычислить "код класса" для инструмента, представленного в таблице лимитов по бумагам depo_limits? Код класса требуется, например, для вызова функции getSecurityInfo.  

Один инструмент может торговаться в нескольких классах.
getSecurityInfo при отсутствии кода класса, вернет параметры инструмента из первого попавшегося класса, но не факт что нужного.
В связи с чем, правильно самому указывать нужный класс
 
Если правильно понял, ответ на вопрос "Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?" - никак. Тогда вопрос, как получить список инструментов портфеля с кодом класса, если не из таблицы depo_limits?
 
Цитата
Андрей написал:
Если правильно понял, ответ на вопрос "Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?" - никак. Тогда вопрос, как получить список инструментов портфеля с кодом класса, если не из таблицы depo_limits?
получить список доступных классов, в каждом из них поискать требуемый инструмент. Если он найдется в нескольких классах - чесать репу и выбирать нужный. Как выбирать - это исключительно ваши предпочтения и правила.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
Один инструмент может торговаться в нескольких классах.
А как тогда определяется текущая цена инструмента в таблице "Состояние счёта"? Хотелось бы получить именно вот эту цену. Наверное, для каждой бумаги в портфеле прописан и класс. Иначе, можно было бы купить бумагу в одном классе по одной цене, и продать её в другом классе по другой.

Какие вообще бывают случаи, когда один инструмент торгуется в разных классах? Я такое видел только когда облигации переводят в Д-список, но тогда они уже как обычные не торгуются.
 
Цитата
Василий написал:
Какие вообще бывают случаи, когда один инструмент торгуется в разных классах? Я такое видел только когда облигации переводят в Д-список, но тогда они уже как обычные не торгуются.
Плохо значит смотрели:
Скрытый текст
И здесь же ответ на второй вопрос, откуда берется "официальная" котировка для оценки. Предпоследняя циферка в приведенном списке у всех 0, а у TQBR 1, вот значит отсюда официальная цена и проистекает, все остальные классы "просто торгуются".
 
Здравствуйте, Василий.

Текущая цена инструмента таблицы "Состояние счёта" берётся из параметров таблицы текущих торгов для данного класса/инструмента. Для данного показателя позиции используются следующие параметры ТТТ:

1. Цена последней сделки по инструменту из таблицы «Текущие торги». Если такой цены нет, то цена закрытия.
2. Для срочного рынка – цена последней сделки. Если такой цены нет, то указывается расчетная цена.
3. Для облигаций значение указывается в % от номинала, для срочных контрактов – в пунктах.
4. Для клиентов типа «МП»: лучшая цена спроса / предложения из таблицы «Текущие торги»

То, из какого именно класса берутся данные параметры - настраивается на стороне сервера QUIK. Получить эту цену, Вы можете обратившись к таблице текущих торгов с указанием класса и инструмента при помощи функций getParamEx и getParamEx2.
 
Цитата
Anton написал:
у всех 0, а у TQBR 1,
а это что за таблица? ТТ? что за параметр?
 
Цитата
Imersio Arrigo написал:
а это что за таблица?
Это кусок листинга с мамбы, параметр is_primary.
 
Код
function GetClassBySec(sec_code) -- Функция возвращает код класса по коду инструмента
   for class_code in string_gmatch("QJSIM,TQBR,SPBFUT,SPBOPT,CETS,OPTW,", "(%P*),") do -- Добавить код если надо
      for sec in string_gmatch(getClassSecurities(class_code), "(%P*_*%P*_*%P*),") do
         if sec == sec_code then return class_code end
      end
   end
end
 
Константин Рейм, вернете первый найденный класс. У меня, например, для сбера это будет EQRP, не совсем то, что ожидалось, правда? Надо искать все классы, содержащие бумагу, типа так
Код
function getSecClasses(seccode)
   local result = {}
   for cls in string.gmatch(getClassesList(), "[^,]+") do
      for sec in string.gmatch(getClassSecurities(cls), "[^,]+") do
         if sec == seccode then
            table.insert(result, cls)
            break
         end
      end
   end
   return result
end
 
Цитата
Anton написал:
Константин Рейм , вернете первый найденный класс.
Так в этом и состоит вопрос: как найти ОДИН подходящий класс. А не список.
И подход в сообщении Константин Рейм совершенно и единственно правильный: задать свой порядок приоритета для поиска класса среди общего списка, и уже основываясь на этом списке искать первый класс, куда входит инструмент, чтобы исключить "неподходящие" классы.
 
Цитата
swerg написал:
задать свой порядок приоритета для поиска класса среди общего списка
Если мы заранее знаем список классов, ничего искать вообще не надо, надо сразу захардкодить бумагу вместе с нужным классом.
 
Цитата
Anton написал:
Цитата
swerg написал:
задать свой порядок приоритета для поиска класса среди общего списка
Если мы заранее знаем список классов, ничего искать вообще не надо, надо сразу захардкодить бумагу вместе с нужным классом.
Полностью согласен. Пишите, например,
Код
{ classCode = "TQBR", secCode= "SBER", }
или храните в одной строке типа "TQBR:SBER" и выделяйте подстроки при необходимости получить отдельно classCode и secCode.
 
В крайнем случае, можно сделать справочник классов как таблицу, где ключ -- код инструмента, значение -- код класса. Будет такой справочник, скорее всего, один, заполнить его несложно и потом везде применять.
 
SPBOPT - класс опционов, месяц, неделя
OPTW - класс недельного опциона у некоторых брокеров
А по большому счету эта функция нужна для корректного ввода инструмента из меню.
Есть инструмент - все работает - нет инструмента - класс - nil - подсветка о ошибке ввода и ничего не работает.
 
Цитата
Константин Рейм написал:
А по большому счету эта функция нужна для корректного ввода инструмента из меню.
В таком раскладе да. Хотя я бы вывалил юзеру окошко с выбором класса-инструмента по типу квиковского, консоль-стайл "введите" меня печалят. Сидит юзер и чешет репу, чего туда вводить-то? Идет гуглить, какие вообще классы существуют, какие бумаги, потом идет спрашивать у брокера, почему у него того нет сего нет, потом здесь пишет арка где мои бумаги, гуголь говорит должны быть, поддержка идет рыть сорцы квика, где бумаги, пишет вопросы брокеру, там отвечают, что-то путают, затевается переписка, юзер на форуме вопит вы чо на простой вопрос три дня ответить не можете. Все при деле в общем, автор скрипта хитро ухмыляется.
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Василий.

Текущая цена инструмента таблицы "Состояние счёта" берётся из параметров таблицы текущих торгов для данного класса/инструмента. Для данного показателя позиции используются следующие параметры ТТТ:

1. Цена последней сделки по инструменту из таблицы «Текущие торги». Если такой цены нет, то цена закрытия.
2. Для срочного рынка – цена последней сделки. Если такой цены нет, то указывается расчетная цена.
3. Для облигаций значение указывается в % от номинала, для срочных контрактов – в пунктах.
4. Для клиентов типа «МП»: лучшая цена спроса / предложения из таблицы «Текущие торги»

То, из какого именно класса берутся данные параметры - настраивается на стороне сервера QUIK. Получить эту цену, Вы можете обратившись к таблице текущих торгов с указанием класса и инструмента при помощи функций getParamEx и getParamEx2.
Вопрос актуальный - как именно этот класс, настроенный на стороне сервера, получить? Я нажимаю alt-I (информация об инструменте) в таблице "Состояние счёта" и вижу один конкретный класс. Как его получить в lua?
Три дня назад у LQDT ETF был класс TQTF, а сегодня у ВТБ стал класс TQTF_F, а у другого брокера по прежнему TQTF. Поэтому вариант "зафиксировать класс где-то в настройках" не рабочий, класс может меняться.
 
Сомневаюсь, что это торгуемый класс, а не информационный.

По крайней мере, такого класса в списке API биржи я не вижу.
https://iss.moex.com/iss/engines/stock/markets/shares/boards.txthttps://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities.txt


Да и 4-е символа обычно.
 
https://imgur.com/M6GbyLl.png
 

ВТБ


Другой брокер - класс без 'F' в конце
 
Ну так уточните у брокера ВТБ, что это за класс, противоречащий спецификации. Впрочем, это может быть какой-то специфический класс, типа неполный лот, заблокированные и т.д.
 
Повторю свой вопрос.  Я нажимаю alt-I в таблице "Состояние счёта" и вижу информацию об инструменте по конкретному классу. Как мне получить этот класс в lua? getSecurityInfo('', 'тикер') дает другой класс.
Вряд ли на этот вопрос может ответить брокер.
 
SearchItems по таблице securities даст инфу. В остальных таблицах и функциях типа getDepoEx (возвращающей инфу по таблице "4.15 Позиции по инструментам") будет sec_code только. Ну и из индикатора ещё можно получить...
 
В securities есть и с TQTF, и с TQTF_F, и с EQRP_INFO...
Разница только в settle_date.  
 
Спросите своего брокера почему такой код класса. По крайней мере будет ясно, что это за класс, противоречащий спецификации.
Разработчики терминала вряд ли подскажут, почему в базе данных брокера такое значение.

Отдельного метода именно для таблицы depo_limits нет.
 
Вопрос не почему такое значение, а как его получить в программе. Вручную я его по alt-I вижу.
 
Через Winapi можно по идее скопировать все данные из окна, которое появляется по Alt+I.
Страницы: 1
Читают тему
Наверх