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

Easy money

indicator easy money for tradingview_5807933503848848137.pine

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

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор «Easy money» — это многофункциональный инструмент анализа для TradingView, написанный на Pine Script v5. Он объединяет расчёт стохастического индикатора SMI (Stochastic Momentum Index) с методами Smart Money Concepts, включая определение структурных уровней и зон перекупленности/перепроданности.

Индикатор отображает на графике сглаженные линии SMI и EMA-сигнал, заливает зоны перекупленности и перепроданности, а также рисует уровни Фибоначчи, справедливые разрывы цен (FVG), блоки ордеров и зоны интереса. Дополнительно реализована индикация торговых сессий (Нью-Йорк, Азия, Лондон) с подсветкой фона и таблицей с информацией об объёмах и тайминге.

В настройках пользователь может управлять длинами расчётных периодов, цветами отображения, чувствительностью обнаружения структур, видимостью каждого из модулей и уровнями Фибоначчи. Индикатор предназначен для визуального анализа графиков и не является автоматическим советником.

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

НастройкаОписание
a Длина Percent K для расчёта стохастического индикатора SMI.
b Длина Percent D для расчёта сигнальной линии SMI.
c Длина EMA для сигнальной линии индикатора.
smooth_period Период сглаживания линии SMI методом простой скользящей средней.
ob Уровень перекупленности для индикатора SMI.
os Уровень перепроданности для индикатора SMI.
bullC Цвет отображения бычьих меток и структурных сигналов.
bearC Цвет отображения медвежьих меток и структурных сигналов.
showInt Отображение внутренних структурных сигналов на графике.
intSens Чувствительность обнаружения внутренних структурных уровней (количество баров для поиска).
intStru Тип отображения внутренней структуры: все сигналы, только Break of Structure (BoS) или Change of Character (CHoCH).
showExt Отображение внешних структурных сигналов (Change of Character, Break of Structure).
extSens Чувствительность обнаружения внешних структурных уровней (количество баров для поиска).
extStru Тип отображения внешней структуры: все сигналы, только Break of Structure (BoS) или Change of Character (CHoCH).
showOB Отображение блоков ордеров (Order Blocks) на графике.
showLast Максимальное количество отображаемых блоков ордеров (свинг).
showHHLH Отображение меток Higher High / Lower High на графике.
showHLLL Отображение меток Lower Low / Higher Low на графике.
showAOE Отображение зон интереса (Area of Interest) на графике.
show1D Отображение предыдущего дневного максимума на графике.
show1DLab Отображение меток предыдущего дневного максимума.
show4H Отображение 4-часового максимума на графике.
show4hLab Отображение меток 4-часового максимума.
showFVG Отображение справедливых разрывов цены (Fair Value Gaps) на графике.
contract Применять сокращение (контракт) к справедливым разрывам цены при их нарушении ценой.
fib_0 Нижний уровень Фибоначчи для расчёта зон входа по RSI.
fib_1 Верхний уровень Фибоначчи для расчёта зон входа по RSI.
closeOnly Показывать только ближайший верхний или нижний справедливый разрыв цены (FVG).
fvgcol Цвет заливки и границ справедливых разрывов цены (FVG).
fvgtra Прозрачность заливки справедливых разрывов цены (FVG) в процентах.
showFibs Отображение автоматических уровней Фибоначчи между структурными точками.
show236 Отображение уровня Фибоначчи 0.236 в модуле автоматических Фибоначчи.
show382 Отображение уровня Фибоначчи 0.382 в модуле автоматических Фибоначчи.
show5 Отображение уровня Фибоначчи 0.5 в модуле автоматических Фибоначчи.
show618 Отображение уровня Фибоначчи 0.618 в модуле автоматических Фибоначчи.
show786 Отображение уровня Фибоначчи 0.786 в модуле автоматических Фибоначчи.
fib1 Значение первого уровня Фибоначчи для автоматического построения.
fib2 Значение второго уровня Фибоначчи для автоматического построения.
fib3 Значение третьего уровня Фибоначчи для автоматического построения.
fib4 Значение четвёртого уровня Фибоначчи для автоматического построения.
fib5 Значение пятого уровня Фибоначчи для автоматического построения.
fib1col Цвет линии первого уровня Фибоначчи.
fib2col Цвет линии второго уровня Фибоначчи.
fib3col Цвет линии третьего уровня Фибоначчи.
fib4col Цвет линии четвёртого уровня Фибоначчи.
fib5col Цвет линии пятого уровня Фибоначчи.
rsi_length Период расчёта индикатора RSI.
rsi_overbought Уровень перекупленности для RSI.
rsi_oversold Уровень перепроданности для RSI.
nyCol Цвет фона для нью-йоркской торговой сессии.
asCol Цвет фона для азиатской торговой сессии.
loCol Цвет фона для лондонской торговой сессии.
tra Прозрачность фона торговых сессий в процентах.
Получить полный код

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

indicator(title = 'Easy money', shorttitle = 'Easy money', overlay = false, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500, max_bars_back = 5000)

a = input.int(10, "Percent K Length", minval=1)
b = input.int(3, "Percent D Length", minval=1)
c = input.int(10, "EMA Signal Length", minval=1)
smooth_period = input.int(5, "Smoothing Period", minval=1)
ob = input.float(40, "Overbought", minval=-100, maxval=100)
os = input.float(-40, "Oversold", minval=-100, maxval=100)

ll = ta.lowest(low, a)
hh = ta.highest(high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2

avgrel = ta.ema(rdiff, b)
avgdiff = ta.ema(diff, b)

SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0.0

SMI_smoothed = ta.sma(SMI, smooth_period)

SMIsignal = ta.ema(SMI_smoothed, b)
emasignal = ta.ema(SMI_smoothed, c)

plot(SMI_smoothed, "Stochastic", color=color.black)
plot(emasignal, "EMA", color=color.red)

h0 = hline(ob, "Overbought", color=color.gray)
h1 = hline(os, "Oversold", color=color.gray)

level_ob = ob
level_obsmi = SMI_smoothed > level_ob ? SMI_smoothed : level_ob

level_os = os
level_ossmi = SMI_smoothed < level_os ? SMI_smoothed : level_os

p1 = plot(level_ob, display=display.none)
p2 = plot(level_obsmi, display=display.none)

p3 = plot(level_os, display=display.none)
p4 = plot(level_ossmi, display=display.none)

fill(p1, p2, color=color.new(color.red, 60), title='OverBought')
fill(p3, p4, color=color.new(color.green, 60), title='OverSold')

bullC       = input.color(defval = #14D990, title = "Bull Color", group = "Smart Money Concepts", inline = "7")
bearC       = input.color(defval = #F24968, title = "Bear Color", group = "Smart Money Concepts", inline = "7")
showInt     = input.bool(defval = true, title = "Show Internals", group = "Smart Money Concepts")
intSens     = input.int(3, "Internals Sensitivity", options =  [3 , 5 , 8 ], group = "Smart Money Concepts", inline = "20")
intStru     = input.string(defval = "All", title = "Internal Structure", options = ["All", "BoS", "CHoCH"], inline = "30", group = "Smart Money Concepts")
showExt     = input.bool(defval = true, title = "Show Externals" ,group = "Smart Money Concepts")
extSens     = input.int(25, "Externals Sensitivity", options = [10, 25, 50],group = "Smart Money Concepts", inline = "21")
extStru     = input.string(defval = "All", title = "External Structure", options = ["All", "BoS", "CHoCH"], inline = "31", group = "Smart Money Concepts")
showOB      = input.bool(defval = true, title = "Show Order Blocks" ,group = "Swing Blocks")
showLast    = input.int(defval = 10, title = "Swing Order Blocks", minval = 0, group = "Swing Blocks")
showHHLH    = input.bool(defval = true, title = "Show HH/LH", group = "Swing Blocks")
showHLLL    = input.bool(defval = true, title = "Show LH/LL", group = "Swing Blocks")
showAOE     = input.bool(defval = true, title = "Show Area of Interest", group = "Swing Blocks")
show1D      = input.bool(defval = true, title = "Show Previous Day High", group = "High/Low")
show1DLab   = input.bool(defval = true, title = "Show 1 Day Labels", group = "High/Low")
show4H      = input.bool(defval = true, title = "Show 4 Hour High", group = "High/Low")
show4hLab   = input.bool(defval = true, title = "Show 4 Hour Labels", group = "High/Low")
showFVG     = input.bool(defval = true, title = "Show Fair Value Gaps", group = "FVG")
contract    = input.bool(defval = false, title = "Contract Violated FVG", group = "FVG")
fib_0       = input.float(0.382, "Fib Level 0")
fib_1       = input.float(0.618, "Fib Level 1")
closeOnly   = input.bool(defval = false, title = "Show Closest Up/Down FVG Only", group = "FVG")
fvgcol      = input.color(defval = #F2B807, title = "FVG Color", group = "FVG")
fvgtra      = input.int(defval = 80, minval = 0, maxval = 100, title = "FVG Transparency", group = "FVG")

showFibs    = input.bool(defval = true, title = "Show Auto Fibs", group = "Auto Fibs")

show236     = input.bool(defval = true,  title = "", inline = "1", group = "Auto Fibs")
show382     = input.bool(defval = true,  title = "", inline = "2", group = "Auto Fibs")
show5       = input.bool(defval = true,    title = "", inline = "3", group = "Auto Fibs")
show618     = input.bool(defval = true,  title = "", inline = "4", group = "Auto Fibs")
show786     = input.bool(defval = true,  title = "", group = "Auto Fibs", inline = "5")
fib1        = input.float(defval = .236, title = "", minval = 0, step = 0.01, inline = "1", group = "Auto Fibs")
fib2        = input.float(defval = .382, title = "", minval = 0, step = 0.01, inline = "2", group = "Auto Fibs")
fib3        = input.float(defval = .5,   title = "", minval = 0, step = 0.01, inline = "3", group = "Auto Fibs")
fib4        = input.float(defval = .618, title = "", minval = 0, step = 0.01, inline = "4", group = "Auto Fibs")
fib5        = input.float(defval = .786, title = "", minval = 0, step = 0.01, group = "Auto Fibs", inline = "5")
fib1col     = input.color(title = "", defval = color.gray, inline = "1"  , group = "Auto Fibs")
fib2col     = input.color(title = "", defval = color.lime, inline = "2"  , group = "Auto Fibs")
fib3col     = input.color(title = "", defval = color.yellow, inline = "3", group = "Auto Fibs")
fib4col     = input.color(title = "", defval = color.orange, inline = "4", group = "Auto Fibs")
fib5col     = input.color(title = "", defval = color.red   , group = "Auto Fibs", inline = "5")

var bigData = map.new<string, float>()

if bigData.size() == 0

    bigData.put("moving", 0)
    bigData.put("upaxis", 0.0) 
    bigData.put("upaxis2", 0)
    bigData.put("dnaxis", 0.0) 
    bigData.put("dnaxis2", 0)
    bigData.put("upside", 1)
    bigData.put("downside", 1)

[pdHigh, pdLow, dayHigh, dayLow, pdBar, dayBar] = request.security(syminfo.tickerid, "1D", [high[1], low[1], high, low, time[1], time])

var highArr = array.new_float(), var lowArr  = array.new_float()
var timeArr = array.new_int  (), var volArr  = array.new_float()
var closeArr = array.new_float(), var openArr = array.new_float()

highArr.unshift(high), lowArr.unshift(low)
timeArr.unshift(time), volArr.unshift(volume)
closeArr.unshift(close), openArr.unshift(open)

type rollingTF 

    float highTF                  = 0
    float lowTF                   = 1e8
    int   highTFt                 = 0
    int   lowTFt                  = 0
    float volTF                   = 0
    map   <string, line >         rTFdraw
    map   <string, label>         rTFlabel

method tfDraw(int tfDiff, bool showRollingLab, string tf, bool showLevels) => 

    TFhrdata = rollingTF.new(), var volRolling = array.new<float>()

    if highArr.size() > tfDiff

        for i = 0 to tfDiff

            if showLevels and barstate.islast

                getHigh = highArr.get(i), getLow = lowArr.get(i), 
                             getTime = timeArr.get(i)

                TFhrdata.highTF := math.max(TFhrdata.highTF, getHigh)
                TFhrdata.lowTF  := math.min(TFhrdata.lowTF , getLow )

                if TFhrdata.highTF == getHigh 

                    TFhrdata.highTFt := timeArr.get(i)

                if TFhrdata.lowTF == getLow

                    TFhrdata.lowTFt  := timeArr.get(i)

            TFhrdata.volTF += volArr.get(i)

        volRolling.push(TFhrdata.volTF)

        var lineDraw = rollingTF.new(rTFdraw = map.new<string, line>(), rTFlabel = map.new<string, label>())

        if showLevels

            switch lineDraw.rTFdraw.size() == 0

                true =>  lineDraw.rTFdraw.put("High", line.new(TFhrdata.highTFt, TFhrdata.highTF, time, TFhrdata.highTF, 
                                                 xloc = xloc.bar_time, color = color.aqua)),
                         lineDraw.rTFdraw.put("Low" , line.new(TFhrdata.lowTFt , TFhrdata.lowTF , time, TFhrdata.lowTF , 
                                                 xloc = xloc.bar_time, color = color.aqua))  

                =>       lineDraw.rTFdraw.get("High").set_xy1(TFhrdata.highTFt, TFhrdata.highTF),
                         lineDraw.rTFdraw.get("High").set_xy2(time, TFhrdata.highTF),

                         lineDraw.rTFdraw.get("Low").set_xy1(TFhrdata.lowTFt, TFhrdata.lowTF),
                         lineDraw.rTFdraw.get("Low").set_xy2(time, TFhrdata.lowTF)

            if showRollingLab 

                switch lineDraw.rTFlabel.size() == 0

                    true =>  lineDraw.rTFlabel.put("High", label.new(time, TFhrdata.highTF, xloc = xloc.bar_time, 
                                                         textcolor = color.aqua, 
                                                         text      = tf + "H", 
                                                         size      = size.tiny, 
                                                         style     = label.style_label_left, 
                                                         color     = #00000000
                                                         )),
                             lineDraw.rTFlabel.put("Low" , label.new(time, TFhrdata.lowTF , xloc = xloc.bar_time, 
                                                         textcolor = color.aqua, 
                                                         text      = tf + "L", 
                                                         size      = size.tiny, 
                                                         style     = label.style_label_left, 
                                                         color     = #00000000
                                                         ))  

                    =>       lineDraw.rTFlabel.get("High") .set_xy(time, TFhrdata.highTF),
                             lineDraw.rTFlabel.get("Low")  .set_xy(time, TFhrdata.lowTF)

    [TFhrdata.volTF, volRolling]

tfDrawLower(bool showRollingLab, simple string tf, bool showLevels) => 

    simple int end = switch tf 

        "240" => 240
        "1D"  => 1440

    [o, h, l, c, v, t] = request.security_lower_tf(syminfo.tickerid, "1", [open, high, low, close, volume, time])

    var oArr = array.new_float()
    var hArr = array.new_float()
    var lArr = array.new_float()
    var cArr = array.new_float()
    var vArr = array.new_float()
    var tArr = array.new_int()

    TFhrdata = rollingTF.new(), var volRolling = array.new<float>()

    if h.size() > 0

        for i = 0 to h.size() - 1

            oArr.push(o.get(i))
            hArr.push(h.get(i))
            lArr.push(l.get(i))
            cArr.push(c.get(i))
            vArr.push(v.get(i))
            tArr.push(t.get(i))

            if hArr.size() > end 

                oArr.shift()
                hArr.shift()
                lArr.shift()
                cArr.shift()
                vArr.shift()
                tArr.shift()

        for i = 0 to hArr.size() - 1

            if showLevels

                getHigh = hArr.get(i), getLow = lArr.get(i), 
                             getTime = tArr.get(i)

                TFhrdata.highTF := math.max(TFhrdata.highTF, getHigh)
                TFhrdata.lowTF  := math.min(TFhrdata.lowTF , getLow)

                if TFhrdata.highTF == getHigh 

                    TFhrdata.highTFt := tArr.get(i)

                if TFhrdata.lowTF == getLow

                    TFhrdata.lowTFt  := tArr.get(i)

            TFhrdata.volTF  += vArr.get(i)

        volRolling.push(TFhrdata.volTF)

        var lineDraw = rollingTF.new(rTFdraw = map.new<string, line>(), rTFlabel = map.new<string, label>())

        if showLevels

            switch lineDraw.rTFdraw.size() == 0

                true =>  lineDraw.rTFdraw.put("High", line.new(TFhrdata.highTFt, TFhrdata.highTF, time, TFhrdata.highTF, xloc = xloc.bar_time, color = color.aqua, force_overlay=true)),
                         lineDraw.rTFdraw.put("Low" , line.new(TFhrdata.lowTFt , TFhrdata.lowTF , time, TFhrdata.lowTF , xloc = xloc.bar_time, color = color.aqua, force_overlay=true))  

                =>       lineDraw.rTFdraw.get("High").set_xy1(TFhrdata.highTFt, TFhrdata.highTF),
                         lineDraw.rTFdraw.get("High").set_xy2(time, TFhrdata.highTF),

                         lineDraw.rTFdraw.get("Low").set_xy1(TFhrdata.lowTFt, TFhrdata.lowTF),
                         lineDraw.rTFdraw.get("Low").set_xy2(time, TFhrdata.lowTF)

            if showRollingLab 

                switch lineDraw.rTFlabel.size() == 0

                    true =>  lineDraw.rTFlabel.put("High", label.new(time, TFhrdata.highTF, xloc = xloc.bar_time, 
                                                         textcolor = color.aqua, 
                                                         text      = tf + "H", 
                                                         size      = size.tiny, 
                                                         style     = label.style_label_left, 
                                                         color     = #00000000, force_overlay=true
                                                         )),
                             lineDraw.rTFlabel.put("Low" , label.new(time, TFhrdata.lowTF , xloc = xloc.bar_time, 
                                                         textcolor = color.aqua, 
                                                         text      = tf + "L", 
                                                         size      = size.tiny, 
                                                         style     = label.style_label_left, 
                                                         color     = #00000000, force_overlay=true
                                                         ))  

                    =>       lineDraw.rTFlabel.get("High") .set_xy(time, TFhrdata.highTF),
                             lineDraw.rTFlabel.get("Low")  .set_xy(time, TFhrdata.lowTF)

    [TFhrdata.volTF, volRolling]

var r4hrbars = math.floor(timeframe.in_seconds("240") / timeframe.in_seconds(timeframe.period))
var rDbars   = math.floor(timeframe.in_seconds("1D") / timeframe.in_seconds(timeframe.period))

[vol4hr, vol4hrArr] = switch 

    timeframe.in_seconds() <= 60 => r4hrbars.tfDraw(show4hLab, "240", show4H)
    =>                              tfDrawLower(show4hLab, "240", show4H)

[vol1D, vol1DArr] = switch

    timeframe.in_seconds() <= 60 => rDbars.tfDraw(show1DLab, "1D", show1D) 
    =>                              tfDrawLower(show1DLab, "1D", show1D)

calculatePivots(length)=>

    var int intraCalc = 0

    if bar_index > length + 1

        up  = highArr.slice(0, length).max()
        dn  = lowArr .slice(0, length).min() 

        cHi = highArr.get(length)
        cLo = lowArr .get(length)

        intraCalc := switch 

            cHi > up => 0 
            cLo < dn => 1 
            =>          intraCalc[1]

        topSwing = switch 

            intraCalc == 0 and intraCalc[1] != 0 => cHi 
            =>                                      0 

        botSwing = switch 

            intraCalc == 1 and intraCalc[1] != 1 => cLo
            =>                                      0 

        [topSwing, botSwing]

[bigUpper    , bigLower   ]     = calculatePivots(extSens)
[smallUpper  , smallLower ]     = calculatePivots(intSens)

var label [] upLabel = array.new_label(1)
var label [] dnLabel = array.new_label(1)

var box [] highBlock = array.new_box()
var box [] lowBlock  = array.new_box()

drawChar(x, y, str, col, down) =>

    style = switch down 

        true => label.style_label_down
        =>      label.style_label_up

    line.new (int(x), y, bar_index, y, color = col, style = line.style_dashed, force_overlay=true)
    label.new(math.round(math.avg(x, bar_index)), y, str, color = #00000000, textcolor = col, style = style, size = size.small, force_overlay=true)

drawStructureExt() => 

    var int counter = 0

    if bigUpper != 0
        bigData.put("upside", 1)
        x1 = bar_index - extSens

        txt = switch bigUpper > bigData.get("upaxis")

            true => 'HH'
            =>      'LH'

        if showHHLH

            upLabel.set(0, label.new(x1, bigUpper, txt,

                          color     = color.new(color.white, 100), 
                          textcolor = bearC, 
                          style     = label.style_label_down, 
                          size      = size.small, force_overlay=true
                          ))
        if showOB
            highBlock.push(box.new(x1, bigUpper, last_bar_index + 5, bigUpper * .998, 
                         border_color = color.new(color.red, 75), 
                         bgcolor      = color.new(color.red, 95), force_overlay=true
                         ))

        bigData.put("upaxis" , bigUpper)
        bigData.put("upaxis2", x1)

        counter := 1

    if bigLower != 0
        bigData.put("downside", 1)

        x1 = bar_index - extSens

        txt = switch bigLower < bigData.get("dnaxis") 

            true => "LL" 
            =>      "HL"

        if showHLLL == true 
            dnLabel.set(0, label.new(x1, bigLower, txt, color = #ffffff00, 
                         textcolor = bullC, 
                         style     = label.style_label_up, 
                         size      = size.small, force_overlay=true
                         ))
        if showOB
            lowBlock.push(box.new(x1, bigLower, last_bar_index + 5, bigLower * 1.002,
                          border_color = color.new(color.blue, 75), 
                          bgcolor      = color.new(color.blue, 95), force_overlay=true
                          ))    

        bigData.put("dnaxis" , bigLower)
        bigData.put("dnaxis2", x1)

        counter := -1

    if showExt
        if ta.crossover(close, bigData.get("upaxis"))
            if bigData.get("upside") != 0

                str = switch bigData.get("moving") < 0

                    true => extStru != "BoS"   ? 'CHoCH' : "" 
                    =>      extStru != 'CHoCH' ? 'BoS'   : ""

                if extStru == "All" or str.contains(extStru, str)
                    drawChar(bigData.get("upaxis2"), bigData.get("upaxis"), str, bullC, true)

                bigData.put("upside", 0)
                bigData.put("moving", 1)

        if ta.crossunder(close, bigData.get("dnaxis"))

            if bigData.get("downside") != 0

                str = switch bigData.get("moving") > 0

                    true => extStru != "BoS"   ? 'CHoCH' : "" 
                    =>      extStru != 'CHoCH' ? 'BoS'   : ""

                if extStru == "All" or str.contains(extStru, str)
                    drawChar

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

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

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

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

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

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

Стоимость полного кода
2 483,70₽ ≈ $30.36