Возник у меня вопрос. Пишу я робота, написал робота, все красиво — хочу, к примеру, его продать, либо же хочу просто не заморачиваться более влезанием в код или еще что — не суть. Вот у меня в роботе прописан код инструмента. Можно ли как-то сделать так, чтобы при смене инструмента после экспирации робот автоматически стал использовать новый код? Может через идентификатор, который вешается на график или еще как.
С индикаторами все просто — там берем getDataSourceInfo и готово. А вот именно со скриптом как быть? Дергать эту информацию из какого-либо индикатора и передвать ее в скрипт тоже не особо красивое решение задачи.
Paulmarko, я еще думал сделать csv с параметрами всеми и чтобы робот уже оттуда тянул, что ему надо. Тогда, кстати, можно и без графика и идентификатора CreateDataSource сделать
Кода фьючерсов стандартизованы.
Принципиальных сложностей менять их с течением времени нет.
Например, можно реализовать перебор кодов. На котором торгуется самый большой объем за некоторый период — тот и есть текущий.
Можно придумать что-то поинтересней.
Иначе говоря, задача решаема, вопрос только насколько это нужно.
Можно просто файл с параметрами использовать и ставить там все что требует изменений в процессе эксплуатации.
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% интрадей.
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))
--]]
Трамп анонсировал новые встречи США и России
Россия и США проведут новые встречи в ближайшие дни, заявил Дональд Трамп после того, как Украина согласилась на 30-дневное перемирие. В предыдущий ра...
Рейтинговое агентство «Эксперт РА» установило статус «под наблюдением» по рейтингу кредитоспособности АО «Башкирская содовая компания» (BASC) (БСК), что означает высокую вероятность рейтинговых действ...
александр сверчков,
Финальный ориентир ставки 1-го купона — 26,00% годовых, ему соответствует доходность к погашению в размере 29,34% годовых.
Подробнее на RusBonds: rusbonds.ru/news
Подскажите пожалуйста. Открывали счет с российским паспортам и пополняли с тинькофф swift в ibkr. Начали ломать голову как вывести. Человек открывший счет получил а точнее восстановил свое кыргызское ...
Держу скоро как год… в минусе конечно… Но все проходит… С дивами подвели… Оч плохо… Но он мне нравится тем… Что цены по приемлимей чем х5 зарплаты выше… И кстати у нас оставили 1 кассу ост терминалы… ...
Олег Дубинский, Еще немного накину на вентилятор! В этом году вроде как заканчиваются выплаты за мощность ДПМ. А следовательно без них чистая прибыл будет ниже чем 31,9 млрд, а вот расходы в 55–65 ...
Можно заюзать файл с настройками робота и от туда подгружать.
Вот вроде пример нормальный 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))
--]]