Забыл добавить что ошибка (bad argument #1 to 'insert' (table expected, got nil)) отсылает к строчке с этим кодом: table.sort(tbl, function(lhs, rhs) return (lhs.x < rhs.x) end)
Вывод данных из индикатора
Пользователь
Сообщений: Регистрация: 18.10.2019
07.04.2020 18:10:02
Цитата
Anton написал: Нда. Там так дальше и идет, каждый i имеет свой отдельный блок? А зачем тогда цикл по SecCode, спрашивается. Ну как-то так я имел в виду, работоспособность не гарантирую, чисто пример
Все сортирует замечательно) Только один раз, за несколько секунд заполняет несколько строк в таблице, и индикатор выключается и выдает вот такую ошибку
indicat.lua:65: bad argument #1 to 'insert' (table expected, got nil)
function main() CreateTable() SecCode= {...} local tbl = {} ------------похоже я тут что то не дописал?
ValueImp=10 local Run= "YES" while Run== "YES" do
for i,s in pairs(SecCode) do . . . end
table.sort(tbl, function(lhs, rhs) return (lhs.x < rhs.x) end) for i,r in pairs(tbl) do local idx = InsertRow(t_id, -1) SetCell(t_id, idx, 0, tostring(r.direction)) SetCell(t_id, idx, 1, tostring(r.name)) SetCell(t_id, idx, 2, tostring(r.x)) end tbl = nil end end
function main() SecCode= {....} local Run = "Yes" while Run == "Yes" do
for i=1, #SecCode do
if i==1 then
if X>100 then InsertRow(t_id, i) SetCell(t_id, i, 0,"SHORT") SetCell(t_id, i, 1,tostring(NAME)) SetCell(t_id, i, 2,tostring(X)) end if Y>100 InsertRow(t_id, i) SetCell(t_id, i, 0,"LONG") SetCell(t_id, i, 1,tostring(NAME)) SetCell(t_id, i, 2,tostring(X)) end end
if i==2 then .. .. end В общем получается вот так, что строчка добавляется в таблицу только когда выполняется условие, что куда переставить чтоб не сломать что уже работает я не понял если честно) не работает тут только сортировка корректно..
Вывод данных из индикатора
Пользователь
Сообщений: Регистрация: 18.10.2019
06.04.2020 21:15:14
Нашел как сортируется полученная таблица(кликать по заголовку столбца с зажатым CTRL или SHIFT) , но почему-то сортировка происходит некорректно(( if X>100 then InsertRow(t_id, i) SetCell(t_id, i, 0,"SHORT") SetCell(t_id, i, 1,tostring(NAME)) SetCell(t_id, i, 2,tostring(X)) Вроде бы все правильно, i = от 1 до количества инструментов. Не знаю что сделать чтобы правильно сортировался последний столбец
написал: а вот сортировки от меньшего к большему значению нет, или я чего-то не вижу?
Да вроде как ее и нет. Но можно разложить строки из скрипта в любом желаемом порядке
Вот вроде бы в руководстве по QLUA пишут "Если параметр «value» не задан для ячеек всех остальных типов, то по столбцам, содержащим такие ячейки, не будет корректно работать сортировка, фильтрация и условное форматирование (см. Приложение 2)." вроде бы упоминается сортировка...
написал: ( в итоге не видит то что переменная стала равна 1 почему то)
Потому что CreateTable закончилась до того, как присвоили 1 условию, т.е. переменная и не стала равна 1, поэтому и видеть нечего.
Цитата
написал: (тут еще загвоздка как установить в ячейку значение Х из верхней части кода)
Вытащите это из CreateTable, создайте пустую таблицу в этой функции и все. Дальше вставьте код из первого варианта, только вместо message используйте InsertRow/SetCell в свою таблицу. Когда таблица будет готова, сделайте вечный цикл до нажатия "остановить" или закрытия квика. Перед выходом из main прибейте свое окно.
Спасибо) Все подкрутил) но вот то что хотел сделать с таблицей похоже нельзя( фильтр в ней есть, а вот сортировки от меньшего к большему значению нет, или я чего-то не вижу?
Вывод данных из индикатора
Пользователь
Сообщений: Регистрация: 18.10.2019
04.04.2020 20:37:59
Цитата
Anton написал: Смотрите в документации функции для работы с таблицами рабочего места quik.
Посмотрел, спасибо, но возникло несколько вопросов, JL=0
function main()
CreateTable() ... if i==1 then
if X>100 then
JL=1 --------------------(ввел переменную как индикатор что условие выполнено)
if JL==1 then ---------------------------( в итоге не видит то что переменная стала равна 1 почему то)
InsertRow(t_id,1) SetCell(t_id, 1, 1, Х) ----------------(тут еще загвоздка как установить в ячейку значение Х из верхней части кода) end end
Вывод данных из индикатора
Пользователь
Сообщений: Регистрация: 18.10.2019
04.04.2020 13:17:55
Имеется индикатор, в первую минуту торгов выдает данные (тикер и число) по какому либо инструменту при выполнении условия, данные выдаются в сообщении при этом если выполнилось условие сразу по нескольким инструментам, то выдается несколько сообщений подряд за пару секунд при большой волатильности, и приходится пролистывать их обратно чтобы увидеть предыдущие, есть ли вариант выводить эту информацию ввиде таблицы или хотя бы списка который бы просто пополнялся инструментами у которых выполнено условие, чтобы все данные были перед глазами? Ниже основная часть кода.
Как в скрипте получить нужный параметр из произвольной таблицы?
Пользователь
Сообщений: Регистрация: 18.10.2019
08.02.2020 15:38:19
Здравствуйте, вопрос по параметру VALTODAY, Сделал вот так ds=CreateDataSource ("SPBFUT", SecCode[i], INTERVAL_D1,"VALTODAY") if i==1 then local s=ds:Size() local VAL=tostring(ds:VALTODAY(s)) (по аналогии с ds:H(s) к примеру для HiGH) но видится мне что так делать нельзя Знаю что можно получиться значение параметра вот так VAL = tostring(getParamEx("SPBFUT", SecCode[i],"VALTODAY").param_image) Но мне нужно чтобы был доступ к значению за предыдущие дни, есть ли такая возможность? Вроде бы в CreateDataSource можно использовать параметры такие как "last" , это из справки пример ds1 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "last"), но помимо last в списке возможных параметров, используемых в функции CreateDataSource() есть VALTODAY, а вот как его получить через CreateDataSource не понятно
Импорт данных в QUIK из CVS?, Как можно импортировать данные в QUIK из CVS?
Пользователь
Сообщений: Регистрация: 18.10.2019
01.01.2020 21:57:34
Так все-таки как можно подгрузить котировки к графику? все что мог пересмотрел ничего не нашел)
Коридор цен (параметры PRICEMAX и PRICEMIN)
Пользователь
Сообщений: Регистрация: 18.10.2019
22.12.2019 18:51:31
Нашел на сайте Мосбиржи эту таблицу ввиде файла PriceMoveLimit.dbf может быть есть возможность добавить информацию из этого файла в квик вручную чтобы заполнить пробелы в таблице или просто открыть в блокноте))?
Коридор цен (параметры PRICEMAX и PRICEMIN)
Пользователь
Сообщений: Регистрация: 18.10.2019
22.12.2019 18:24:45
Возможно ли посмотреть планки на акциях в квике? во время торговли в таблице только для фьючей указывается значение как и говорилось выше(
Работа кода, Действие кода в условном операторе 1 раз внутри постоянного цикла
написал: там были статические переменные, а тут их насколько я понял нет(
Переменные, объявленные за пределами main, по отношению к ней статические.
Большое спасибо) Теперь все работает как надо)
Работа кода, Действие кода в условном операторе 1 раз внутри постоянного цикла
Пользователь
Сообщений: Регистрация: 18.10.2019
04.11.2019 00:32:38
Здравствуйте, написал вот такой код
function main() Code={"a1","a2", ..} local R = "No" while R== "No" do
for i=1, #Code do
if i==1 then
if x==y then message("aaa"..b) end
end
if i==2 then
if x==y then message("aaa"..b) end
end
end end end
Возникла проблема с реализацией идеи, всю голову сломал, не могу понять как сделать так чтобы после выполнения условия if x==y при каком-то из значений i, сообщение выдавалось 1 раз, а после этот оператор (if i==1 или if i==2) заново начинал действовать только с новой минуты. Такое можно было сделать в metaeditor в мт4, там были статические переменные, а тут их насколько я понял нет(
Создает ли CreateDataSource источник данных если его запустить во внерабочее время ?
Пользователь
Сообщений: Регистрация: 18.10.2019
19.10.2019 00:06:19
Здравствуйте, не стал создавать отдельную тему, т.к. вопрос почти о том же, ds:Size() равен 0 (не замечал во сколько это началось) скрипт работал ранее после 19-00 мск, но я его кардинально переписал и ds:Size() все время выдает 0. Вопрос, это будет до закрытия вечерней сессии?[если да, то как тогда делать возможным работу скрипта во время вечерней сессии в котором необходимо значение ds:Size() ] или я что-то делаю не так?