← К каталогу
Исходный код · ID 4676

Стратегия линейного прорыва

linear breakthrough strategy.pine

Похожие материалы по тегам

le van do® - swing signals & overlays private.pineTradingView · 2 общих теговindicatorgoldy.pineTradingView · 2 общих теговgoldlevelbreakout 1.00 @simpleforextools.mq4MQL4 / MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MQL4 / MetaTrader 4 · 2 общих теговsmc+ict+indicators+scalping master.pineTradingView · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор «Стратегия линейного прорыва» отображает на графике TradingView прямоугольники (боксы), группирующие бары по направлению тренда: бычьи и медвежьи сегменты визуализируются разными цветами. При включённом режиме отображения на основном графике боксы рисуются поверх свечей, иначе — в отдельном окне. Индикатор работает на заданном количестве последних баров и строит последовательность линий разрыва ценовых уровней.

Дополнительно индикатор рисует линию тренда, уровни разворота, вероятность продолжения текущего тренда и линию цены закрытия. Включена таблица временных последовательностей, отображающая статистику частоты роста и падения по разным временным интервалам. При активном управлении рисками линия тренда помечается крестиком, если расстояние до уровня разворота превышает заданный максимальный риск.

Настроены оповещения на изменение тренда (Long/Short) и на пробитие ценовых уровней с возможностью выбора частоты срабатывания. Цветовая палитра позволяет настраивать цвета подтверждённых и неподтверждённых баров, границ, линий тренда и пробития, а также стиль линий пробития. Flip-Flop переключает раскраску боксов при смене направления тренда.

Настройки программы

НастройкаОписание
nol Количество линий (уровней), используемых для определения разворота тренда.
totalbars Максимальное количество баров, используемых для построения графика линейного прорыва.
overlay Отображает графические элементы индикатора на основном графике или в отдельном окне.
gap Включает или отключает отображение разрывов между группами баров на графике.
showTrend Отображает линию текущего тренда и маркеры условий Long/Short.
uptcol Цвет линии тренда для бычьего направления.
dntcol Цвет линии тренда для медвежьего направления.
trendwidth Толщина линии тренда.
riskmanagement Включает или отключает фильтр управления рисками на основе максимального допустимого риска.
maximumrisk Максимально допустимый риск в процентах от цены открытия. Если расстояние до уровня разворота превышает это значение, сделка не открывается.
breakout Включает или отключает отображение линий пробития ценовых уровней.
breakoutucol Цвет линии пробития для бычьего направления.
breakoutdcol Цвет линии пробития для медвежьего направления.
breakoutlstylei Стиль линии пробития: сплошная, пунктирная или точечная.
flipflop Включает или отключает режим Flip-Flop, при котором боксы меняют цвет при смене направления тренда.
flipflopcol Целевой цвет боксов в режиме Flip-Flop при смене направления тренда.
showProbability Отображает метку с вероятностью продолжения текущего тренда.
showreversal Отображает уровень разворота и метку с его значением.
showclosingp Отображает линию цены закрытия последнего бара.
showtable Отображает таблицу временных последовательностей со статистикой частоты роста и падения.
tableoverlay Определяет, отображать ли таблицу на основном графике или в отдельном окне.
tabletype Тип отображения таблицы: визуальный (с цветными столбцами) или числовой.
tableposy Вертикальное расположение таблицы: сверху, по центру или снизу.
tableposx Горизонтальное расположение таблицы: слева, по центру или справа.
txtsize Размер текста в таблице: мельчайший, малый, нормальный или большой.
upbarsbg Цвет заливки бычьих баров.
upbarsbguc Цвет неподтверждённых бычьих баров.
upbarsbd Цвет границы бычьих баров.
dnbarsbg Цвет заливки медвежьих баров.
dnbarsbguc Цвет неподтверждённых медвежьих баров.
dnbarsbd Цвет границы медвежьих баров.
alertfrequency Частота срабатывания оповещений: один раз при закрытии бара или один раз при появлении бара.
longshortalert Включает или отключает оповещения о смене направления тренда Long/Short.
longAmsg Текст сообщения, отправляемого при оповещении о смене тренда на бычий.
shortAmsg Текст сообщения, отправляемого при оповещении о смене тренда на медвежий.
breakoutalert Включает или отключает оповещения о пробитии ценовых уровней.
bolongAmsg Текст сообщения, отправляемого при оповещении о пробитии вверх.
boshortAmsg Текст сообщения, отправляемого при оповещении о пробитии вниз.
Получить полный код

Поиск по коду файла

indicator("<[Стратегия линейного прорыва]>", shorttitle = "<[LBC-RU]>", max_boxes_count = 500, max_bars_back = 4000, max_lines_count = 500)

var risktt = "Если расстояние между точкой входа и уровнем разворота (Трейлинг стоп-лосс) больше максимального риска, сделка не должна открываться"
nol = input.int(defval = 3, title = "Количество линий", minval = 1, tooltip = "Количество линий для проверки разворота")
totalbars = input.int(defval = 30000, title = "Максимальное количество баров", minval = 10, step = 500, tooltip = "Общее количество баров для построения графика Line Break")
overlay = input.bool(defval = false, title = "Отображать на основном графике")
gap = input.string(defval = "Off", title = "Разрывы", options =["Off", "On"])

showTrend = input.bool(defval = true, title = "Тренд", inline = "shwt")
uptcol = input.color(defval = color.lime, title = "", inline = "shwt")
dntcol = input.color(defval = color.red, title = "", inline = "shwt")
trendwidth = input.int(defval = 2, title = "", minval = 1, maxval = 5, inline = "shwt")

riskmanagement = input.bool(defval = false, title = "Управление рисками")
maximumrisk = input.float(defval = 1.0, title = "  Максимальный риск %", minval = 0, step = 0.1, tooltip = risktt) / 100

breakout = input.bool(defval = true, title = "Пробитие", inline = "bo")
breakoutucol = input.color(defval = color.blue, title = "", inline = "bo")
breakoutdcol = input.color(defval = color.navy, title = "", inline = "bo")
breakoutlstylei = input.string(defval = "Dotted", title = "", options = ["Solid", "Dashed", "Dotted"], inline = "bo")

flipflop = input.bool(defval = true, title = "Flip-Flop", inline = "ff")
flipflopcol = input.color(defval = #b2b5be, title = "", inline = "ff")

showProbability = input.bool(defval = true, title = "Вероятность продолжения")
showreversal = input.bool(defval = true, title = "Уровень разворота")
showclosingp = input.bool(defval = true, title = "Цена закрытия")

showtable = input.bool(defval = true, title = "Таблица временных последовательностей", inline = "table")
tableoverlay = input.bool(defval = false, title = "Основной график", inline = "table")
tabletype = input.string(defval = "Visual", title = "  Тип таблицы", options = ["Visual", "Numbers"])
tableposy = input.string(defval='bottom', title='  Расположение', options=['bottom', 'middle', 'top'], inline='tabpos')
tableposx = input.string(defval='left', title='', options=['left', 'center', 'right'], inline='tabpos')
txtsize = input.string(defval = size.small, title = "  Размер текста", options = [size.tiny, size.small, size.normal, size.large])

upbarsbg = input.color(defval = #36a845, title = "Бычьи бары", inline = "upbc", tooltip ="Цвета подтвержденных, неподтвержденных баров и границ")
upbarsbguc = input.color(defval = color.blue, title = "", inline = "upbc")
upbarsbd = input.color(defval = #74e05e, title = "", inline = "upbc")
dnbarsbg = input.color(defval = #d11d17, title = "Медвежьи бары", inline = "dnbc", tooltip ="Цвета подтвержденных, неподтвержденных баров и границ")
dnbarsbguc = input.color(defval = color.navy, title = "", inline = "dnbc")
dnbarsbd = input.color(defval = #f7525f, title = "", inline = "dnbc")

alertfrequency = input.string(defval = alert.freq_once_per_bar, title = "Частота оповещений", options = [alert.freq_once_per_bar_close, alert.freq_once_per_bar], group = "Оповещения")
longshortalert = input.bool(defval = true, title = "Оповещение Long/Short")
longAmsg = input.string(defval = "Тренд бычий", title = " Сообщение Long", inline = "1")
shortAmsg = input.string(defval = "Тренд медвежий", title = " Сообщение Short", inline = "2")
breakoutalert = input.bool(defval = true, title = "Оповещение о пробое")
bolongAmsg = input.string(defval = "Пробитие вверх", title = " Сообщение Long", inline = "3")
boshortAmsg = input.string(defval = "Пробитие вниз", title = " Сообщение Short", inline = "4")

method addtoarray(float [] this, float value) =>
    this.pop()
    this.unshift(value)
method addtoarray(int [] this, int value) =>
    this.pop()
    this.unshift(value)

getIndex(value)=>
    index =  value < 11 ? value - 1 :
             value > 10 and value <= 12 ? 10 :
             value > 12 and value <= 15 ? 11 : 
             12

getText(value)=>
    txt =  value < 11 ? str.tostring(value) :
             value == 11 ? "11-12" :
             value == 12 ? "13-15" : 
             ">15"

method addtrendcount(matrix<int> this, int value, int trend) =>
    index = getIndex(value)
    cc = trend == -1 ? 0 : 1
    this.set(index, cc, 1 + this.get(index, cc))

drawBox(l, t, r, b, bcol, bgcol)=>
    ret = overlay ?  box.new(left = l, top = t, right = r, bottom = b, border_width = 1, border_color = bcol, bgcolor = bgcol, force_overlay = true) :
                     box.new(left = l, top = t, right = r, bottom = b, border_width = 1, border_color = bcol, bgcolor = bgcol)

var trend = close >= open ? 1 : -1
var closes = array.new_float(500, close)
var opens = array.new_float(500, open)
var counts = array.new_int(500, 0)
var trcounts = matrix.new<int>(13, 2, 0)
var count = 0
var trcount = 1
var firstone = true
var breakoutlstyle = breakoutlstylei == "Solid" ? line.style_solid : breakoutlstylei == "Dashed" ? line.style_dashed : line.style_dotted

if bar_index >= last_bar_index - totalbars and (not barstate.isrealtime or barstate.isconfirmed)
    if bar_index == last_bar_index - totalbars
        trend := close >= open ? 1 : -1
        count := 0
        trcount := 1
        closes.fill(close)
        opens.fill(open)
    count += 1
    if trend == 1
        if close < math.min(array.min(array.slice(opens, 0, nol)), array.min(array.slice(closes, 0, nol)))
            if firstone
                firstone := false 
            else
                trcounts.addtrendcount(trcount, trend)
            trend := -1
            trcount := 0
        if close > closes.get(0) or trend == -1
            opens.addtoarray(trend == -1 ? opens.get(0) : closes.get(0))
            closes.addtoarray(close)
            counts.addtoarray(count)
            count := 0
            trcount += 1
    else if trend == -1 
        if close > math.max(array.max(array.slice(opens, 0, nol)), array.max(array.slice(closes, 0, nol)))
            if firstone
                firstone := false 
            else
                trcounts.addtrendcount(trcount, trend)
            trend := 1
            trcount := 0
        if close < closes.get(0) or trend == 1
            opens.addtoarray(trend == 1 ? opens.get(0) : closes.get(0))
            closes.addtoarray(close)
            counts.addtoarray(count)
            count := 0
            trcount += 1

if barstate.islast and matrix.max(trcounts) > 0
    var boxes = array.new_box(closes.size())
    xloc = bar_index
    ccounts = counts.copy()
    ccounts.unshift(count + 1)
    for x = 0 to (array.size(boxes) > 0 ? array.size(boxes) - 1 : na)
        box.delete(boxes.pop())

    for x = 0 to closes.size() -1
        if x < closes.size() -1 
            if bar_index - x < 1 or closes.get(x) == closes.get(x + 1) and opens.get(x) == opens.get(x + 1)
                continue

        bgcol = closes.get(x) > opens.get(x) ? upbarsbg : dnbarsbg
        bdcol = closes.get(x) > opens.get(x) ? upbarsbd : dnbarsbd
        if flipflop and x > 0 and x < closes.size() - 1
            if closes.get(x) > opens.get(x) and closes.get(x - 1) < opens.get(x - 1) and closes.get(x + 1) < opens.get(x + 1) or
                 closes.get(x) < opens.get(x) and closes.get(x - 1) > opens.get(x - 1) and closes.get(x + 1) > opens.get(x + 1) 
                bgcol := flipflopcol

        left = gap == "On" ? xloc - ccounts.get(x) : bar_index - x - 1
        right = gap == "On" ? xloc : bar_index - x
        if overlay 
            boxes.unshift(box.new(left = left, top = closes.get(x), right = right, bottom = opens.get(x), border_width = 1, border_color = bdcol, bgcolor = bgcol, force_overlay = true))
        else
            boxes.unshift(box.new(left = left, top = closes.get(x), right = right, bottom = opens.get(x), border_width = 1, border_color = bdcol, bgcolor = bgcol))
        xloc -= ccounts.get(x)

    if barstate.isrealtime
        var box rtbox = na
        box.delete(rtbox)
        if trend == 1 
            if close < opens.get(0)
                rtbox := drawBox(bar_index, opens.get(0), bar_index + 1, close, dnbarsbguc, dnbarsbguc)
            else if close > closes.get(0)
                rtbox := drawBox(bar_index, close,  bar_index + 1,closes.get(0), upbarsbguc, upbarsbguc)
        if trend == -1
            if close > opens.get(0)
                rtbox := drawBox(bar_index, close, bar_index + 1, opens.get(0), upbarsbguc, upbarsbguc)
            else if close < closes.get(0)
                rtbox := drawBox(bar_index, closes.get(0), bar_index + 1, close, dnbarsbguc, dnbarsbguc)

    if breakout and closes.size() > 12
        a_allLines = line.all
        if array.size(a_allLines) > 0
            for i = 0 to array.size(a_allLines) - 1
                line.delete(array.get(a_allLines, i))
        xloc := bar_index
        for x = 0 to closes.size() - 10

            t = closes.get(x) > opens.get(x) ? 1 : -1
            bout = 0.
            min = opens.get(x)
            max = opens.get(x)
            xloc1 = bar_index
            for y = 0 to closes.size() - 2

                if y - x > 150
                    break
                if y < x + 3
                    if y > x and (t == 1 and closes.get(y) > closes.get(x) or t == -1 and closes.get(y) < closes.get(x))
                        break
      

Показано первые 50% кода (символов: 14235)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 423,50₽ ≈ $17.48