Добрый день. Создаю индикатор, он рисует линию только тогда, когда в заданном периоде (Period) есть определенное число совпадений (Sovpadeniya) Hi или Low свеч. Вопрос. Как чертить линии не от начала периода и до конца графика, а только в промежутке, от первого совпадения до Sovpadeniya. Думаю вопрос понятен. Прилагаю код и скриншот. Подозреваю, что нужно как то создать массив в массиве, но не могу до этого додуматься.
Settings =
{
Name = "*Sovpadeniya_cen_po_Hi_i_Low",
Sovpadeniya = 3,
Period = 150
}
function Init()
--объявляем нужные переменные
arr1={}
schetchik_1=0
skolko_lin=0 --эта переменная нужна для: 1) подсчета линий (передачи их в функцию Init); 2) определения количества элементов в массиве
--вызываем функцию - один раз перед загрузкой
OSN_1()
if skolko_lin>0 then --если совпадений не будет, то вернуть 1 линию, а то вернет 0 и выскочит ошибка
return skolko_lin
else
return 1
end
end
function OSN_1()
n_bars = getNumCandles('SBER_5_MINUT')
moy_grafik, NUMBER, STRING = getCandlesByIndex ('SBER_5_MINUT', 0, 0, n_bars)
--[[все, нужный график определили, теперь ищем количество нужных совпадений, если они найдутся -
запоминаем их цену в массив. Ищем не во всем графике, а на определенном периоде, указанном в Settings:]]
for i = (n_bars-Settings.Period), n_bars-Settings.Sovpadeniya-1 do
schetchik_1=0 --каждый раз обнуляем счетчик
for n = (i+1), (n_bars-1) do
if moy_grafik[i].high == moy_grafik[n].high or moy_grafik[i].high == moy_grafik[n].low then
schetchik_1=schetchik_1+1 -- если есть совпадения - то считаем их количество
end
--[[если нашли количество нужных совпадений набралось - запоминаем значение цены в массив и выходим из цикла, дальше нет смысла искать:]]
if schetchik_1 == Settings.Sovpadeniya then
skolko_lin = skolko_lin + 1
arr1[skolko_lin]=moy_grafik[i].high
break
end
end
end
end
function OnCalculate(index)
if index-1 < (Size()-(Settings.Period)-1) then
return nil
else
return unpack(arr1)
end
end
Settings =
{
Name = "*Sovpadeniya_cen_po_Hi_i_Low",
Sovpadeniya = 3,
Period = 150
}
function Init()
--объявляем нужные переменные
arr1={}
schetchik_1=0
skolko_lin=0 --эта переменная нужна для: 1) подсчета линий (передачи их в функцию Init); 2) определения количества элементов в массиве
--вызываем функцию - один раз перед загрузкой
OSN_1()
if skolko_lin>0 then --если совпадений не будет, то вернуть 1 линию, а то вернет 0 и выскочит ошибка
return skolko_lin
else
return 1
end
end
function OSN_1()
n_bars = getNumCandles('SBER_5_MINUT')
moy_grafik, NUMBER, STRING = getCandlesByIndex ('SBER_5_MINUT', 0, 0, n_bars)
--[[все, нужный график определили, теперь ищем количество нужных совпадений, если они найдутся -
запоминаем их цену в массив. Ищем не во всем графике, а на определенном периоде, указанном в Settings:]]
for i = (n_bars-Settings.Period), n_bars-Settings.Sovpadeniya-1 do
schetchik_1=0 --каждый раз обнуляем счетчик
for n = (i+1), (n_bars-1) do
if moy_grafik[i].high == moy_grafik[n].high or moy_grafik[i].high == moy_grafik[n].low then
schetchik_1=schetchik_1+1 -- если есть совпадения - то считаем их количество
end
--[[если нашли количество нужных совпадений набралось - запоминаем значение цены в массив и выходим из цикла, дальше нет смысла искать:]]
if schetchik_1 == Settings.Sovpadeniya then
skolko_lin = skolko_lin + 1
arr1[skolko_lin]=moy_grafik[i].high
break
end
end
end
end
function OnCalculate(index)
if index-1 < (Size()-(Settings.Period)-1) then
return nil
else
return unpack(arr1)
end
end