Блог им. Roggy

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

    • 19 августа 2020, 21:25
    • |
    • Vitaliy
  • Еще
Доброго дня, уважаемые коллеги! 

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

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

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

С уважением, Виталий.
  • обсудить на форуме:
  • Quik Lua
749 | ★1
9 комментариев

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

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

avatar
Андрей К, вот одна из мыслей у меня была про файл, да
avatar
Настройки, туда можно и поместить все за 2020 год и выбирать от даты.
Файл создавать при старте, если его нет.
avatar
Paulmarko, я еще думал сделать csv с параметрами всеми и чтобы робот уже оттуда тянул, что ему надо. Тогда, кстати, можно и без графика и идентификатора CreateDataSource сделать
avatar
Кода фьючерсов стандартизованы.
Принципиальных сложностей менять их с течением времени нет.
Например, можно реализовать перебор кодов. На котором торгуется самый большой объем за некоторый период — тот и есть текущий.
Можно придумать что-то поинтересней.
Иначе говоря, задача решаема, вопрос только насколько это нужно.
Можно просто файл с параметрами использовать и ставить там все что требует изменений в процессе эксплуатации.
avatar
kachanov, вот с файлом, видимо, наиболее корректный вариант. Заодно и другие параметры редактировать можно будет
avatar
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% интрадей.

avatar
Vkt, думал о подобном подходе, спасибо. Все же склоняюсь к файлу с настройками
avatar
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))
--]]


Читайте на SMART-LAB:
Фото
Банк России и ФАС запретили банкам навязывать конкретных страховщиков при выдаче кредитов
Отличные новости для независимых страховых, как RENI!  Сегодня стало известно, что ЦБ и ФАС направили совместное письмо банкам, которое...
Фото
Золото и серебро — идеальное сочетание? Взгляд Heraeus на рынок драгоценных металлов
 Когда инвесторы ищут ответы на вопросы о будущем, они нередко возвращаются к золоту и серебру — одним из старейших активов за всю историю...
Акции Сбербанка отреагировали умеренным ростом на его отчётность по МСФО за 2025 год
Сегодня динамику немного лучше рынка показывают обыкновенные акции Сбербанка, подорожавшие на 0,1%, до 317,85 руб. за акцию. Сбербанк сегодня...
Фото
Какие юаневые облигации можно приобрести на фоне ужесточения бюджетного правила?

теги блога Vitaliy

....все тэги



UPDONW
Новый дизайн