Здравствуйте коллеги! Подскажите пожалуйста как реализовать такую штуку? Есть функция в индикаторе которая возвращает значения 4 линий, хочу модифицировать его и сделать 2 такие функции одновременно, чтобы они возвращали уже 8 линий.
Объединить эти функции в одну нельзя, а вот как сделать так чтобы индикатор возвращал 8 значений линий? Например обе функции возвращают по 4 линии, а потом уже индикатор выдает 8, как это сделать?
Я думаю что вот так как то:
В расчетную функцию вставить вызов этих двух функций и получать возвращаемые ими значения, вставлять эти значения в буфер (отдельную таблицу), а уже из таблицы доставать и возвращать из расчетной функции OnCalculate
Код
function OnCalculate(index)
G={}
local a,b,c,d = glo1(index)
local e,f,g,h = glo2(index)
G[1]=a и тд
return G
end
Nikolay написал: Когда число линий действительно больше, то тогда уже лучше хранить значения в таблице, а возвращать через unpack(table).
Не придумал ничего лучше, чем упаковать значения в две таблицы, а потом объединить их
Код
function OnCalculate(index)
local G = {glo1(index)}
local n = #G
local G_ = {glo2(index)}
for i = 1, #G_ do
n = n + 1
G[n] = G_[i]
end
return table.unpack(G)
end
Незнайка написал: упаковать значения в две таблицы, а потом объединить их
Но есть косяк: если функции могут возвращать nil, то unpack работает криво. Когда таблица сразу заполняется при создании, то распаковывается нормально:
Код
local G = {1, 2, nil, 4, nil, 6}
return print(unpack(G)) --> 1 2 nil 4 nil 6
А когда значения дописываются после, то работает криво
Незнайка написал: упаковать значения в две таблицы, а потом объединить их
Но есть косяк: если функции могут возвращать nil, то unpack работает криво. Когда таблица сразу заполняется при создании, то распаковывается нормально:
не ставьте перед переменными local. они будут глобальными в первой функции считаете 4 параметра которые изначально не определены во второй функции считаете следующие 4 параметра при выводе просто перечисляете их например так : ----------------------------- function fun1(k) x1=k+1; x2=k+2; x3=k+3; x4=k+4; end ------------------------------ function fun2(k) x5=k+5; x6=k+6; x7=k+7; x8=k+8; end ---------------------------- function onCalculate(i) .... fun1(i); fun2(i); return x1,x2,x3,x4,x5,x6,x7,x8; end
Евгений написал: Подскажите пожалуйста в индикаторе можно получить значение другого индикатора ? вот по этой функции как то не получается getCandlesByIndex
Да, можно. (Правда, если не сломали в 9.* версиях)
Евгений написал: Подскажите пожалуйста в индикаторе можно получить значение другого индикатора ? вот по этой функции как то не получается getCandlesByIndex
Техподдержка проясните пожалуйста почему не работает?
Евгений написал: Подскажите пожалуйста в индикаторе можно получить значение другого индикатора ? вот по этой функции как то не получается getCandlesByIndex
Техподдержка проясните пожалуйста почему не работает?
я не техподдержка, Но скажу , что индикаторы рассчитываются последовательно друг за другом, порядок расчета не регламентирован, и ваш индикатор может рассчитываться раньше, чем тот, с которого вы хотите получить значения.
function main()
while is_run do
local identifier = "Si_macd_long"
local count = 10
local offset
local n
local t,n,l = getCandlesByIndex("Si_macd_long",0,0,count,offset)
if #t > 1 then
message(" #t = "..#t,2)
end
sleep(500)
end
end
function main ()
while is_run do
local identifier = "Si_macd_long"
local count = 10
local offset
local n
local t,n,l = getCandlesByIndex ( "Si_macd_long" , 0 , 0 ,count,offset)
if # t > 1 then
message ( " #t = " .. # t, 2 )
end
sleep ( 500 )
end
end
Что не так тут почему таблица нил, все проверил
У вас в этом примере не задано значение offset - и оно будет nil - а это число запрашиваемых свечек. Ну Вы получаете, то что запросили. Все верно?