SearchItems

Страницы: 1
RSS
SearchItems, Вложенные таблицы
 
Как в функцию SearchItems передать в качестве параметров элементы таблиц, вложенных в таблицы, например "legs" из таблицы "securities"?
Надо делать так, как надо. А как не надо - делать не надо.
 
Если правильно понял. Можно попробовать передачу через Замыкание Lua функции.
Если объявить функцию обратного вызова fn прямо внутри кода, она автоматически видит и захватывает все локальные переменные, объявленные выше неё.
Допустим стратегия календарного арбитража должна найти в системной таблице сделок QUIK ("trades") все записи, которые принадлежат конкретным кодам инструментов из вложенного массива legs.lua

Код
-- Исходная вложенная структура в ОЗУ робота
local my_portfolio = {
    securities = {
        legs = {
            [1] = { sec_code = "SVU6" }, -- Ближний фьючерс
            [2] = { sec_code = "SVZ6" }  -- Дальний фьючерс
        }
    }
}

function FindArbitrageTrades()
    
    -- 1. Вытаскиваем элементы в локальные переменные (создаем замыкание)
    local code_leg1 = my_portfolio.securities.legs[1].sec_code
    local code_leg2 = my_portfolio.securities.legs[2].sec_code

    -- 2. Определяем функцию обратного вызова fn
    -- QUIK будет передавать в неё каждую сделку из хранилища терминала
    local function filter_callback(trade_item)
        -- Функция видит переменные code_leg1 и code_leg2 из внешнего контекста!
        if trade_item.sec_code == code_leg1 or trade_item.sec_code == code_leg2 then
            return true -- Элемент удовлетворяет условию, сохраняем его индекс
        end
        return false
    end

    local total_items = getNumberOf("trades") or 0
    if total_items == 0 then return nil end

    -- 3. Вызываем SearchItems. Строку params не задаем, элемент передается полностью
    local found_indices = SearchItems("trades", 0, total_items - 1, filter_callback)

    return found_indices -- Возвращает таблицу с индексами найденных сделок арбитража
end
Страницы: 1
Читают тему
Наверх