Возник у меня вопрос. Пишу я робота, написал робота, все красиво — хочу, к примеру, его продать, либо же хочу просто не заморачиваться более влезанием в код или еще что — не суть. Вот у меня в роботе прописан код инструмента. Можно ли как-то сделать так, чтобы при смене инструмента после экспирации робот автоматически стал использовать новый код? Может через идентификатор, который вешается на график или еще как.
С индикаторами все просто — там берем 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))
--]]
Heinrich von Baur, Проблему выбора аналога на нашем рынке я отмечал, но сбер — ближнее, что есть. Это уже не только банк — это экосистема, развивающая и небанковские бизнесы, так же, как и яндекс, ...
Торговый советник «Метла» — это высшее математическое универсальное решение, которое позволяет удалять позиции группами, кластерами и частями ордеров, а также частями от ордера. Его эффективность в ра...
ФРС снизила учетную ставку на 25 б п до 4,5% ФРС США понизила ставку на 25 б. п., до диапазона 4,25-4,5% годовых, как и ожидалось рынком. Авто-репост. Читать в блоге >>>
ФРС снизила учетную ставку на 25 б п до 4,5% ФРС США понизила ставку на 25 б. п., до диапазона 4,25-4,5% годовых, как и ожидалось рынком. Авто-репост. Читать в блоге >>>
any_to_real, где же был ситуационный ценр прогнозирования Росгидроиета??? — У меня такая еще мысль — душу — терзает/гложет!
— Было ли твм — какое указание/предупреждение?!
— Да, лоцманы должн...
Максим Викторов, почему только ставка? У них есть еще вербальные интервенции.
Но Эльвирочка слишком осторожная и молчаливая,
а остальным типа заботкина лучше вообще сразу скотчем рот за...
Будущий посланник Трампа заявил о готовности России и Украины к переговорам - РИА Новости Будущий специальный посланник избранного президента США Дональда Трампа по Украине Кит Келлог выразил мнение, ...
Можно заюзать файл с настройками робота и от туда подгружать.
Вот вроде пример нормальный 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))
--]]