Индикатор уровней совпадения цен

Страницы: 1
RSS
Индикатор уровней совпадения цен
 
Добрый день. Создаю индикатор, он рисует линию только тогда, когда в заданном периоде (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
 
Здравствуйте,

При типе графика "линия" рисуется непрерывная линия. а в местах где нет значений она не прерывается, просто рисуется до следующей точки.
Варианта два:
Укажите тип графика - точка, тогда будете видеть точки там где они действительно есть
рисуйте несколько разных линий.
 
тип "4"
 
например:
Страницы: 1
Читают тему
Наверх