Скрипт barsSaver

[ barsSaver  скрипт  робот  lua  qlua  квик  quik  ]

Сохранение данных баров в файл.

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

Его можно взять здесь

Для корректной работы необходимо обеспечить доступность библиотек:

local log = require(“log”) библиотеки логирования

local maLib = require(“maLib”) библиотеки maLib

Список инструментов хранится в файле sec_list.txt

Данный файл организован по структуре как таблица Lua.

Пример:

return {

    [1] = {
        sec_code        = "SRZ1",
        class_code      = "SPBFUT",
        interval        = 1,
        algo            = {
            [1] = {
                method          = "EMA",
                period          = 14,
                data_type       = "Close"
            },
            [2] = {
                method          = "MACD",
                ma_method       = "EMA",
                short_period    = 12,
                long_period     = 26,
                signal_method   = "SMA",
                signal_period   = 9,
                percent         = "ON",
                data_type       = "Close"
            }
        }
    },
    [2] = {
        sec_code        = "SRZ1",
        class_code      = "SPBFUT",
        interval        = 3,
        algo            = {
            [1] = {
                method          = "MACD",
                ma_method       = "EMA",
                short_period    = 12,
                long_period     = 26,
                signal_method   = "SMA",
                signal_period   = 9,
                percent         = "ON",
                data_type       = "Close"
            }
        }
    },
    [3] = {
        sec_code        = "RIZ1",
        class_code      = "SPBFUT",
        interval        = 3,
        algo            = {
            [1] = {
                method          = "MACD",
                ma_method       = "EMA",
                short_period    = 12,
                long_period     = 26,
                signal_method   = "SMA",
                signal_period   = 9,
                percent         = "ON",
                data_type       = "Close"
            }
        }
    }

}

Файл содержит основную таблицу(список):

return { }

Далее в нее добавляются записи по индексам с разделением запятыми:

return {

[1] = {

        sec_code        = "SRZ1",
        class_code      = "SPBFUT",
        interval        = 1,
},
[2] = {

        sec_code        = "SRZ1",
        class_code      = "SPBFUT",
        interval        = 3,
} }

Если требуется организовать выгрузку значений алгоритма, то необходимо добавить записи в вложенный список algo:

[1] = {
        sec_code        = "SRZ1",
        class_code      = "SPBFUT",
        interval        = 1,
        algo            = {
            [1] = {
                method          = "EMA",
                period          = 14,
                data_type       = "Close"
            },
            [2] = {
                method          = "MACD",
                ma_method       = "EMA",
                short_period    = 12,
                long_period     = 26,
                signal_method   = "SMA",
                signal_period   = 9,
                percent         = "ON",
                data_type       = "Close"
            }
        }
}

Запись о расчете алгоритма содержит поля необходимые для вызова метода из библиотеки maLib.

Для примера, расчет EMA требует:

method          = "EMA",
period          = 14,
data_type       = "Close"

А для расчета MACD:

method          = "MACD",
ma_method       = "EMA",
short_period    = 12,
long_period     = 26,
signal_method   = "SMA",
signal_period   = 9,
percent         = "ON",
data_type       = "Close"

Список параметров видно из метода maLib. Для примера MACD:

--Moving Average Convergence/Divergence ("MACD")
local function F_MACD(settings, ds)

    settings            = (settings or {})

    local ma_method     = (settings.ma_method or "EMA")
    local short_period  = (settings.short_period or 12)
    local long_period   = (settings.long_period or 26)
    local signal_method = (settings.signal_method or "SMA")
    local signal_period = (settings.signal_period or 9)
    local percent       = (settings.percent or 'on')
    local data_type     = (settings.data_type or "Close")
    local round         = (settings.round or "OFF")
    local scale         = (settings.scale or 0)

При старте скрипт формирует файлы для хранения данных. Наименование файла формируется из кода, класса инструмента и тайм-фрейма. Также, если задан расчет алгоритмов, добавляются их имена. Для примера

SR_SPBFUT_M3.csv
SR_SPBFUT_M3_MACD1.csv
SR_SPBFUT_M1_EMA1_MACD2.csv

Имя кода фьючерсного контракта содержит только символы инструмента. Т.о. при переходе на новый контракт запись будет осуществляться в тот же файл (склейка данных).

Скрипт позволяет сохранять данные как онлайн, так и только историю. Если выбран режим сохранения данных онлайн, то сначала записываются все данные истории, что прошли с момента предыдущего запуска (при старте происходит поиск времени последнего уже записанного бара), а далее скрипт переходит в режим ожидания. При получения нового бара осуществляется запись в файл. Т.о. можно организовать непрерывную запись данных.

Переключение режима производится через параметр:

--Сохранять только историю.
-- 0 - выключено. В этом режиме скрипт в фоне контролирует получение новых баров и сохраняет их в файл.
ONLY_HISTORY                  = 1

Изменять параметры можно через файл barsSaver_params.ini или, если такового нет, прямо в коде скрипта.

Файлы сохраняются в текстовый файл с расширением csv с разделителем “;”. Такой файл можно открыть в Excel, подключить к базе данных.

Числовые значения можно приводить к формату принятому в lua, когда разделитель дробной части - это точка, так и через запятую, как это принято в Excel.

Переключение режима производится через параметр:

--Разделитель дробной числа:
-- 0 - разделитель точка
-- 1 - разделитель запятая
EXCEL_NUM                     = 0