1

Тема: Нестандартный таймфрейм Quik

Здравствуйте коллеги, подскажите пожалуйста кто знает как сделать  нестандартный таймфрейм?
Например 30 секунд, с чего начать ?
То есть что бы сделать такую же таблицу как в getCandlesByIndex

2

Re: Нестандартный таймфрейм Quik

iforts пишет:

Здравствуйте коллеги, подскажите пожалуйста кто знает как сделать  нестандартный таймфрейм?
Например 30 секунд, с чего начать ?
То есть что бы сделать такую же таблицу как в getCandlesByIndex

Здравствуйте, а откуда собираетесь данные получать для формирования баров?

3 (2021-06-16 14:34:38 отредактировано iforts)

Re: Нестандартный таймфрейм Quik

Из getParamEx2(class_code, sec_code, "last").param_value
наверное лучше брать

4

Re: Нестандартный таймфрейм Quik

iforts пишет:

Из getParamEx2(class_code, sec_code, "last").param_value
наверное лучше брать

не пойдет, getParamEx2 выдает снепшоты. обезличенные сделки, но нужно следить что они есть, брокер может их тупо перестать транслировать.

local exitflag
local ticker = "SiM1"
local tf = 30
local candles = {}

local function calculate(item)
    if item.sec_code ~= ticker then return end
    --так можно округлять только! до таймфрема 3600
    local tm = math.floor(os.time(item.datetime)/tf) * tf
    local price, qty = item.price, item.qty
    
    if not candles[tm] then
        local index = #candles+1
        candles[index] = tm
        candles[tm] = 
        {
            O = price, H = price, L = price, C = price, V = qty, I = index
        }
        return
    end
    
    local bar = candles[tm]
    if price > bar.H then bar.H = price end
    if price < bar.L then bar.L = price end
    bar.V = bar.V + qty
end
function main()
    local last_row = 0
    
    while not exitflag do
        local row = getNumberOf("all_trades")
        if row > last_row then
            for i = last_row, row-1 do
                calculate(getItem("all_trades",i))
                if exitflag then break end
            end
            last_row = row
        end
        sleep(1)
    end
---[[ проверка после остановки скрипта
    local tm = candles[10]
    local bar = candles[tm]
    message(
        os.date("%c", tm)..
        "\n O= "..tostring(bar.O)..
        "\n H= "..tostring(bar.H)..
        "\n L= "..tostring(bar.L)..
        "\n C= "..tostring(bar.C)..
        "\n V= "..tostring(bar.V)..
        "\n I= "..tostring(bar.I)..
        "\n Всего баров: "..tostring(#candles)
    )
--]]
end
function OnStop()
    exitflag = true
    return 300
end

5

Re: Нестандартный таймфрейм Quik

Спасибо!

6

Re: Нестандартный таймфрейм Quik

А снепшот это что? Могут быть пропуски данных?

7

Re: Нестандартный таймфрейм Quik

iforts пишет:

Спасибо!

Пожалуйста

8

Re: Нестандартный таймфрейм Quik

iforts пишет:

А снепшот это что? Могут быть пропуски данных?

снепшот это вырванный из потока данных снимок, конечно будут пропуски.

9

Re: Нестандартный таймфрейм Quik

А можно ли в квике создать график с таким нестандартным таймфреймом?

10

Re: Нестандартный таймфрейм Quik

iforts пишет:

А можно ли в квике создать график с таким нестандартным таймфреймом?

нет

11

Re: Нестандартный таймфрейм Quik

А как сделать чтобы  начало  свечи по времени например  для 30 сек как 1/2 60 сек свечи квика, то есть начало и цена открытия совпадала с открытием 1 минутной свечи, а конец и закрытие соответственно через 30 сек после начала 1 мин. или оно так и будет?

12

Re: Нестандартный таймфрейм Quik

мой совет - переводите дату-время в unixime с милисекундами - получите целое число от начала эпохи. потом делите это число нацело на интервал. если 60000 это секунда, то делите на 30000. получите номер свечи, в которую нужно поместить данную сделку.