LUA - код инструмента - вопрос
Доброго дня, уважаемые коллеги!
Возник у меня вопрос. Пишу я робота, написал робота, все красиво — хочу, к примеру, его продать, либо же хочу просто не заморачиваться более влезанием в код или еще что — не суть. Вот у меня в роботе прописан код инструмента. Можно ли как-то сделать так, чтобы при смене инструмента после экспирации робот автоматически стал использовать новый код? Может через идентификатор, который вешается на график или еще как.
С индикаторами все просто — там берем getDataSourceInfo и готово. А вот именно со скриптом как быть? Дергать эту информацию из какого-либо индикатора и передвать ее в скрипт тоже не особо красивое решение задачи.
Буду рад, если есть идеи.
С уважением, Виталий.
749 |
Читайте на SMART-LAB:
Банк России и ФАС запретили банкам навязывать конкретных страховщиков при выдаче кредитов
Отличные новости для независимых страховых, как RENI! Сегодня стало известно, что ЦБ и ФАС направили совместное письмо банкам, которое...
Золото и серебро — идеальное сочетание? Взгляд Heraeus на рынок драгоценных металлов
Когда инвесторы ищут ответы на вопросы о будущем, они нередко возвращаются к золоту и серебру — одним из старейших активов за всю историю...
Акции Сбербанка отреагировали умеренным ростом на его отчётность по МСФО за 2025 год
Сегодня динамику немного лучше рынка показывают обыкновенные акции Сбербанка, подорожавшие на 0,1%, до 317,85 руб. за акцию. Сбербанк сегодня...
Какие юаневые облигации можно приобрести на фоне ужесточения бюджетного правила?
Можно заюзать файл с настройками робота и от туда подгружать.
Вот вроде пример нормальный https://quikluacsharp.ru/quik-qlua/sohranenie-parametrov-skripta-qlua-lua-mezhdu-zapuskami/
Файл создавать при старте, если его нет.
Принципиальных сложностей менять их с течением времени нет.
Например, можно реализовать перебор кодов. На котором торгуется самый большой объем за некоторый период — тот и есть текущий.
Можно придумать что-то поинтересней.
Иначе говоря, задача решаема, вопрос только насколько это нужно.
Можно просто файл с параметрами использовать и ставить там все что требует изменений в процессе эксплуатации.
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% интрадей.
--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))
--]]