Как получить sec_code по идентификатору графика?

Страницы: 1
RSS
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Присвоил графику идентификатор WWWbond.
Код работает. Выдает число свечек.

x = getNumCandles('WWWbond')

message('x= ' ..x)

Пытаюсь разными способами получить по этому идентификатору WWWbond sec_code. Никак не получается, такая возможность вообще есть?

Код не работает.

graphic_id = 'WWWbond'
sec_code = getSecurityInfo(graphic_id)
message("График " .. sec_code)
 
Нет, так сделать нельзя. Можно получить информацию только с того графика, на который этот индикатор выведен.
В  документации, файл "Интерпретатор языка Lua", раздел "Функции и  глобальные переменные скрипта индикатора" описаны все доступные методы в  индикаторе и список функций, доступных из контекста индикатора.
Можно попробовать добавить метку на график с нужным текстом и считать данные. Но тогда графики должны быть уникальными.
 
Идентификатор назначен на Price. Тоесть именно на график. Хочу сделать сделку по этому графику. Для отправки ордера на сделку нужен  sec_code. Как я могу его получить? Не задавать же его вручную.  Знаю что можно из таблицы заявок вытащить local sec_code = last_order.sec_code. Должен же быть способ с графика открытого получить sec_code для заявки.  
 
Цитата
написал:
Идентификатор назначен на Price. Тоесть именно на график. Хочу сделать сделку по этому графику. Для отправки ордера на сделку нужен  sec_code. Как я могу его получить? Не задавать же его вручную.  Знаю что можно из таблицы заявок вытащить local sec_code = last_order.sec_code. Должен же быть способ с графика открытого получить sec_code для заявки.  
График предоставляет данные о линиях, выведенных на него. Раз это Price, то и будет выдана информация о барах этой цены. А чья эта цена метод getCandlesByIndex (если используется он) не предоставляет.

Читать данные с графика - это самый неудачный вариант получения данных. Его разумно использовать только если алгоритм вывода линий, на основании которых строится логика, неизвестен.
В остальных случая проще и, главное, быстрее, надежней, получить данные через CreateDataSource (если используются дискретные свечи) и рассчитать алгоритмом некие значения. В этом случае вся информация известна изначально.
 
методы  getItem, getParamEx, getSecurityInfo или другие. могут по идентификатору sec_code?  
 
Цитата
написал:
Присвоил графику идентификатор WWWbond.
Код работает. Выдает число свечек.

x = getNumCandles('WWWbond') message('x= ' ..x)  Пытаюсь разными способами получить по этому идентификатору WWWbond sec_code. Никак не получается, такая возможность вообще есть?

Код не работает.

graphic_id = 'WWWbond'
sec_code = getSecurityInfo(graphic_id)
message("График " .. sec_code)
getDataSourceInfo

Функция предназначена для получения информации об источнике данных для  индикатора.  

TABLE info getDataSourceInfo()

Функция возвращает таблицу Lua с параметрами:  

ВАЖНО! Для корректной работы функции getDataSourceInfo, вызываемой из
функции Init, необходимо перезапустить Рабочее место QUIK после добавления
индикатора на график.  


ПараметрТипОписание
intervalNUMBERТекущий интервал (тайм-фрейм) графика
class_codeSTRINGКод класса источника данных
sec_codeSTRINGКод инструмента источника данных
paramSTRINGНаименование параметра Таблицы текущих торгов, по которому строится график.  Если поле пустое, то график строится на основании Таблицы обезличенных  сделок

Возможные значения поля interval:

 
 .lua:5: attempt to call a nil value (global 'getDataSourceInfo')    ошибку выдает  


local ticker_id = "graf3"

local datasource_info = getDataSourceInfo(ticker_id)

   local sec_code = datasource_info.sec_code
       
   message("Инструмент: " .. sec_code)

   
getDataSourceInfo в ванильном LUA для квика есть? что не так?  
 
getDataSourceInfo выдает информацию о графике, в котором он вызывается. Т.е. есть индикатор, нанесенный на график, в нем есть метод getDataSourceInfo. Вот по этому графику и будет информация.
В руководстве показана сигнатура вызова:

TABLE info getDataSourceInfo()

Никаких параметров. Т.е. метод не предназначен для получения данных о другом графике по идентификатору. Такой вызов некорректен.

getDataSourceInfo - это метод qlua.
 
 tiker_id = "WWWbond"
   
local sec_code = getSecurityInfo(tiker_id, "SEC_CODE")

message("Название акции: " ..sec_code)  


дает ошибку attempt to concatenate a nil value (local 'sec_code')



пробовал "SHORTNAME" и"SEC_DESCRIPTION" вместо "SEC_CODE"   - эта же ошибка.

Ошибка "attempt to concatenate a nil value" возникает, когда пытаемся объединить (сконкатенировать) строку с нулевым значением (`nil`). Это может произойти, если функция `getSecurityInfo()` не возвращает значение для запрошенного параметра. В данном случае, возможно, не удалось получить код инструмента для указанного `tiker_id`.

почему это не работает(((  что за проклятье  как тяжело получить этот  SEC_CODE  
 
написал:
tiker_id = "WWWbond"
   
local sec_code = getSecurityInfo(tiker_id, "SEC_CODE")

message("Название акции: " ..sec_code)  


дает ошибку attempt to concatenate a nil value (local 'sec_code')


почему это не работает(((  что за проклятье  как тяжело получить этот  SEC_CODE

==============================
Вы не ту функцию взяли.
Читайте внимательнее. вам выше специально скопировал из документации
------------------
функция getDataSourceInfo,  а у Вас getSecurityInfo
------------------------
getSecurityInfo
Функция предназначена для получения информации по инструменту.  
Формат вызова:  
TABLE getSecurityInfo (STRING class_code, STRING sec_code)
Функция возвращает таблицу Lua с параметрами  Таблицы инструментов.
 
Пробовал разные комбинации с   getDataSourceInfo.  Идентификатор ставил на Price и на индикатор Move Average.

такой код :
local ticker_id = "graf2"


local datasource_info = getDataSourceInfo(ticker_id)


   local sec_code = datasource_info.sec_code
   

   
   message("Инструмент: " ..sec_code)




и такой код :
tiker_id = "graf3"
 
local sec_code = getDataSourceInfo(tiker_id, "SEC_CODE")

message("Название акции: " ..sec_code)  


Выдают одну и ту же ошибку.  

lua:5: attempt to call a nil value (global 'getDataSourceInfo')
Может торги еще не начались и по этому не работает. Вчера вроде getDataSourceInfo по всякому пытался вызвать, но не работало.  
 
Если Вы, действительно, хотите разобраться, то, наверно, все же стоит прочитать сообщения, что были написаны. А еще лучше документацию. В ней указаны все методы и, что важно, - сигнатуры вызова методов.
Уже было сказано, что метод getDataSourceInfo вызывается без параметров. Этот метод доступен в контексте индикатора.
Метод же getSecurityInfo - получает данные по переданным параметрам класс инструмента, код инструмента. Кои Вы и хотите узнать, а значит и использовать getSecurityInfo не получится.

И еще раз - по идентификатору графика можно узнать значения линий этого графика, а что это за график (и какого инструмента) нет.
 
А по открытому стакану sec_code есть возможность получить?  
 
Наверно, проще озвучить решаемую проблему. Но прежде надо определится, что и где используется - индикатор, скрипт. Для них используются совершенно разные походы.
 
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями. Тоесть я постоянно выбираю бумагу, она всегда разная. Какую выбрал хочу нажать кнопку скрипта и по этой бумаге пошла заявка. все параметры заявок знаю с этим все ок. А вот sec_code чтоб брался это проблема.  
 
Цитата
написал:
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями. Тоесть я постоянно выбираю бумагу, она всегда разная. Какую выбрал хочу нажать кнопку скрипта и по этой бумаге пошла заявка. все параметры заявок знаю с этим все ок. А вот sec_code чтоб брался это проблема.  
Нет, так не выйдет. Точнее это можно сделать, если дополнительно сделать индикатор на этот график.
При смене настроек на графике (изменение инструмента), простой индикатор определить через getDataSourceInfo какой в текущий момент инструмент и запишет эту информацию в какое-то хранилище (не важно какое, например метка на графике).
Тогда скрипт прочитает это хранилище и получит информацию. Но надо решать вопрос синхронизации, т.к. смена инструмента не мгновенна.
 
Какой дикий колхоз приходится городить. Как не продумано. Спасибо Вам за объяснения. Попробую решить другую задачу.  Она выглядит проще.  
 
Нет идеальных решений. Я Питон и его колхоз терпеть не могу, но полмира пользуется и довольно.
 
Цитата
Цитата
написал:
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями.
функция getDataSourceInfo() работает как и говорилось.
Вот пример как ваша хотелка.
График подключен якорем к ТТТ
щелкаем в ТТТ строку с инструментом. Он появляется на графике, а в окошке выводится код инструмента этой функцией.

 
Индикатор должен быть обязательно хэндмэйд?
А скрипт должен слушать и спать периодами?

 
 
какой у Вас скрипт?  мой не работает((

function GetDataSourceInfo()
   local info = getDataSourceInfo()
   if info ~= nil then
       -- Выводим информацию о доступных источниках данных
       for i, source in ipairs(info) do
           message("Источник данных #" .. i)
           message("Имя: " .. source.class_code) -- Имя источника данных
           message("Описание: " .. source.desc) -- Описание источника данных
           message("Код биржи: " .. source.market) -- Код биржи
           message("Тип инструмента: " .. source.sec_type) -- Тип инструмента
           message("------------------------------")
       end
   else
       message("Информация о доступных источниках данных не найдена.")
   end
end

-- Функция, вызываемая при выборе строки в таблице ТТТ
function OnSelectTTTRow(t_id, sel_index, sel_mode)
   if t_id == "TTT" and sel_mode == 1 then
       -- Получаем информацию о выбранной строке в таблице ТТТ
       local row_info = getRow(t_id, sel_index)
       if row_info ~= nil then
           -- Выводим информацию о выбранной строке в сообщении
           local message_text = "Выбрана строка в ТТТ:\n"
           message_text = message_text .. "Инструмент: " .. row_info[1] .. "\n"
           message_text = message_text .. "Цена: " .. row_info[2] .. "\n"
           message_text = message_text .. "Объем: " .. row_info[3]
           message(message_text)
       end
   end
end

setCellScript("TTT", 1, OnSelectTTTRow)


GetDataSourceInfo()
Страницы: 1
Читают тему
Наверх