1

Тема: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

Кто может подсказать такой вопрос: в нижеизложенном скрипте после запуска, заполняется таблица (все нормально), но текущие значения не изменяются и остаются неизменными, когда уже пошла следующая свеча, т.е таблица не обновляется, только перезаполняется после перезагрузки скрипта. Как сделать, чтобы текущие значения постоянно обновлялись? Вот скрипт:

gridIchimoku = VCL.StringGrid(mainForm,"gridIchimoku")
gridIchimoku._ = { Top = 18, left = 270, Width=990, ColCount = 10, RowCount = 10, Height = 200, AutoEdit = False, FixedCols = 1, FixedRows = 1, Flat = True }
gridIchimoku:SetColParams({
  {Width= 160, Alignment="taleftJustify", Title={Caption="Индикатор", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Текущее значение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Последнее начение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Предпоследнее значение", Alignment="taCenter"}},
})

local class_code, sec_code = CLASS_CODE, SEC_CODE
local tag = "ICHMK"
local count = getNumCandles (tag)
local T0, N0, L0 = getCandlesByIndex (tag, 0, count - 3, 3)  --получаем таблицу с последними значениями Tenkan-sen
local T1, N1, L1 = getCandlesByIndex (tag, 1, count - 3, 3)  --получаем таблицу с последними значениями Kijun-sen
local T2, N2, L2 = getCandlesByIndex (tag, 2, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 1
local T3, N3, L3 = getCandlesByIndex (tag, 3, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 2
local T4, N4, L4 = getCandlesByIndex (tag, 4, count - 3, 3)  --получаем таблицу с последними значениями Chinkou Span

gridIchimoku:SetCell(1, 1, L0)
gridIchimoku:SetCell(2, 1, T0[2].close)
gridIchimoku:SetCell(3, 1, T0[1].close)
gridIchimoku:SetCell(4, 1, T0[0].close)
gridIchimoku:SetCell(1, 2, L1)
gridIchimoku:SetCell(2, 2, T1[2].close)
gridIchimoku:SetCell(3, 2, T1[1].close)
gridIchimoku:SetCell(4, 2, T1[0].close)
gridIchimoku:SetCell(1, 3, L2)
gridIchimoku:SetCell(2, 3, T2[2].close)
gridIchimoku:SetCell(3, 3, T2[1].close)
gridIchimoku:SetCell(4, 3, T2[0].close)
gridIchimoku:SetCell(1, 4, L3)
gridIchimoku:SetCell(2, 4, T3[2].close)
gridIchimoku:SetCell(3, 4, T3[1].close)
gridIchimoku:SetCell(4, 4, T3[0].close)
gridIchimoku:SetCell(1, 5, L4)
gridIchimoku:SetCell(2, 5, T4[2].close)
gridIchimoku:SetCell(3, 5, T4[1].close)
gridIchimoku:SetCell(4, 5, T4[0].close)

2

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

diksan,  колбэками принципиально не пользуетесь?

3

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, а пример есть, для использования в таблице?

4

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, а какой callbaск вы бы посоветовали в данном случае подписаться?
Мне на ум приходит только создание DataSource на тот же инструмент, что и график, и подписаться на обновления данных этого DataSource. Но может есть идеи более простые/удобные?

5

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

diksan пишет:

GREEN_X5, а пример есть, для использования в таблице?

Вы дали пример кода который не запускается, соотв. не создает никаких таблиц и ничего заполняет. Допишите его до запускаемого и я добавлю туда колбэк.

6

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

korovin пишет:

GREEN_X5, а какой callbaск вы бы посоветовали в данном случае подписаться?
Мне на ум приходит только создание DataSource на тот же инструмент, что и график, и подписаться на обновления данных этого DataSource. Но может есть идеи более простые/удобные?

Да нормальный способ. Мы ведь хотим только изменение свечек отслеживать. Можно конечно и на OnParam() повесить, но тогда получим слишком частое ненужное заполнение vcl grid неизмененными значениями.
Обращение к vcl нужно по возможности минимизировать в угоду скорости скрипта.

7

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5 пишет:
korovin пишет:

GREEN_X5, а какой callbaск вы бы посоветовали в данном случае подписаться?
Мне на ум приходит только создание DataSource на тот же инструмент, что и график, и подписаться на обновления данных этого DataSource. Но может есть идеи более простые/удобные?

Да нормальный способ. Мы ведь хотим только изменение свечек отслеживать. Можно конечно и на OnParam() повесить, но тогда получим слишком частое ненужное заполнение vcl grid неизмененными значениями.
Обращение к vcl нужно по возможности минимизировать в угоду скорости скрипта.

Сравнение параметра "last" в OnParam() и отсечку по новому индексу свечи.

8 (2016-01-28 13:39:56 отредактировано GREEN_X5)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

kalikazandr пишет:
GREEN_X5 пишет:
korovin пишет:

GREEN_X5, а какой callbaск вы бы посоветовали в данном случае подписаться?
Мне на ум приходит только создание DataSource на тот же инструмент, что и график, и подписаться на обновления данных этого DataSource. Но может есть идеи более простые/удобные?

Да нормальный способ. Мы ведь хотим только изменение свечек отслеживать. Можно конечно и на OnParam() повесить, но тогда получим слишком частое ненужное заполнение vcl grid неизмененными значениями.
Обращение к vcl нужно по возможности минимизировать в угоду скорости скрипта.

Сравнение параметра "last" в OnParam() и отсечку по новому индексу свечи.

Новая свечка может быть построена без изменения last, если не было сделок.

9 (2016-01-28 15:50:49 отредактировано kalikazandr)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5 пишет:

Новая свечка может быть построена без изменения last, если не было сделок.

Нет

10

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

kalikazandr пишет:
GREEN_X5 пишет:

Новая свечка может быть построена без изменения last, если не было сделок.

Нет

Да.
Свечка закрывается по времени её окончания, а не по сделке.
Последняя сделка, попавшая во временной интервал свечки, становится последней сделкой для свечки. При этом не важно, произошла сделка в последние микросекунды свечи несколько часов назад (для дневных свечей, например, если сделки по инструменту очень редки).

Другое дело, что для целей именно отображения параметров свечей, как в вопросе автора, нас в общем-то как раз устроят моменты именно сделок, потому что на момент каждой сделки можно считать, что она и есть последняя в свече.
При этом без очередной сделки новая свеча фактически не возникнет, т.е. опять же без возникновения сделок нет смысла перечитывать  параметры свечей на графике.
Хм, занятно, неожиданно  )

11

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

korovin пишет:

Да.

Нет. Новая свеча не может быть начата без сделки, которая попадет в текущий таймфрейм и станет ценой открытия свечи.
Ничего занятного в этом нет.

12 (2016-01-29 01:41:42 отредактировано diksan)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5 пишет:
diksan пишет:

GREEN_X5, а пример есть, для использования в таблице?

Вы дали пример кода который не запускается, соотв. не создает никаких таблиц и ничего заполняет. Допишите его до запускаемого и я добавлю туда колбэк.

GREEN_X5, вот даю рабочий код! Только вам надо индикатор Ишимоку открыть на графике и дать ему Идентификатор: ICHMK   Да и чтобы отображались данные, уберите галочку в параметрах диаграммы "Отображать интервалы в будущее".

local VCL=require "qvcl"

local stopped
function OnStop()
    if mainForm then mainForm:Release(); mainForm = nil; VCL = nil end
    stopped = true
end

--================================== Интерфейс =================================

mainForm = VCL.Form({Name = "mainForm", Height = 764, Width = 1330, Caption = "",
Position = "", OnClose = OnStop})  --вызываем OnStop()

gridIchimoku = VCL.StringGrid(mainForm,"gridIchimoku")
gridIchimoku._ = { Top = 20, left = 20, Width=710, ColCount = 10, RowCount = 6, Height = 140, AutoEdit = False, FixedCols = 1, FixedRows = 1, Flat = True }
gridIchimoku:SetColParams({
  {Width= 160, Alignment="taleftJustify", Title={Caption="Индикатор", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Текущее значение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Последнее начение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Предпоследнее значение", Alignment="taCenter"}},
})

local class_code, sec_code = CLASS_CODE, SEC_CODE
local tag = "ICHMK"
local count = getNumCandles (tag)
local T0, N0, L0 = getCandlesByIndex (tag, 0, count - 3, 3)  --получаем таблицу с последними значениями Tenkan-sen
local T1, N1, L1 = getCandlesByIndex (tag, 1, count - 3, 3)  --получаем таблицу с последними значениями Kijun-sen
local T2, N2, L2 = getCandlesByIndex (tag, 2, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 1
local T3, N3, L3 = getCandlesByIndex (tag, 3, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 2
local T4, N4, L4 = getCandlesByIndex (tag, 4, count - 3, 3)  --получаем таблицу с последними значениями Chinkou Span

gridIchimoku:SetCell(1, 1, L0)
gridIchimoku:SetCell(2, 1, T0[2].close)
gridIchimoku:SetCell(3, 1, T0[1].close)
gridIchimoku:SetCell(4, 1, T0[0].close)
gridIchimoku:SetCell(1, 2, L1)
gridIchimoku:SetCell(2, 2, T1[2].close)
gridIchimoku:SetCell(3, 2, T1[1].close)
gridIchimoku:SetCell(4, 2, T1[0].close)
gridIchimoku:SetCell(1, 3, L2)
gridIchimoku:SetCell(2, 3, T2[2].close)
gridIchimoku:SetCell(3, 3, T2[1].close)
gridIchimoku:SetCell(4, 3, T2[0].close)
gridIchimoku:SetCell(1, 4, L3)
gridIchimoku:SetCell(2, 4, T3[2].close)
gridIchimoku:SetCell(3, 4, T3[1].close)
gridIchimoku:SetCell(4, 4, T3[0].close)
gridIchimoku:SetCell(1, 5, L4)
gridIchimoku:SetCell(2, 5, T4[2].close)
gridIchimoku:SetCell(3, 5, T4[1].close)
gridIchimoku:SetCell(4, 5, T4[0].close)

mainForm:Show()   -- Конец скрипта интерфейса


--================================ Основной блок ===============================
function OnInit()
  mainForm:Show()
  is_run = true
end



function main()
    while not stopped do
       sleep (1)
    end
    sleep(300)
end

13 (2016-01-30 05:40:21 отредактировано GREEN_X5)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

Например вот так таблица будет обновляться при появлении новой свечи
Запустите этот код

require "qvcl"

function OnStop()
  mainForm:Release()
  is_run=false
end

is_run=true

function main()   
  while is_run do sleep(50) end 
end

mainForm  = vcl.Form({borderStyle = "bsSingle", Height = 400, Width = 900, Caption = "test", OnClose = OnStop})
gridIchimoku = vcl.StringGrid(mainForm,{Top = 18, Left = 5, Width=800, Height = 200, ColCount = 10, RowCount = 6, FixedCols = 1, FixedRows = 1})
x={{160,160,160,160},{"taleftJustify","taRightJustify","taRightJustify","taRightJustify"},{"Индикатор","Текущее значение","Последнее значение","Предпоследнее значение"}}
for i=1, #x[1] do gridIchimoku:AddCol({Width=x[1][i], Alignment=x[2][i], Title={Caption=x[3][i], Alignment="taCenter"}}) end x=nil
mainForm:Show()

tag = "ICHMK"
qtycandle=0

function EditGrid(id,count)
    for i=0,4 do
        local t, n, l = getCandlesByIndex (id, i, count - 3, 3)
        gridIchimoku:SetCell(1, i+1, l)        
        for y=0,2 do
            gridIchimoku:SetCell( y+2, i+1, t[y].close )
        end   
    end
end

function OnParam(c,s)
    local count = getNumCandles (tag)
    if qtycandle~=count then qtycandle=count; EditGrid(tag,count); end
end

OnParam()

14

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

Спасибо, GREEN_X5, буду разбираться!

15 (2016-01-30 12:52:28 отредактировано diksan)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, похоже ошибка в коде у вас вышла?
"Текущее значение" в таблице вписывает как "Предпоследнее"!

16

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

diksan пишет:

GREEN_X5, похоже ошибка в коде у вас вышла?
"Текущее значение" в таблице вписывает как "Предпоследнее"!

Так лучше?

require "qvcl"

function OnStop()
  mainForm:Release()
  is_run=false
end

is_run=true

function main()   
  while is_run do sleep(50) end 
end

mainForm  = vcl.Form({borderStyle = "bsSingle", Height = 400, Width = 900, Caption = "test", OnClose = OnStop})
gridIchimoku = vcl.StringGrid(mainForm,{Top = 18, Left = 5, Width=800, Height = 200, ColCount = 10, RowCount = 6, FixedCols = 1, FixedRows = 1})
x={{160,160,160,160},{"taleftJustify","taRightJustify","taRightJustify","taRightJustify"},{"Индикатор","Текущее значение","Последнее значение","Предпоследнее значение"}}
for i=1, #x[1] do gridIchimoku:AddCol({Width=x[1][i], Alignment=x[2][i], Title={Caption=x[3][i], Alignment="taCenter"}}) end x=nil
mainForm:Show()

tag = "ICHMK"
qtycandle=0

function EditGrid(id,count)
    for i=0,4 do
        local t, n, l = getCandlesByIndex (id, i, count - 3, 3)
        gridIchimoku:SetCell(1, i+1, l)        
        for y=0,2 do
            gridIchimoku:SetCell( y+2, i+1, t[2-y].close )
        end   
    end
end

function OnParam(c,s)
    local count = getNumCandles (tag)
    if qtycandle~=count then qtycandle=count; EditGrid(tag,count); end
end

OnParam()

17 (2016-02-01 01:29:30 отредактировано diksan)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, спасибо, я разобрался сам, просто прокомментировал!

18

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, спасибо еще раз за помощь

19 (2016-02-01 12:18:32 отредактировано diksan)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, проверил работоспособность таблицы. Все работает, за исключением того, что в графе "текущее значение" данные в он-лайн режиме не изменяются, а стоят значения закрытия прошлой свечи. Но это одно! Главное, что хотел спросить, а можно прописать этот код, по моему образцу кода, мне нужно чтобы я смог потом обращаться к каждой линии индикатора, т.е к L0 L1 L2 L3 L4, также к T0 T1 T2 T3 T4 с временными интервалами закрытия?
Ко всем этим значениям точнее:
gridIchimoku:SetCell(1, 1, L0)
gridIchimoku:SetCell(2, 1, T0[2].close)
gridIchimoku:SetCell(3, 1, T0[1].close)
gridIchimoku:SetCell(4, 1, T0[0].close)
gridIchimoku:SetCell(1, 2, L1)
gridIchimoku:SetCell(2, 2, T1[2].close)
gridIchimoku:SetCell(3, 2, T1[1].close)
gridIchimoku:SetCell(4, 2, T1[0].close)
gridIchimoku:SetCell(1, 3, L2)
gridIchimoku:SetCell(2, 3, T2[2].close)
gridIchimoku:SetCell(3, 3, T2[1].close)
gridIchimoku:SetCell(4, 3, T2[0].close)
gridIchimoku:SetCell(1, 4, L3)
gridIchimoku:SetCell(2, 4, T3[2].close)
gridIchimoku:SetCell(3, 4, T3[1].close)
gridIchimoku:SetCell(4, 4, T3[0].close)
gridIchimoku:SetCell(1, 5, L4)
gridIchimoku:SetCell(2, 5, T4[2].close)
gridIchimoku:SetCell(3, 5, T4[1].close)
gridIchimoku:SetCell(4, 5, T4[0].close)

20 (2016-02-01 13:59:48 отредактировано GREEN_X5)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

diksan пишет:

GREEN_X5, проверил работоспособность таблицы. Все работает, за исключением того, что в графе "текущее значение" данные в он-лайн режиме не изменяются, а стоят значения закрытия прошлой свечи. Но это одно! Главное, что хотел спросить, а можно прописать этот код, по моему образцу кода, мне нужно чтобы я смог потом обращаться к каждой линии индикатора, т.е к L0 L1 L2 L3 L4, также к T0 T1 T2 T3 T4 с временными интервалами закрытия?

Да можно конечно. ) Только не знаю зачем. Мой код заполняет таблицу так же по пунктам (ячейкам), только использует цикл, этот блок стал в несколько раз короче. Если всё-таки хотите в своем варианте, просто замените цикл в функции EditGrid(id,count) своей портянкой, будет то же самое.
Я написал пример колбэка для новой свечи. Если нужна онлайн реакция на изменение каждого параметра Ишимоку, допишите проверку на изменение каждого параметра, это вроде несложно на данном выше примере. Если разрешите, я не буду полностью писать за Вас весь робот. ) Слишком много оплачиваемой работы. )

Начните например с модификации таблицы памяти последних значений
qtycandle={0,0,0,0,0,0}
где 5 последних ячеек запоминают последние значения линий Ишимоку для выявления изменений.

И насчет галочки "Не строить в будущее", Ишимоку так работает не как задумал автор. Попробуйте считывать параметры настроек Ишимоку и эти значения подставлять в рассматриваемые номера свечек, таблица будет заполняться корректными данными последних значений для каждой линии индикатора, включая оборвавшиеся в прошлом и протянутые в будущее.

21

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

Ок, спасибо, буду пробовать.

22 (2016-02-02 16:29:42 отредактировано diksan)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, можете посмотреть где тут у меня ошибка в обновлении таблицы?
вот код таблицы который я планирую применить:

require "qvcl"

function OnStop()
  mainForm:Release()
  is_run=false
end

is_run=true

PRICE_ID = "PRICE";
INDICATOR_ID = "ICHMK";
qtycandle=0

function main()
  while is_run do sleep(50) end
end

mainForm  = vcl.Form({borderStyle = "bsSingle", Height = 400, Width = 1000, Caption = "test", OnClose = OnStop})
gridTableIndicator = vcl.StringGrid(mainForm,{Top = 18, Left = 5, Width=950, Height = 200, ColCount = 10, RowCount = 10, FixedCols = 1, FixedRows = 1})
x={{160,100,100,100,100,100,100,100},{"taleftJustify","taRightJustify","taRightJustify","taRightJustify","taRightJustify","taRightJustify","taRightJustify","taRightJustify"},{"Индикатор","Значение (0)","Значение (-1)","Значение (-2)","Значение (-3)","Значение (-4)","№ линии","№ индикатора"}}
for i=1, #x[1] do gridTableIndicator:AddCol({Width=x[1][i], Alignment=x[2][i], Title={Caption=x[3][i], Alignment="taCenter"}}) end x=nil
mainForm:Show()


function EditGrid()
-- PRICE
local class_code, sec_code = CLASS_CODE, SEC_CODE
local PRICE_tag = PRICE_ID
local PRICE_line = getLinesCount(PRICE_tag)
local PRICE_count = getNumCandles (PRICE_tag)
local PRICE_T0, PRICE_N0, PRICE_L0 = getCandlesByIndex (PRICE_tag, 0, PRICE_count - 5, 5)

if PRICE_line >= 0 then
gridTableIndicator:SetCell(1, 1, PRICE_L0)
gridTableIndicator:SetCell(2, 1, PRICE_T0[4].close)
gridTableIndicator:SetCell(3, 1, PRICE_T0[3].close)
gridTableIndicator:SetCell(4, 1, PRICE_T0[2].close)
gridTableIndicator:SetCell(5, 1, PRICE_T0[1].close)
gridTableIndicator:SetCell(6, 1, PRICE_T0[0].close)
gridTableIndicator:SetCell(7, 1, PRICE_line - PRICE_line + 1)
gridTableIndicator:SetCell(8, 1, 0)
end

-- INDICATOR
local class_code, sec_code = CLASS_CODE, SEC_CODE
local INDICATOR_tag = INDICATOR_ID
local INDICATOR_line = getLinesCount(INDICATOR_tag)
local INDICATOR_count = getNumCandles (INDICATOR_tag)
local INDICATOR_T0, INDICATOR_N0, INDICATOR_L0 = getCandlesByIndex (INDICATOR_tag, 0, INDICATOR_count - 5, 5)
local INDICATOR_T1, INDICATOR_N1, INDICATOR_L1 = getCandlesByIndex (INDICATOR_tag, 1, INDICATOR_count - 5, 5)
local INDICATOR_T2, INDICATOR_N2, INDICATOR_L2 = getCandlesByIndex (INDICATOR_tag, 2, INDICATOR_count - 5, 5)
local INDICATOR_T3, INDICATOR_N3, INDICATOR_L3 = getCandlesByIndex (INDICATOR_tag, 3, INDICATOR_count - 5, 5)
local INDICATOR_T4, INDICATOR_N4, INDICATOR_L4 = getCandlesByIndex (INDICATOR_tag, 4, INDICATOR_count - 5, 5)

if INDICATOR_line - 1 >= 0 then
gridTableIndicator:SetCell(1, PRICE_line + 1, INDICATOR_L0)
gridTableIndicator:SetCell(2, PRICE_line + 1, INDICATOR_T0[4].close)
gridTableIndicator:SetCell(3, PRICE_line + 1, INDICATOR_T0[3].close)
gridTableIndicator:SetCell(4, PRICE_line + 1, INDICATOR_T0[2].close)
gridTableIndicator:SetCell(5, PRICE_line + 1, INDICATOR_T0[1].close)
gridTableIndicator:SetCell(6, PRICE_line + 1, INDICATOR_T0[0].close)
gridTableIndicator:SetCell(7, PRICE_line + 1, INDICATOR_line - INDICATOR_line + 1)
gridTableIndicator:SetCell(8, PRICE_line + 1, 1)
end
if INDICATOR_line - 2 >= 0 then
gridTableIndicator:SetCell(1, PRICE_line + 2, INDICATOR_L1)
gridTableIndicator:SetCell(2, PRICE_line + 2, INDICATOR_T1[4].close)
gridTableIndicator:SetCell(3, PRICE_line + 2, INDICATOR_T1[3].close)
gridTableIndicator:SetCell(4, PRICE_line + 2, INDICATOR_T1[2].close)
gridTableIndicator:SetCell(5, PRICE_line + 2, INDICATOR_T1[1].close)
gridTableIndicator:SetCell(6, PRICE_line + 2, INDICATOR_T1[0].close)
gridTableIndicator:SetCell(7, PRICE_line + 2, INDICATOR_line - INDICATOR_line + 2)
gridTableIndicator:SetCell(8, PRICE_line + 2, 1)
end
if INDICATOR_line - 3 >= 0 then
gridTableIndicator:SetCell(1, PRICE_line + 3, INDICATOR_L2)
gridTableIndicator:SetCell(2, PRICE_line + 3, INDICATOR_T2[4].close)
gridTableIndicator:SetCell(3, PRICE_line + 3, INDICATOR_T2[3].close)
gridTableIndicator:SetCell(4, PRICE_line + 3, INDICATOR_T2[2].close)
gridTableIndicator:SetCell(5, PRICE_line + 3, INDICATOR_T2[1].close)
gridTableIndicator:SetCell(6, PRICE_line + 3, INDICATOR_T2[0].close)
gridTableIndicator:SetCell(7, PRICE_line + 3, INDICATOR_line - INDICATOR_line + 3)
gridTableIndicator:SetCell(8, PRICE_line + 3, 1)
end
if INDICATOR_line - 4 >= 0 then
gridTableIndicator:SetCell(1, PRICE_line + 4, INDICATOR_L3)
gridTableIndicator:SetCell(2, PRICE_line + 4, INDICATOR_T3[4].close)
gridTableIndicator:SetCell(3, PRICE_line + 4, INDICATOR_T3[3].close)
gridTableIndicator:SetCell(4, PRICE_line + 4, INDICATOR_T3[2].close)
gridTableIndicator:SetCell(5, PRICE_line + 4, INDICATOR_T3[1].close)
gridTableIndicator:SetCell(6, PRICE_line + 4, INDICATOR_T3[0].close)
gridTableIndicator:SetCell(7, PRICE_line + 4, INDICATOR_line - INDICATOR_line + 4)
gridTableIndicator:SetCell(8, PRICE_line + 4, 1)
end
if INDICATOR_line - 5 >= 0 then
gridTableIndicator:SetCell(1, PRICE_line + 5, INDICATOR_L4)
gridTableIndicator:SetCell(2, PRICE_line + 5, INDICATOR_T4[4].close)
gridTableIndicator:SetCell(3, PRICE_line + 5, INDICATOR_T4[3].close)
gridTableIndicator:SetCell(4, PRICE_line + 5, INDICATOR_T4[2].close)
gridTableIndicator:SetCell(5, PRICE_line + 5, INDICATOR_T4[1].close)
gridTableIndicator:SetCell(6, PRICE_line + 5, INDICATOR_T4[0].close)
gridTableIndicator:SetCell(7, PRICE_line + 5, INDICATOR_line - INDICATOR_line + 5)
gridTableIndicator:SetCell(8, PRICE_line + 5, 1)
end
end

function OnParam(c,s)
    local PRICE_count = getNumCandles (PRICE_tag)
    if qtycandle~=PRICE_count then qtycandle=PRICE_count; EditGrid(); end
    local INDICATOR_count = getNumCandles (INDICATOR_tag)
    if qtycandle~=INDICATOR_count then qtycandle=INDICATOR_count; EditGrid(); end
end

OnParam()

Заранее благодарен! извините, я только учусь программированию...

23 (2016-02-02 23:09:21 отредактировано GREEN_X5)

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

diksan пишет:

GREEN_X5, можете посмотреть где тут у меня ошибка в обновлении таблицы?
...
Заранее благодарен! извините, я только учусь программированию...

Квик показывает номер строки и "диагноз" ошибки, в случае моего запуска я вижу - значение элемента [4].close=nil, а значит PRICE_T0 не заполнена нужными данными. Я добавляю вывод в окно Квика флаг-перехватчик проблемы, читаю после запуска, это поможет найти и исправить ошибку.

...
function EditGrid()
-- PRICE
    local class_code, sec_code = CLASS_CODE, SEC_CODE
    local PRICE_tag = PRICE_ID
    local PRICE_line = getLinesCount(PRICE_tag)
    local PRICE_count = getNumCandles (PRICE_tag)
    local PRICE_T0, PRICE_N0, PRICE_L0 = getCandlesByIndex (PRICE_tag, 0, PRICE_count - 5, 5)
    
   message("type="..type(PRICE_T0).." qty="..tostring(#PRICE_T0))   --вывод в Оно сообщений Квик состояния таблицы

    if PRICE_line >= 0 then
        gridTableIndicator:SetCell(1, 1, PRICE_L0)
        gridTableIndicator:SetCell(2, 1, PRICE_T0[4].close)   --Здесь Квик нашел пустое значение таблицы, nil
        ...

Я привел Вам возможный алгоритм поиска ошибок. Это не последняя Ваша ошибка (описка) в программировании, и Вам придется научиться искать их самому.
Что касается использования библиотеки QVCLua, мы без проблем поможем в этой теме.

24

Re: QVCLua: Как заставить обновляться таблицу по новым свечам графика?

GREEN_X5, мне нужно мой шаблон робота, привести в рабочее состояние! Вы могли бы это сделать и сколько это может стоить?