Пытаюсь получить данные по бумагам в портфеле скриптом. Выдает то ошибки, то nill неделю ковыряюсь, не понимаю в чем ошибка(( в портфеле одна акция Роснефти, нужно что бы при запуске скрипта вывел месседж что в портфеле 1 акция Роснефти.
function LB() n = getNumberOf("depo_limits") value = 0 res = nil for y = 0, n-1 do trade = getItem("depo_limits", y) if (trade["client_code"] == Kod_klienta) and (trade["firmid"] == Firm_ID) and (trade["sec_code"] == sec_code) and (trade["trdaccid"] == ACCOUNT) and (trade["limit_kind"] == 2) then res = trade["currentbal"] break end end return res end
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,"Сумма заявок на продажу");
if Table1 then -- Таблица существует -- Далее можно получить доступ к элементам таблицы local value = getNumberOf(win001, 3, 2) message(value) else -- Таблица не существует message("Таблица не найдена") end
таблицы не видят. почему не понимаю. По названию и идентификатору обращаюсь. Таблица существует, я ее вижу.
А скрипт который собирает мэседжи в табличку. А другой скрипт который при запуске берет из таблички последний сек код и отправляет по нему заявку. Такое будет работать?
Так понятнее, спасибо. А такой вариант. Создается табличка и туда пишутся значения мэсседжей или меток. И из этой таблички скрипт берет самую последнюю информацию. Такое в теории возможно?
Я читаю документацию. Понять ее не в состоянии. Стиль изложения вида вода мокрая, а в году 12 месяцев мне не дает ничего. Мне нужны следствия и выводы. Нет в документации списка что можно сделать и что сделать нельзя. Нет списка функции которые друг с другом работают или не работают. Нужно как-то вычислять что работает, а что нет.
Какими способами можно взять sec_code из индикатора и использовать его в скрипте запускаемом вручную? Из сообщения можно взять? Попробовал, похоже невозможно.
AddLabel или GetLabelParams (внутренние их параметры) могут принимать значения sec_code что бы взять sec_code из индикатора и использовать его в скрипте запускаемом вручную?
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
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 скриптом?
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
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. Код вроде правильный, что не так? Как проверить есть ли метка?
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
Запускаю этот скрипт и ничего. Ни ошибок ни message. Что-то надо еще указать? У меня ТТТ 2 штуки, графиков штук 5, стакан открыт. Как привязать это к ТТТ. Почему ничего не происходит?
Идентификатор индикатора 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 работает. Что там может быть? Почему не работает код?
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
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен 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 по всякому пытался вызвать, но не работало.
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
Идентификатор назначен на Price. Тоесть именно на график. Хочу сделать сделку по этому графику. Для отправки ордера на сделку нужен sec_code. Как я могу его получить? Не задавать же его вручную. Знаю что можно из таблицы заявок вытащить local sec_code = last_order.sec_code. Должен же быть способ с графика открытого получить sec_code для заявки.
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
1) Весь опыт пара калькуляторов на джавсакрипте и пара простеньких батников. 2) Пару недель пытаюсь что-то делать на Lua, и продолжаю, через полгода думаю буду знать больше. Недавно понял в main () слип не тормозит весь квик сразу, это был прорыв! 3) Ни разу, смотрю несистемно, кусками, скорее всего это неправильно, но заставить себя систематически штудировать я не в силах. У меня много вопросов, но ответов нет в документации, примеров там мало, нужной информации мало. Интерпритация почему произошла какая ошибка там нет, как LUA работает под квиком. Думаю что важнее понимать спецификацию работы квика с LUA (куча прог где LUA работает, но ведь код для каждой конкретной проги будет разный? или все везде одинаково? вот где в документах ответ на этот вопрос? только опытный тут ответит), у меня сберквик думаю под ним свои ньюансы работы и куча кода из примеров просто не работает под ним, надо напильником его дорабатывать.
У меня вроде простая задачка "Нажал скрипт с названием купить или скрипт с названием продать. И выставляется заявка с тейк профитом и стопом по бумаге с исполненной заявкой с таким же числом лотов который в исполненной заявке." Стоит ли от корки до корки все пройти что бы ее решить? Или это таки сложная задача?
Кстати она вообще выполнима средствами LUA на квике?
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
Задача выставить заявку по данным которые взяты из последней заявки (название бумаги и число лотов).
1) Я зашел в бумагу, заявка исполнена.
2) Нажал скрипт с названием купить или скрипт с названием продать. И выставляется заявка с тейк профитом и стопом по бумаге с исполненной заявкой с таким же числом лотов который в исполненной заявке.
3) профит!
Но как взять название бумаги и число лотов из последней заявки?
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
-- Входная точка для скрипта 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, что бы не спросил.
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
У меня задача получать из заявки (исполненной или снятой) название акции и число лотов. Но не получается совсем вытянуть эту инфу. Я постоянно упрощаю задачу в надежде получить хоть какой-то ответ по запросу. Запросить all по портфелю что может быть проще?
Пытаюсь получить название акции из последней заявки, конечно ошибку дает.
-- Получаем последнюю заявку local lastOrder = getNumberOf("orders") - 1 local orderClass = getClass("orders") local order = orderClass:sharedClonable()
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
function main() portfolio = getPortfolioInfo("all") message(tostring(portfolio)) end
ИЛИ
function main() portfolio = getParamEx("all") message(tostring(portfolio)) end
Думаю где-то что-то я сильно не понимаю. Мнение такое что getPortfolioInfo и getParamEx не имеет доступа к портфелю или таблице заявок. Параметры бумаг конкретных могу получать. Например цену последней сделки Лукойла выдает легко. Использую Сберквик. Куда копать?