не могу получить значение индикатора
Пользователь
Сообщений: 4
Регистрация: 17.10.2018
--[[ Ниже скрипт, которым я хочу каждую секунду получать значение индикатора *Parabolic SAR. Начиная с первой секунды минуты выводится или high или low вместо желаемого индикатора. Помогите, пжлста. ]] function OnInit() dofile(getWorkingFolder()..'\\LuaIndicators\\PSAR.lua' ) funcPsar = PSAR() ds = CreateDataSource('SPBFUT', 'SiZ8', INTERVAL_M1) ds: SetEmptyCallback() end function main() while true do psar = funcPsar(ds:Size() - 1, {Step = 0.02, MaxStep = 0.2}, ds) message(tostring(psar)) sleep(1000) end end
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Здравствуйте,
Правильно так:
Скрытый текст
Код
function OnInit()
dofile(getWorkingFolder()..'\\LuaIndicators\\PSAR.lua' )
funcPsar = PSAR()
ds = CreateDataSource('SPBFUT', 'SiZ8', INTERVAL_M1)
ds: SetEmptyCallback()
end
function main()
sleep(100)
for i=1,ds:Size() do
psar = funcPsar(i, {Step = 0.02, MaxStep = 0.2}, ds)
end
while true do
psar = funcPsar(ds:Size(), {Step = 0.02, MaxStep = 0.2}, ds)
-- psar = ConvertValue({Round = 1}, psar) --округление (если необходимо)
message(tostring(psar))
sleep(1000)
end
end
Пользователь
Сообщений: 4
Регистрация: 17.10.2018
Все, понял. Большое спасибо!
Пользователь
Сообщений: 26
Регистрация: 09.04.2019
Доброго дня !
Подскажите, а как подобное сделать, если в индикаторе несколько линий ?
Попробовал по аналогии сделать для канала. Не знаю как обратиться к значениям линий. Выводится центральная линия только. Поправьте если не трудно :
Код function OnInit()
dofile(getWorkingFolder()..'\\LuaIndicators\\PC.lua' )
funcPC = PC()
ds = CreateDataSource('SPBFUT', 'SiH0', INTERVAL_M1)
ds: SetEmptyCallback()
end
function main()
sleep(100)
for i=1,ds:Size() do
pc = funcPC(i, {Period = 10, }, ds)
end
while true do
val_h = funcPC(ds:Size(), {Period = 10}, ds)
val_l = funcPC(ds:Size(), {Period = 10 }, ds)
message("H = "..tostring(val_h).."\nL = "..tostring(val_l))
sleep(1000)
end
end
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Дмитрий написал: Подскажите, а как подобное сделать, если в индикаторе несколько линий ?
в луа одна функция может вернуть несколько значений.
проверьте
m, h, l = funcPC(тут остальное
Пользователь
Сообщений: 26
Регистрация: 09.04.2019
Пользователь
Сообщений: 26
Регистрация: 09.04.2019
Подскажите, а как получить значение индикатора на предыдущей свече ? Делаю так: function OnInit() dofile(getWorkingFolder()..'\\LuaIndicators\\PSAR.lua' ) funcPsar = PSAR() ds = CreateDataSource('SPBFUT', 'BRH0', INTERVAL_M15) ds: SetEmptyCallback() end function main() sleep(100) for i=1,ds:Size() do psar = funcPsar(i, {Step = 0.08, MaxStep = 0.2}, ds) end while true do psar = funcPsar(ds:Size(), {Step = 0.08, MaxStep = 0.2}, ds) psar1 = funcPsar(ds:Size()-1, {Step = 0.08, MaxStep = 0.2}, ds) message("psar = "..tostring(psar).."\npsar1 = "..tostring(psar1)) sleep(1000) end end что-то на правду не похоже..
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Дмитрий написал: Подскажите, а как получить значение индикатора на предыдущей свече ?
Запомнить при расчете, а потом взять когда потребуется
Пользователь
Сообщений: 26
Регистрация: 09.04.2019
function OnInit() dofile(getWorkingFolder()..'\\LuaIndicators\\PSAR.lua' ) funcPsar = PSAR() ds = CreateDataSource('SPBFUT', 'BRH0', INTERVAL_M1) ds: SetEmptyCallback() end function main() sleep(100) local Size = ds:Size(); for i=1,Size do psar = funcPsar(i, {Step = 0.08, MaxStep = 0.2}, ds) if i == Size-1 then psar1 = funcPsar(Size-1, {Step = 0.08, MaxStep = 0.2}, ds) end end while true do psar = funcPsar(Size, {Step = 0.08, MaxStep = 0.2}, ds) psar1 = funcPsar(Size-1, {Step = 0.08, MaxStep = 0.2}, ds) message("psar = "..tostring(psar).."\npsar1 = "..tostring(psar1)) sleep(1000) end end Все равно не похоже... Помогайте
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Дмитрий ,
Зачем Вы делаете ЕЩЕ один расчет??? такой рекомендации не было.
В чем сложность взять и запомнить psar не плодя лишние расчеты?
psarOld = 0
for i=1,Size do
psarOld = psar
psar = funcPsar(i, {Step = 0.08, MaxStep = 0.2}, ds)
end
или вообще сделать таблицу с индексами и брать по номеру:
psar = {}
for i=1,Size do
psarOld = psar
psar[i] = funcPsar(i, {Step = 0.08, MaxStep = 0.2}, ds)
end
psar[номер нужной свечки]
Пользователь
Сообщений: 26
Регистрация: 09.04.2019
Большое Спасибо, Сергей! Разобрался