Alexey89 (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Создать таблицу. Получить данные из таблицы другим скриптом., Создать таблицу. Получить данные из таблицы другим скриптом.
 
Читаю. Спасибо.  
Создать таблицу. Получить данные из таблицы другим скриптом., Создать таблицу. Получить данные из таблицы другим скриптом.
 
скрипт таблицы

function main()
   win001 = AllocTable()
   AddColumn(win001, 0, "Показатель", true, QTABLE_STRING_TYPE, 15)
   AddColumn(win001, 1, "Значение", true, QTABLE_DOUBLE_TYPE, 15)
   AddColumn(win001, 2, "Значение", true, QTABLE_DOUBLE_TYPE, 5)
   AddColumn(win001, 3, "Значение", true, QTABLE_DOUBLE_TYPE, 10)
     
CreateWindow(win001)
   SetWindowCaption(win001, "Table1")

  for fff=1,7 do
InsertRow(win001,fff)
end
SetCell(win001,1,0,"Остаток средств:");
SetCell(win001,2,0,"+--","-------------+");
SetCell(win001,3,0,"Кол-во заявок на продажу");
SetCell(win001,4,0,"Сумма заявок на продажу");

SetCell(win001, 1, 2, "34", 0)  
SetCell(win001, 3, 2, "55", 0)      


end


скрипты типа

if Table1 then
   -- Таблица существует
   -- Далее можно получить доступ к элементам таблицы
   local value = getNumberOf(win001, 3, 2)
   message(value)
else
   -- Таблица не существует
   message("Таблица не найдена")
end  


таблицы не видят. почему не понимаю.  По названию и идентификатору обращаюсь. Таблица существует, я ее вижу.  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
А скрипт который собирает мэседжи в табличку. А другой скрипт который  при запуске берет из таблички последний сек код и отправляет по нему заявку. Такое будет работать?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Какая функция создания таблицы подойдет лучше всех?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Так понятнее, спасибо. А такой вариант. Создается табличка и туда пишутся значения мэсседжей или меток. И из этой таблички скрипт берет самую последнюю информацию. Такое в теории возможно?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Я читаю документацию. Понять ее не в состоянии. Стиль изложения вида вода мокрая, а в году 12 месяцев мне не дает ничего. Мне нужны следствия и выводы. Нет в документации списка что можно сделать и что сделать нельзя. Нет списка функции которые друг с другом работают или не работают. Нужно как-то вычислять что работает, а что нет.

Какими способами можно  взять sec_code из индикатора и использовать его в скрипте запускаемом вручную?  Из сообщения можно взять? Попробовал, похоже невозможно.

AddLabel или GetLabelParams (внутренние их параметры) могут принимать значения sec_code что бы  взять sec_code из индикатора и использовать его в скрипте запускаемом вручную?  

Другие способы может есть ?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Пытаюсь найти label_id перебором.


local chart_tag = "ww5" -- идентификатор графика

function OnInit()
   local label_id = 1 -- начальное значение идентификатора метки
   local label_params = GetLabelParams(chart_tag, label_id)
   while label_params do
       local secCodeLabel = label_params.secCodeLabel
       message("Значение метки с идентификатором " .. label_id .. ": " .. secCodeLabel)
       label_id = label_id + 1 -- увеличиваем идентификатор метки
       label_params = GetLabelParams(chart_tag, label_id) -- получаем параметры новой метки
   end
end

function OnStop()
end



Я на верном пути?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
 Код индикатора теперь.

local Settings = {
   Name = "goodmode1"
}

local secCodeLabel

function Init()
   return 1
end

function OnCalculate(Index)
   if Index == 1 then
       local info = getDataSourceInfo()
       
       local chart_tag = "ww5"
   
label_params = {
           labelSize = 300,
           labelX = 50,
           labelY = 50,
           secCodeLabel =  (info.sec_code)
       }

local label_id = AddLabel(chart_tag, label_params)

       secCodeLabel = GetLabelParams(chart_tag, label_id).secCodeLabel
       
       message("Значение метки: " .. secCodeLabel)
   end
   
   return 0
end


Код скрипта теперь


local chart_tag = "ww5" -- идентификатор графика
local label_id = 1 -- идентификатор метки

function OnInit()
   local label_params = GetLabelParams(chart_tag, label_id)
   if label_params then
       local secCodeLabel = label_params.secCodeLabel
       message("Значение метки: " .. secCodeLabel)
   else
       message("Метка не найдена")
   end
end

function OnStop()
end


Пишет "Метка не найдена".  Надо тип данных где-то задать? Как получить этот secCodeLabel  скриптом?  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Settings = {
   Name = "goodmode1"
}

function Init()
   return 1
end

function OnCalculate(Index)
   if Index == 1 then
       local info = getDataSourceInfo()
       --message(info.sec_code)
       
       -- Создаем метку с информацией sec_code

local chart_tag = "ww5"
   
label_params = {

       local labelSize = 300 -- размер метки
       local labelX = 50 -- координата X метки (посередине графика)
       local labelY = 50 -- координата Y метки (посередине графика)
       local secCodeLabel = tostring(info.sec_code)

        }

 AddLabel(chart_tag, label_params)  

       -- Выводим значение метки в сообщении
       message("Значение метки: " .. secCodeLabel)
   end
   
   return 0
end


Так корректно? Метки по прежнему нет.

Скрипт

function OnInit()
  local labelValue = GetLabelParams("goodmode1", "Метка")
  message("Значение метки: " .. tostring(labelValue))
end

По прежнему отображает nill.  
Получить sec_code из метки индикатора, Получить sec_code из метки индикатора
 
Есть индикатор  

Settings = {
   Name = "goodmode1"
}

function Init()
   return 1
end

function OnCalculate(Index)
   if Index == 1 then
       local info = getDataSourceInfo()
       --message(info.sec_code)
       
       -- Создаем метку с информацией sec_code
       local labelSize = 100 -- размер метки
       local labelX = 10 -- координата X метки (посередине графика)
       local labelY = 10 -- координата Y метки (посередине графика)
       local secCodeLabel = tostring(info.sec_code)
       AddLabel(labelX, labelY, secCodeLabel, RGB(255, 255, 0), labelSize)
       
       -- Выводим значение метки в сообщении
       message("Значение метки: " .. secCodeLabel)
   end
   
   return 0
end


График заякорен к ТТТ и при выборе инструмента в ТТТ выдает его название, вроде это название так же записывается в метку на графике ( метку кстати ни разу не получилось увидеть, надеюсь она есть)

Делаю скрипт что-бы при запуске скрипта, значение метки выводилось сообщением.

function OnInit()
   local labelValue = GetLabelParams("goodmode1", "Метка")
   message("Значение метки: " .. tostring(labelValue))
end

Такой скрипт отображает nill.  Код вроде правильный, что не так?  Как проверить есть ли метка?  
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
Спасибо. Теперь многое понятно. Попробую делать и брать метку.  
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
это работает  

  Settings = {
Name = "goodmode"
}

function Init()
   return 1

end



function OnCalculate(Index)
  if Index == 1 then
     local info = getDataSourceInfo();
     message(info.sec_code)
  end
  return 0
end


Каким образом можно научить скрипт брать данные из этого индикатора? Нужно чтоб скрипт брал sec_code
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
Круто. Дело двигается. Запускаю как индикатор код

Settings = { Name = "getDataSourceInfo_Example"
}

function Init()
   return 1
end

function OnCalculate(index)
   seccode = getDataSourceInfo().sec_code
   message(seccode)
end


После добавления этого индикатора к графику. Квик виснет, начинает пищать спикер в системнике. Квик приходится убивать через диспетчер задач.  Можно как-то замедлить его ?    
  Settings = {
Name = "goodmode"
}

function Init()
   return 1

end

function OnCalculate(index)
   sleep(5000)
seccode = getDataSourceInfo().sec_code
sleep(5000)
   message(seccode)
sleep(5000)
end  

Не работает((  
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
Запускаю этот  скрипт и ничего. Ни ошибок ни  message.  Что-то надо еще указать? У меня ТТТ 2 штуки, графиков штук 5, стакан открыт. Как привязать это к ТТТ. Почему ничего не происходит?
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 

Пожалуйста. Приведите пример кода из  https://forum.quik.ru/messages/forum10/message71857/topic8232/#message71857  . Не понимаю я как применить эту функцию к конкретному индикатору. Как заставить ее срабатывать.

Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
Вот это поворот. А как тогда можно это реализовать?   https://forum.quik.ru/messages/forum10/message71857/topic8232/#message71857   как-то же человек сделал это?    и вот это? https://forum.quik.ru/forum1/topic6172/    у меня только не работает не пойму почему.  
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
 Идентификатор индикатора WW. Квик перезагружал многократно. Запускаю скрипт - даже ошибок не выдает. Ничего. Никакой реакции.  

function OnCalculate(Index)
  if Index == 1 then
     local info = getDataSourceInfo("WW");
     message(info.sec_code)
  end
  return 0
end


Код  message('x= ' getNumCandles('WW'))  отрабатывает замечательно, число свечей показывает мгновенно.  Тоесть привязка по идентификатору WW работает.  Что там может быть? Почему не работает код?  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
какой у Вас скрипт?  мой не работает((

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()
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Индикатор должен быть обязательно хэндмэйд?
А скрипт должен слушать и спать периодами?

 
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Какой дикий колхоз приходится городить. Как не продумано. Спасибо Вам за объяснения. Попробую решить другую задачу.  Она выглядит проще.  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями. Тоесть я постоянно выбираю бумагу, она всегда разная. Какую выбрал хочу нажать кнопку скрипта и по этой бумаге пошла заявка. все параметры заявок знаю с этим все ок. А вот sec_code чтоб брался это проблема.  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
А по открытому стакану sec_code есть возможность получить?  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Пробовал разные комбинации с   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 по всякому пытался вызвать, но не работало.  
Как получить sec_code по идентификатору графика?, Как получить 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')



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

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

почему это не работает(((  что за проклятье  как тяжело получить этот  SEC_CODE  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
 .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 для квика есть? что не так?  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
методы  getItem, getParamEx, getSecurityInfo или другие. могут по идентификатору sec_code?  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Идентификатор назначен на Price. Тоесть именно на график. Хочу сделать сделку по этому графику. Для отправки ордера на сделку нужен  sec_code. Как я могу его получить? Не задавать же его вручную.  Знаю что можно из таблицы заявок вытащить local sec_code = last_order.sec_code. Должен же быть способ с графика открытого получить sec_code для заявки.  
Как получить 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)
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
Спасибо. Начинаю чтение
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
1) Весь опыт пара калькуляторов на джавсакрипте и пара простеньких батников.
2) Пару недель пытаюсь что-то делать на Lua, и продолжаю, через полгода думаю буду знать больше. Недавно понял в  main () слип не тормозит весь квик сразу, это был прорыв!  
3) Ни разу, смотрю несистемно, кусками, скорее всего это неправильно, но заставить себя систематически штудировать я не в силах. У меня много вопросов, но ответов нет в документации, примеров там мало, нужной информации мало. Интерпритация почему произошла какая ошибка там нет, как LUA работает под квиком. Думаю что важнее понимать спецификацию работы квика с LUA (куча прог где LUA работает, но ведь код для каждой конкретной проги будет разный? или все везде одинаково? вот где в документах ответ на этот вопрос? только опытный тут ответит), у меня сберквик думаю под ним свои ньюансы работы и куча кода из примеров просто не работает под ним, надо напильником его дорабатывать.

У меня вроде простая задачка "Нажал скрипт с названием купить или скрипт с названием продать. И выставляется заявка с тейк профитом и стопом по бумаге с исполненной заявкой с таким же числом лотов который в исполненной заявке."   Стоит ли от корки до корки все пройти что бы ее решить? Или это таки сложная задача?

Кстати она вообще выполнима средствами LUA на квике?  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
Задача выставить заявку по данным которые взяты из последней заявки (название бумаги и число лотов).

1) Я зашел в бумагу, заявка исполнена.

2) Нажал скрипт с названием купить или скрипт с названием продать. И выставляется заявка с тейк профитом и стопом по бумаге с исполненной заявкой с таким же числом лотов который в исполненной заявке.  

3) профит!

Но как взять название бумаги и число лотов из последней заявки?  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
https://luaq.ru/getParamEx.html


-- Входная точка для скрипта
function main ()
   -- Инициализируем параметры для запроса
   param_name_buy = "BUYDEPO"
   param_name_sell = "SELLDEPO"
   class_code = "SPBFUT"
   sec_code = "SiH9"

   -- Запрошиваем ГО покупателя
   result = getParamEx (class_code, sec_code, param_name_buy)
   -- Выводим результат по ГО покупателя
   message(
       "Гарантийное обеспечение покупателя:\n"..
       "param_value = " .. tostring(result.param_value).. "; \n"
   )
   -- Запрашвиваем ГО продавца
   result = getParamEx (class_code, sec_code, param_name_sell)
   -- Выводим ГО продавца
   message(
       "Гарантийное обеспечение продавца:\n"..
       "param_value = " .. tostring(result.param_value).. "; \n"
   )
end


Мне надо самому получить sec_code, а не задавать его самому. Есть какая-либо возможность получить это название акции? Из заявки или активного графика или стакана открытого? Если глупость говорю простите. Я нуб, побольше бы реальных рабочих примеров  getParamEx  или какого аналога.  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
Я пытался всякие библиотеки подключать, но не одну так и не смог. Слишком много вопросов где их качать в каком виде как к ним обращаться. Думаю на ванильном LUA для квика проще разобраться. Задачка вроде плевая название акции и количество лотов из последней снятой или исполненной заявки. Но не асиливаю, я нуб(((    Где глянуть Ваш скрипт?  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
 function main()
  portfolio = getParamEx (STRING class_code, STRING sec_code, STRING param_name)      
  message(tostring(portfolio))
end


Syntax error while compiling C:\Users\без п\Downloads\кнопка.lua: C:\Users\без п\Downloads\кнопка.lua:2: ')' expected near 'class_code'

Чем ему не нравится class_code?  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
У меня задача получать из заявки (исполненной или снятой) название акции и число лотов. Но не получается  совсем вытянуть эту инфу. Я постоянно упрощаю задачу в надежде получить хоть какой-то ответ по запросу. Запросить all по портфелю что может быть проще?



Пытаюсь получить название акции из последней заявки, конечно ошибку дает.

-- Получаем последнюю заявку
local lastOrder = getNumberOf("orders") - 1
local orderClass = getClass("orders")
local order = orderClass:sharedClonable()

order:setClassCode("TQBR")
order:setSeccode(getParamEx("orders", lastOrder, "SECCODE").param_value)
order:setPrice(getParamEx("orders", lastOrder, "PRICE").param_value)

-- Получаем название акции из последней заявки
local securityClass = getClass("securities")
local security = securityClass:sharedClonable()

security:setClassCode(order:getClassCode())
security:setSecCode(order:getSecCode())

local securityInfo = security:info()

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


Есть какой-нибудь код простенький что бы понять почему не работают эти запросы?  
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
 
 Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.  


function main()
   portfolio = getPortfolioInfo("all")
   message(tostring(portfolio))
end

ИЛИ

function main()
   portfolio = getParamEx("all")
   message(tostring(portfolio))
end



Думаю где-то что-то я сильно не понимаю. Мнение такое что getPortfolioInfo и  getParamEx не имеет доступа к портфелю или таблице заявок. Параметры бумаг конкретных могу получать. Например цену последней сделки Лукойла выдает легко. Использую Сберквик. Куда копать?  
Страницы: 1
Наверх