Как определить Код класса (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?
получить список доступных классов, в каждом из них поискать требуемый инструмент. Если он найдется в нескольких классах - чесать репу и выбирать нужный. Как выбирать - это исключительно ваши предпочтения и правила.
 
Цитата
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 - подсветка о ошибке ввода и ничего не работает.
 
Цитата
Константин Рейм написал:
А по большому счету эта функция нужна для корректного ввода инструмента из меню.
В таком раскладе да. Хотя я бы вывалил юзеру окошко с выбором класса-инструмента по типу квиковского, консоль-стайл "введите" меня печалят. Сидит юзер и чешет репу, чего туда вводить-то? Идет гуглить, какие вообще классы существуют, какие бумаги, потом идет спрашивать у брокера, почему у него того нет сего нет, потом здесь пишет арка где мои бумаги, гуголь говорит должны быть, поддержка идет рыть сорцы квика, где бумаги, пишет вопросы брокеру, там отвечают, что-то путают, затевается переписка, юзер на форуме вопит вы чо на простой вопрос три дня ответить не можете. Все при деле в общем, автор скрипта хитро ухмыляется.
Страницы: 1
Читают тему (гостей: 1)
Наверх