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

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

Страницы: 1
Вывод данных из индикатора
 
Забыл добавить что ошибка (bad argument #1 to 'insert' (table expected, got nil)) отсылает к строчке с этим кодом:
table.sort(tbl, function(lhs, rhs) return (lhs.x < rhs.x) end)
Вывод данных из индикатора
 
Цитата
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 CreateTable()
 
  t_id = AllocTable()  
 
  AddColumn(t_id, 0, "SHORT/LONG", true, QTABLE_STRING_TYPE,15)
  AddColumn(t_id, 1, "TIKER", true, QTABLE_STRING_TYPE, 15)
  AddColumn(t_id, 2, "POINTS", true, QTABLE_DOUBLE_TYPE, 15)
 
  t = CreateWindow(t_id)
   
  SetWindowCaption(t_id, "TABLE")
 
  InsertRow(t_id, -1)

end
Вывод данных из индикатора
 
Цитата
Anton написал:
if X>100 then
function CreateTable()
 
  t_id = AllocTable()  
 
  AddColumn(t_id, 0, "SHORT/LONG", true, QTABLE_STRING_TYPE,15)
  AddColumn(t_id, 1, "TIKER", true, QTABLE_STRING_TYPE, 15)
  AddColumn(t_id, 2, "POINTS", true, QTABLE_DOUBLE_TYPE, 15)
 
 
  t = CreateWindow(t_id)
   
  SetWindowCaption(t_id, "TABLE")
 
  InsertRow(t_id, -1)

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
В общем получается вот так, что строчка добавляется в таблицу только когда выполняется условие, что куда переставить чтоб не сломать что уже работает я не понял если честно) не работает тут только сортировка корректно..  
Вывод данных из индикатора
 
Нашел как сортируется полученная таблица(кликать по заголовку столбца с зажатым 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 до количества инструментов. Не знаю что сделать чтобы правильно сортировался последний столбец  
Вывод данных из индикатора
 
Цитата
Anton написал:
Цитата
Nikita написал:
вроде бы упоминается сортировка
Я тут не в курсе, к сожалению. Тут есть люди, кто активно с таблицами работает, если увидят те му, что-то полезное ответят по сортировке.
Спасибо за советы, самое сложное сделано, осталось понять как сделать сортировку)
Вывод данных из индикатора
 
Цитата
Anton написал:
Цитата
Nikita написал:
а вот сортировки от меньшего к большему значению нет, или я чего-то не вижу?  
Да вроде как ее и нет. Но можно разложить строки из скрипта в любом желаемом порядке
Вот вроде бы в руководстве по QLUA пишут
"Если параметр «value» не задан для ячеек всех остальных типов, то по
столбцам, содержащим такие ячейки, не будет корректно работать сортировка,
фильтрация и условное форматирование (см. Приложение
2)."  вроде бы упоминается сортировка...
Вывод данных из индикатора
 
Цитата
Anton написал:
Цитата
Nikita написал:
( в итоге не видит то что переменная стала равна 1 почему то)
Потому что CreateTable закончилась до того, как присвоили 1 условию, т.е. переменная и не стала равна 1, поэтому и видеть нечего.

Цитата
Nikita написал:
(тут еще загвоздка как установить в ячейку значение Х из верхней части кода)
Вытащите это из CreateTable, создайте пустую таблицу в этой функции и все. Дальше вставьте код из первого варианта, только вместо message используйте InsertRow/SetCell в свою таблицу. Когда таблица будет готова, сделайте вечный цикл до нажатия "остановить" или закрытия квика. Перед выходом из main прибейте свое окно.
Спасибо) Все подкрутил) но вот то что хотел сделать с таблицей похоже нельзя( фильтр в ней есть, а вот сортировки от меньшего к большему значению нет, или я чего-то не вижу?  
Вывод данных из индикатора
 
Цитата
Anton написал:
Смотрите в документации функции для работы с таблицами рабочего места quik.
Посмотрел, спасибо, но возникло несколько вопросов,
JL=0

function main()

CreateTable()
...
if i==1 then


if X>100 then

JL=1 --------------------(ввел переменную как индикатор что условие выполнено)

end
end
end


function CreateTable()
 
  t_id = AllocTable()  
 
  AddColumn(t_id, 0, "SHORT/LONG", true, QTABLE_STRING_TYPE,15)
  AddColumn(t_id, 1, "TIKER", true, QTABLE_STRING_TYPE, 15)
  AddColumn(t_id, 2, "POINTS", true, QTABLE_DOUBLE_TYPE, 15)
   
  t = CreateWindow(t_id)
   
  SetWindowCaption(t_id, "TABLE")
 
  InsertRow(t_id, -1)

  if JL==1 then  ---------------------------( в итоге не видит то что переменная стала равна 1 почему то)
 
   InsertRow(t_id,1)
  SetCell(t_id, 1, 1, Х)  ----------------(тут еще загвоздка как установить в ячейку значение Х из верхней части кода)
  end
  end
Вывод данных из индикатора
 
Имеется индикатор, в первую минуту торгов выдает данные (тикер и число) по какому либо инструменту при выполнении условия, данные выдаются в сообщении при этом если выполнилось условие сразу по нескольким инструментам, то выдается несколько сообщений подряд за пару секунд при большой волатильности, и приходится пролистывать их обратно чтобы увидеть предыдущие, есть ли вариант выводить эту информацию ввиде таблицы или хотя бы списка который бы просто пополнялся инструментами у которых выполнено условие, чтобы все данные были перед глазами? Ниже основная часть кода.

while EnterInPos == "No" do

for i=1, #SecCode and #T do

ds=CreateDataSource ("SPBFUT", SecCode[i], INTERVAL_M1)

if i==1 then


if XXX then

message(YYY)

end
end

if i==2 then
.
.
.  
Как в скрипте получить нужный параметр из произвольной таблицы?
 
Здравствуйте, вопрос по параметру 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?
 
Так все-таки как можно подгрузить котировки к графику? все что мог пересмотрел ничего не нашел)
Коридор цен (параметры PRICEMAX и PRICEMIN)
 
Нашел на сайте Мосбиржи эту таблицу ввиде файла PriceMoveLimit.dbf   может быть есть возможность добавить информацию из этого файла в квик вручную чтобы заполнить пробелы в таблице или просто открыть в блокноте))?
Коридор цен (параметры PRICEMAX и PRICEMIN)
 
Возможно ли посмотреть планки на акциях в квике? во время торговли в таблице только для фьючей указывается значение как и говорилось выше(
Работа кода, Действие кода в условном операторе 1 раз внутри постоянного цикла
 
Цитата
Imersio Arrigo написал:
Цитата
Nikita написал:
там были статические переменные, а тут их насколько я понял нет(
Переменные, объявленные за пределами main, по отношению к ней статические.
Большое спасибо) Теперь все работает как надо)
Работа кода, Действие кода в условном операторе 1 раз внутри постоянного цикла
 
Здравствуйте, написал вот такой код

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 источник данных если его запустить во внерабочее время ?
 
Здравствуйте, не стал создавать отдельную тему, т.к. вопрос почти о том же, ds:Size() равен 0 (не замечал во сколько это началось) скрипт работал ранее после 19-00 мск, но я его кардинально переписал и ds:Size() все время выдает 0. Вопрос, это будет до закрытия вечерней сессии?[если да, то как тогда делать возможным работу скрипта во время вечерней сессии в котором необходимо значение ds:Size() ] или я что-то делаю не так?
Страницы: 1
Наверх