0% found this document useful (0 votes)
28 views5 pages

Multi

This document contains a Pine Script code for a trading indicator named 'Multi' that analyzes multiple timeframes for bullish and bearish conditions based on the On-Balance Volume (OBV) oscillator. It allows user-defined inputs for various parameters, including timeframes and lookback periods, and plots signals for regular and hidden bullish and bearish conditions. The script also includes visual elements such as background color changes and labels to indicate the market regime across different timeframes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views5 pages

Multi

This document contains a Pine Script code for a trading indicator named 'Multi' that analyzes multiple timeframes for bullish and bearish conditions based on the On-Balance Volume (OBV) oscillator. It allows user-defined inputs for various parameters, including timeframes and lookback periods, and plots signals for regular and hidden bullish and bearish conditions. The script also includes visual elements such as background color changes and labels to indicate the market regime across different timeframes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

// This source code is subject to the terms of the Mozilla Public License 2.

0 at
https://mozilla.org/MPL/2.0/

// @version=5
indicator("Multi")

// Get user input


res1 = input.timeframe(title="Timeframe #1", defval="240")
res2 = input.timeframe(title="Timeframe #2", defval="1D")
res3 = input.timeframe(title="Timeframe #3", defval="1W")
len = input(20)
src = close
lbR = input(title='Pivot Lookback Right', defval=5)
lbL = input(title='Pivot Lookback Left', defval=5)
rangeUpper = input(title='Max of Lookback Range', defval=60)
rangeLower = input(title='Min of Lookback Range', defval=5)
plotBull = input(title='Plot Bullish', defval=true)
plotHiddenBull = input(title='Plot Hidden Bullish', defval=false)
plotBear = input(title='Plot Bearish', defval=true)
plotHiddenBear = input(title='Plot Hidden Bearish', defval=false)

bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)

obvv(src) =>
change_1 = ta.change(src)
ta.cum(ta.change(src) > 0 ? volume : change_1 < 0 ? -volume : 0 * volume)
os = obvv(src)
obv_osc = os - ta.ema(os, len)
obc_color = obv_osc > 0 ? color.green : color.red

plFound = na(ta.pivotlow(obv_osc, lbL, lbR)) ? false : true


phFound = na(ta.pivothigh(obv_osc, lbL, lbR)) ? false : true

_inRange(cond) =>
bars = ta.barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish

// Osc: Higher Low


oscHL = obv_osc[lbR] > ta.valuewhen(plFound, obv_osc[lbR], 1) and
_inRange(plFound[1])

// Price: Lower Low


priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

//------------------------------------------------------------------------------
// Hidden Bullish

// Osc: Lower Low


oscLL = obv_osc[lbR] < ta.valuewhen(plFound, obv_osc[lbR], 1) and
_inRange(plFound[1])

// Price: Higher Low


priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

//------------------------------------------------------------------------------
// Regular Bearish

// Osc: Lower High


oscLH = obv_osc[lbR] < ta.valuewhen(phFound, obv_osc[lbR], 1) and
_inRange(phFound[1])

// Price: Higher High


priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

//------------------------------------------------------------------------------
// Hidden Bearish

// Osc: Higher High


oscHH = obv_osc[lbR] > ta.valuewhen(phFound, obv_osc[lbR], 1) and
_inRange(phFound[1])

// Price: Lower High


priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

var int cond11 = na


var int cond21 = na
var int cond12 = na
var int cond22 = na
if plotBull
if bullCond
cond11 := 4000
else
cond11 := -4000
else
cond11 := -4000
if plotHiddenBull
if hiddenBullCond
cond12 := 4000
else
cond12 := -4000
else
cond12 := -4000
if plotBear
if bearCond
cond21 := 4000
else
cond21 := -4000
else
cond21 := -4000

if plotHiddenBear
if hiddenBearCond
cond22 := 4000
else
cond22 := -4000
else
cond22 := -4000

// Define custom security function


f_sec(_res, _exp) => request.security(syminfo.ticker, _res,
_exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Get EMA values

obvDValue11L = f_sec(res1, cond11 == 4000)


obvDValue12L = f_sec(res1, cond12 == 4000)
obvDValue21L= f_sec(res2, cond11 == 4000)
obvDValue22L= f_sec(res2, cond12 == 4000)
obvDValue31L = f_sec(res3, cond11 == 4000)
obvDValue32L = f_sec(res3, cond12 == 4000)
obvDValue11S = f_sec(res1, cond21 == 4000)
obvDValue12S = f_sec(res1, cond22 == 4000)
obvDValue21S= f_sec(res2, cond21 == 4000)
obvDValue22S= f_sec(res2, cond22 == 4000)
obvDValue31S = f_sec(res3, cond21 == 4000)
obvDValue32S = f_sec(res3, cond22 == 4000)

// Check filters
regimeFilter11 = obvDValue11L or obvDValue11L[1]
regimeFilter21 = obvDValue21L or obvDValue21L[1]
regimeFilter31 = obvDValue31L or obvDValue31L[1]
regimeFilter41 = obvDValue11S or obvDValue11S[1]
regimeFilter51 = obvDValue21S or obvDValue21S[1]
regimeFilter61 = obvDValue31S or obvDValue31S[1]

regimeFilter12 = obvDValue12L or obvDValue12L[1]


regimeFilter22 = obvDValue22L or obvDValue22L[1]
regimeFilter32 = obvDValue32L or obvDValue32L[1]
regimeFilter42 = obvDValue12S or obvDValue12S[1]
regimeFilter52 = obvDValue22S or obvDValue22S[1]
regimeFilter62 = obvDValue32S or obvDValue32S[1]
// Change background color #1
r1 = hline(0, color=color.black)
r2 = hline(1, color=color.black)
fill(r1, r2, regimeFilter11 or regimeFilter12 ? color.green : na)
var label r1label = na
if barstate.islast
label.delete(r1label[1])
r1label := label.new(bar_index, 0.5, "Timeframe #1 Bullish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

// Change background color #1


r3 = hline(1, color=color.black)
r4 = hline(2, color=color.black)
fill(r3, r4, regimeFilter21 or regimeFilter22 ? color.green : na)

var label r2label = na


if barstate.islast
label.delete(r2label[1])
r2label := label.new(bar_index, 1.5, "Timeframe #2 Bullish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

// Change background color #1


r5 = hline(2, color=color.black)
r6 = hline(3, color=color.black)
fill(r5, r6, regimeFilter31 or regimeFilter32 ? color.green : na)

var label r3label = na


if barstate.islast
label.delete(r3label[1])
r3label := label.new(bar_index, 2.5, "Timeframe #3 Bullish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

// Change background color #1


r7 = hline(3, color=color.black)
r8 = hline(4, color=color.black)

fill(r7, r8, regimeFilter41 or regimeFilter42 ? color.red : na)


var label r4label = na
if barstate.islast
label.delete(r4label[1])
r4label := label.new(bar_index, 3.5, "Timeframe #1 Bearish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

// Change background color #1


r9 = hline(4, color=color.black)
r10 = hline(5, color=color.black)
fill(r9, r10, regimeFilter51 or regimeFilter52 ? color.red : na)
var label r5label = na
if barstate.islast
label.delete(r5label[1])
r5label := label.new(bar_index, 4.5, "Timeframe #2 Bearish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

// Change background color #1


r11 = hline(5, color=color.black)
r12 = hline(6, color=color.black)

fill(r11, r12, regimeFilter61 or regimeFilter62 ? color.red : na)


var label r6label = na
if barstate.islast
label.delete(r6label[1])
r6label := label.new(bar_index, 5.5, "Timeframe #3 Bearish",
color=color.new(color.black,100), textcolor=color.white,
style=label.style_label_left)

You might also like