Vitaliy
Vitaliy личный блог
19 августа 2020, 21:25

LUA - код инструмента - вопрос

Доброго дня, уважаемые коллеги! 

Возник у меня вопрос. Пишу я робота, написал робота, все красиво — хочу, к примеру, его продать, либо же хочу просто не заморачиваться более влезанием в код или еще что — не суть. Вот у меня в роботе прописан код инструмента. Можно ли как-то сделать так, чтобы при смене инструмента после экспирации робот автоматически стал использовать новый код? Может через идентификатор, который вешается на график или еще как. 

С индикаторами все просто — там берем getDataSourceInfo и готово. А вот именно со скриптом как быть? Дергать эту информацию из какого-либо индикатора и передвать ее в скрипт тоже не особо красивое решение задачи.

Буду рад, если есть идеи.

С уважением, Виталий.
9 Комментариев
  • Андрей К
    19 августа 2020, 21:41

    Можно заюзать файл с настройками робота и от туда подгружать.

    Вот вроде пример нормальный https://quikluacsharp.ru/quik-qlua/sohranenie-parametrov-skripta-qlua-lua-mezhdu-zapuskami/

  • Paulmarko
    19 августа 2020, 22:13
    Настройки, туда можно и поместить все за 2020 год и выбирать от даты.
    Файл создавать при старте, если его нет.
  • kachanov
    19 августа 2020, 23:11
    Кода фьючерсов стандартизованы.
    Принципиальных сложностей менять их с течением времени нет.
    Например, можно реализовать перебор кодов. На котором торгуется самый большой объем за некоторый период — тот и есть текущий.
    Можно придумать что-то поинтересней.
    Иначе говоря, задача решаема, вопрос только насколько это нужно.
    Можно просто файл с параметрами использовать и ставить там все что требует изменений в процессе эксплуатации.
      • Vkt
        20 августа 2020, 07:51
        Vitaliy, я формулу в код зашил, мне так проще

        if Tdata>1217 or Tdata<=317 then return ss..«H»..Ys end
        if Tdata>317 and Tdata<=617 then return ss..«M»..Ys end
        if Tdata>617 and Tdata<=917 then return ss..«U»..Ys end
        if Tdata>917 and Tdata<=1217 then return ss..«Z»..Ys end

        но это для индикаторов и для квартальных фьючерсов. 
        Для месячных строчек будет 12.
        А если торгующий скрипт, то на смене контракта надо корректно закрыть старый и открыть новый, если это не 100% интрадей.

          • Кашников Александр
            15 октября 2020, 01:09
            Vitaliy, вот такой способ будет получше, чем затея с файлами, https://quik2dde.ru/viewtopic.php?id=306

            --sh_intervalEx.lua
            package.cpath=package.cpath..";"..getWorkingFolder().."/scripts/?.dll"
            local sh = require'lua_share'

            Settings ={}
            Settings.Name = "*sh_intervalEx"
            local strInt = {
            [0] = «tick»,
            [1] = «M1»,
            [2] = «M2»,
            [3] = «M3»,
            [4] = «M4»,
            [5] = «M5»,
            [6] = «M6»,
            [10] = «M10»,
            [15] = «M15»,
            [20] = «M20»,
            [30] = «M30»,
            [60] = «M60»,
            [120] = «H2»,
            [240] = «H4»,
            [-1] = «D»,
            [-2] = «W»,
            [-3] = «MN»,
            }

            function Init()
            return 1
            end
            local last_index
            local ns
            function OnCalculate(index)
            if index == 1 then
            last_index = Size()
            local info = getDataSourceInfo()
            local ticker= tostring(info.sec_code)
            local short_base = ticker:sub(1,2) — например, «Si»
            ---------------------------------------
            ns = sh.GetNameSpace(short_base)
            ns.market = tostring(info.class_code)
            ns.ticker = ticker
            ns.interval= strInt[info.interval]
            ns.bar_px = os.time(T(last_index))
            — message(«tm »..tostring(os.date("%H:%M:%S", ns.bar_px)),2)
            — message(tostring(info.sec_code).." interval= "..tostring(ns.interval))
            end
            if index > last_index then
            last_index = index
            ns.bar_px = os.time(T(index)) --время последнего бара всегда известно
            end
            end
            --[[
            в скрипте:
            package.cpath=package.cpath..";"..getWorkingFolder().."/scripts/?.dll"
            local sh = require'lua_share'
            local ns = sh.GetNameSpace(«Si»)
            message(«tm »..tostring(os.date("%H:%M:%S", ns.bar_px)),2)
            message(tostring(info.sec_code).." interval= "..tostring(ns.interval))
            --]]

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн