0% found this document useful (0 votes)
146 views23 pages

VIVIDLY MIX Scalper With Signal DMI Trend

This document contains a Pine Script™ code for a trading indicator called 'VIVIDLY MIX Scalper with signal & DMI Trend'. It includes parameters for moving averages, entry signals, and visual elements such as arrows and labels to assist traders in identifying market trends and potential entry points. The script also incorporates elements like Parabolic SAR and MACD for additional trading signals.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
146 views23 pages

VIVIDLY MIX Scalper With Signal DMI Trend

This document contains a Pine Script™ code for a trading indicator called 'VIVIDLY MIX Scalper with signal & DMI Trend'. It includes parameters for moving averages, entry signals, and visual elements such as arrows and labels to assist traders in identifying market trends and potential entry points. The script also incorporates elements like Parabolic SAR and MACD for additional trading signals.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 23

// This Pine Script™ code is subject to the terms of the Mozilla Public

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


// © vikmillion

//@version=6
indicator('VIVIDLY MIX Scalper with signal & DMI Trend', shorttitle =
'VMS V3', overlay = true, max_lines_count = 500, max_boxes_count
= 250, max_bars_back = 500)

// CM_SlingShotSystem
//Created by ChrisMoody on 10-05-2014
//Known as SlingShot Method that keeps Traders on Trending Side of
Market.
sae_CSS = input(true, title = 'Show Aggressive Entry?, Or Use as
Alert To Potential Conservative Entry? (CM_SlingShotSystem)', group
= 'CM_SlingShotSystem')
sce_CSS = input(true, title = 'Show Conservative Entry?
(CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
st_CSS = input(true, title = 'Show Trend Arrows at Top and Bottom
of Screen? (CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
def_CSS = input(false, title = 'Only Choose 1 - Either Conservative
Entry Arrows or \'B\'-\'S\' Letters (CM_SlingShotSystem)', group =
'CM_SlingShotSystem')
pa_CSS = input(true, title = 'Show Conservative Entry Arrows?
(CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
sl_CSS = input(false, title = 'Show \'B\'-\'S\' Letters?
(CM_SlingShotSystem)', group = 'CM_SlingShotSystem')

// Parameters for plotarrow


arrow_up_color_CSS = input.color(color.lime, title = 'Up Entry Arrow
Color (CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
arrow_down_color_CSS = input.color(color.red, title = 'Down Entry
Arrow Color (CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
arrow_up_style_CSS = input.string('Arrow Up', title = 'Up Entry
Arrow Style (CM_SlingShotSystem)', options = ['Arrow Up', 'Arrow
Down', 'Triangle Up', 'Triangle Down'], group =
'CM_SlingShotSystem')
arrow_down_style_CSS = input.string('Arrow Down', title = 'Down
Entry Arrow Style (CM_SlingShotSystem)', options = ['Arrow Up',
'Arrow Down', 'Triangle Up', 'Triangle Down'], group =
'CM_SlingShotSystem')
arrow_thickness_CSS = input.int(2, title = 'Arrow Thickness
(CM_SlingShotSystem)', minval = 1, maxval = 10, group =
'CM_SlingShotSystem')

// Parameters for EMA


ema_slow_period_CSS = input.int(62, title = 'Slow EMA Period
(CM_SlingShotSystem)', group = 'CM_SlingShotSystem')
ema_fast_period_CSS = input.int(38, title = 'Fast EMA Period
(CM_SlingShotSystem)', group = 'CM_SlingShotSystem')

//EMA Definitions
emaSlow_CSS = ta.ema(close, ema_slow_period_CSS)
emaFast_CSS = ta.ema(close, ema_fast_period_CSS)

//Aggressive Entry or Alert To Potential Trade


pullbackUpT_CSS() =>
emaFast_CSS > emaSlow_CSS and close < emaFast_CSS
pullbackDnT_CSS() =>
emaFast_CSS < emaSlow_CSS and close > emaFast_CSS

//Conservative Entry Code For Highlight Bars


entryUpT_CSS() =>
emaFast_CSS > emaSlow_CSS and close[1] < emaFast_CSS and
close > emaFast_CSS
entryDnT_CSS() =>
emaFast_CSS < emaSlow_CSS and close[1] > emaFast_CSS and
close < emaFast_CSS

//Conservative Entry True/False Condition


entryUpTrend_CSS = emaFast_CSS > emaSlow_CSS and close[1] <
emaFast_CSS and close > emaFast_CSS ? 1 : 0
entryDnTrend_CSS = emaFast_CSS < emaSlow_CSS and close[1] >
emaFast_CSS and close < emaFast_CSS ? 1 : 0

//Define Up and Down Trend for Trend Arrows at Top and Bottom of
Screen
upTrend_CSS = emaFast_CSS >= emaSlow_CSS
downTrend_CSS = emaFast_CSS < emaSlow_CSS

//Definition for Conservative Entry Up and Down PlotArrows


codiff_bool_CSS = entryUpTrend_CSS == 1 ? true : false
codiff2_bool_CSS = entryDnTrend_CSS == 1 ? true : false

codiff_CSS = codiff_bool_CSS ? 1.0 : na


codiff2_CSS = codiff2_bool_CSS ? 1.0 : na

//Color definition for Moving Averages


col_CSS = emaFast_CSS > emaSlow_CSS ? color.lime : emaFast_CSS
< emaSlow_CSS ? color.red : color.yellow

//Moving Average Plots and Fill


p1_CSS = plot(emaSlow_CSS, title = 'Slow MA
(CM_SlingShotSystem)', style = plot.style_linebr, linewidth = 4, color
= col_CSS)
p2_CSS = plot(emaFast_CSS, title = 'Fast MA
(CM_SlingShotSystem)', style = plot.style_linebr, linewidth = 2, color
= col_CSS)
fill(p1_CSS, p2_CSS, color = color.new(color.silver, 50))

plotshape(st_CSS and upTrend_CSS ? upTrend_CSS : false, title =


'Conservative Buy Entry Triangle (CM_SlingShotSystem)', style =
shape.triangleup, location = location.bottom, color = color.lime,
offset = 0, size = size.small)
plotshape(st_CSS and downTrend_CSS ? downTrend_CSS : false, title
= 'Conservative Short Entry Triangle (CM_SlingShotSystem)', style =
shape.triangledown, location = location.top, color = color.red, offset
= 0, size = size.small)

// © Saleh_Toodarvari
// indicator(title="Parabolic SAR + EMA 200 + MACD Signals",
shorttitle="SAR EMA MACD", overlay=true, timeframe="",
timeframe_gaps=true)
// Inputs
sar_start = input(0.02)
sar_increment = input(0.02)
sar_maximum = input(0.2, 'Max Value')
ema_len = input.int(200, minval = 1, title = 'Length')
ema_src = input(close, title = 'Source')
ema_offset = input.int(title = 'Offset', defval = 0, minval = -500,
maxval = 500)
macd_fast_length = input(title = 'Fast Length', defval = 12)
macd_slow_length = input(title = 'Slow Length', defval = 26)
macd_src = input(title = 'Source', defval = close)
signal_length = input.int(title = 'Signal Smoothing', minval = 1,
maxval = 50, defval = 9)
sma_source = input.string(title = 'Oscillator MA Type', defval =
'EMA', options = ['SMA', 'EMA'])
sma_signal = input.string(title = 'Signal Line MA Type', defval =
'EMA', options = ['SMA', 'EMA'])
// Colors
col_macd = input(#2962FF, 'MACD Line ', group = 'Color Settings',
inline = 'MACD')
col_signal = input(#FF6D00, 'Signal Line ', group = 'Color
Settings', inline = 'Signal')
col_grow_above = input(#26A69A, 'Above Grow', group =
'Histogram', inline = 'Above')
col_fall_above = input(#B2DFDB, 'Fall', group = 'Histogram', inline =
'Above')
col_grow_below = input(#FFCDD2, 'Below Grow', group =
'Histogram', inline = 'Below')
col_fall_below = input(#FF5252, 'Fall', group = 'Histogram', inline =
'Below')
// Parabolic SAR
SAR = ta.sar(sar_start, sar_increment, sar_maximum)
plot(SAR, 'ParabolicSAR', style = plot.style_circles, color = #2962FF)
// EMA 200
EMA_200 = ta.ema(ema_src, ema_len)
plot(EMA_200, title = 'EMA', color = #e7eb10, linewidth = 2, offset
= ema_offset)
// MACD
fast_ma = sma_source == 'SMA' ? ta.sma(macd_src,
macd_fast_length) : ta.ema(macd_src, macd_fast_length)
slow_ma = sma_source == 'SMA' ? ta.sma(macd_src,
macd_slow_length) : ta.ema(macd_src, macd_slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == 'SMA' ? ta.sma(macd, signal_length) :
ta.ema(macd, signal_length)
delta = macd - signal
// Conditions
main_trend = if ohlc4 < EMA_200
'Bearish'
else
'Bullish'

sar_long = if SAR < low


true
else
false
sar_short = if SAR > high
true
else
false

macd_long = if ta.crossover(delta, 0)
true
else
false
macd_short = if ta.crossunder(delta, 0)
true
else
false
// Long
buy_signal = sar_long and macd_long and main_trend == 'Bullish'
// Short
sell_signal = sar_short and macd_short and main_trend == 'Bearish'
// Plots
// plotshape(buy_signal, title = 'Buy Label', text = 'Buy', location =
location.belowbar, style = shape.labelup, size = size.tiny, color =
color.green, textcolor = color.white)
// plotshape(sell_signal, title = 'Sell Label', text = 'Sell', location =
location.abovebar, style = shape.labeldown, size = size.tiny, color =
color.red, textcolor = color.white)
//_________________alerts_________________
alertcondition(buy_signal, title = 'SAR EMA200 MACD Buy signal!',
message = 'Buy signal')
alertcondition(sell_signal, title = 'SAR EMA200 MACD Sell signal!',
message = 'Sell signal')

// © LonesomeTheBlue
// iindicator("Double Zig Zag with HHLL", overlay=true,
max_bars_back=500)
prd1 = input.int(defval = 8, title = 'ZigZag Period 1', minval = 2,
maxval = 20)
prd2 = input.int(defval = 20, title = 'ZigZag Period 2', minval = 2,
maxval = 50)
showzz = input.string(defval = 'Show Both', title = 'Show Zig Zags',
options = ['Show Zig Zag 1', 'Show Zig Zag 2', 'Show Both', 'Show
None'])
showhhll = input.string(defval = 'Show Both', title = 'Show HHLL',
options = ['Show HHLL 1', 'Show HHLL 2', 'Show Both', 'Show None'])
upcol1 = input(defval = color.lime, title = 'Zig Zag 1 Up Color')
dncol1 = input(defval = color.red, title = 'Zig Zag 1 Down Color')
upcol2 = input(defval = color.blue, title = 'Zig Zag 2 Up Color')
dncol2 = input(defval = color.purple, title = 'Zig Zag 2 Down Color')
txtcol = input(defval = color.black, title = 'Text Color')
zz1style = input.string(defval = 'Dashed', title = 'Zig Zag 1 Line
Style', options = ['Dashed', 'Dotted'])
zz1width = input.int(defval = 2, title = 'Zig zag 1 Line Width', minval
= 1, maxval = 4)
zz2width = input.int(defval = 3, title = 'Zig zag 2 Line Width', minval
= 1, maxval = 6)

float ph1 = ta.highestbars(high, prd1) == 0 ? high : na


float pl1 = ta.lowestbars(low, prd1) == 0 ? low : na
float ph2 = ta.highestbars(high, prd2) == 0 ? high : na
float pl2 = ta.lowestbars(low, prd2) == 0 ? low : na

var dir1 = 0
var dir2 = 0
dir1 := bool(ph1) and na(pl1) ? 1 : bool(pl1) and na(ph1) ? -1 : dir1
dir2 := bool(ph2) and na(pl2) ? 1 : bool(pl2) and na(ph2) ? -1 : dir2

var max_array_size = 10 // [5, 2] matrix


var zigzag1 = array.new_float(0)
var zigzag2 = array.new_float(0)
oldzigzag1 = array.copy(zigzag1)
oldzigzag2 = array.copy(zigzag2)

add_to_zigzag(pointer, value, bindex) =>


array.unshift(pointer, bindex)
array.unshift(pointer, value)
if array.size(pointer) > max_array_size
array.pop(pointer)
array.pop(pointer)

update_zigzag(pointer, value, bindex, dir) =>


if array.size(pointer) == 0
add_to_zigzag(pointer, value, bindex)
else
if dir == 1 and value > array.get(pointer, 0) or dir == -1 and
value < array.get(pointer, 0)
array.set(pointer, 0, value)
array.set(pointer, 1, bindex)
0.

dir1changed = ta.change(dir1)
if bool(ph1) or bool(pl1)
if bool(dir1changed)
add_to_zigzag(zigzag1, dir1 == 1 ? ph1 : pl1, bar_index)
else
update_zigzag(zigzag1, dir1 == 1 ? ph1 : pl1, bar_index,
dir1)

dir2changed = ta.change(dir2)
if bool(ph2) or bool(pl2)
if bool(dir2changed)
add_to_zigzag(zigzag2, dir2 == 1 ? ph2 : pl2, bar_index)
else
update_zigzag(zigzag2, dir2 == 1 ? ph2 : pl2, bar_index,
dir2)

if array.size(zigzag1) >= 6
var line zzline1 = na
var label zzlabel1 = na
if array.get(zigzag1, 0) != array.get(oldzigzag1, 0) or
array.get(zigzag1, 1) != array.get(oldzigzag1, 1)
if array.get(zigzag1, 2) == array.get(oldzigzag1, 2) and
array.get(zigzag1, 3) == array.get(oldzigzag1, 3)
line.delete(zzline1)
label.delete(zzlabel1)
if showzz == 'Show Zig Zag 1' or showzz == 'Show Both'
zzline1 := line.new(x1 = math.round(array.get(zigzag1,
1)), y1 = array.get(zigzag1, 0), x2 = math.round(array.get(zigzag1,
3)), y2 = array.get(zigzag1, 2), color = dir1 == 1 ? upcol1 : dncol1,
width = zz1width, style = zz1style == 'Dashed' ? line.style_dashed :
line.style_dotted)
zzline1
if showhhll == 'Show HHLL 1' or showhhll == 'Show Both'
hhlltxt = dir1 == 1 ? array.get(zigzag1, 0) >
array.get(zigzag1, 4) ? 'HH' : 'LH' : array.get(zigzag1, 0) <
array.get(zigzag1, 4) ? 'LL' : 'HL'
labelcol = dir1 == 1 ? array.get(zigzag1, 0) >
array.get(zigzag1, 4) ? upcol1 : dncol1 : array.get(zigzag1, 0) <
array.get(zigzag1, 4) ? dncol1 : upcol1
zzlabel1 := label.new(x = math.round(array.get(zigzag1,
1)), y = array.get(zigzag1, 0), text = hhlltxt, color = labelcol,
textcolor = txtcol, style = dir1 == 1 ? label.style_label_down :
label.style_label_up)
zzlabel1

if array.size(zigzag2) >= 6
var line zzline2 = na
var label zzlabel2 = na
if array.get(zigzag2, 0) != array.get(oldzigzag2, 0) or
array.get(zigzag2, 1) != array.get(oldzigzag2, 1)
if array.get(zigzag2, 2) == array.get(oldzigzag2, 2) and
array.get(zigzag2, 3) == array.get(oldzigzag2, 3)
line.delete(zzline2)
label.delete(zzlabel2)
if showzz == 'Show Zig Zag 2' or showzz == 'Show Both'
zzline2 := line.new(x1 = math.round(array.get(zigzag2,
1)), y1 = array.get(zigzag2, 0), x2 = math.round(array.get(zigzag2,
3)), y2 = array.get(zigzag2, 2), color = dir2 == 1 ? upcol2 : dncol2,
width = zz2width)
zzline2
if showhhll == 'Show HHLL 2' or showhhll == 'Show Both'
hhlltxt = dir2 == 1 ? array.get(zigzag2, 0) >
array.get(zigzag2, 4) ? 'HH' : 'LH' : array.get(zigzag2, 0) <
array.get(zigzag2, 4) ? 'LL' : 'HL'
labelcol = dir2 == 1 ? array.get(zigzag2, 0) >
array.get(zigzag2, 4) ? upcol2 : dncol2 : array.get(zigzag2, 0) <
array.get(zigzag2, 4) ? dncol2 : upcol2
zzlabel2 := label.new(x = math.round(array.get(zigzag2,
1)), y = array.get(zigzag2, 0), text = hhlltxt, color = labelcol,
textcolor = txtcol, style = dir2 == 1 ? label.style_label_down :
label.style_label_up)
zzlabel2

// © LeviathanCapital
// indicator("Swing Points and Liquidity - By Leviathan",
overlay=true, max_boxes_count=500, max_lines_count=500,
max_labels_count = 500)
// Inputs
swingSizeR = input.int(10, 'Bars Right-Left', inline = 'brl')
swingSizeL = input.int(15, '-', inline = 'brl')
showBoxes = input.bool(true, 'Show Boxes ', inline = 'aa')
showSwingLines = input.bool(true, 'Show Lines', inline = 'aa')
showBubbles = input.bool(true, 'Show Labels ', inline = 'bb')
showVol = input.bool(false, 'Show Volume', inline = 'bb')
showOId = input.bool(false, 'Show OI Δ ', inline = 'cc')
extendtilfilled = input.bool(true, 'Extend Until Fill', inline = 'cc')

// Conditions
hidefilled = input.bool(false, 'Hide Filled', group = 'Conditions')
voltresh = input.int(0, 'Volume >', group = 'Conditions')
oitresh = input.int(0, 'OI Δ (abs.) >', group = 'Conditions')
pnoid = input.string('/', 'Only Swings With', options = ['Positive OI
Delta', 'Negative OI Delta', '/'], group = 'Conditions')
// Appearance inputs
showhighs = input.bool(true, '', inline = 'sh', group = 'Appearance')
showlows = input.bool(true, '', inline = 'sl', group = 'Appearance')
sellcol = input.color(#aa2430, 'Lows (Line - Label - Box)', inline =
'sh', group = 'Appearance')
buycol = input.color(#66bb6a, 'Highs (Line - Label - Box)', inline =
'sl', group = 'Appearance')
sellcolB = input.color(#aa2430, '', inline = 'sh', group =
'Appearance')
buycolB = input.color(#66bb6a, '', inline = 'sl', group =
'Appearance')
sellboxCol = input.color(#80192231, '', inline = 'sh', group =
'Appearance')
buyboxCol = input.color(#66bb6a31, '', inline = 'sl', group =
'Appearance')
lineStyle = input.string('Dotted', 'Line Style + Width', ['Solid',
'Dashed', 'Dotted'], inline = 'l', group = 'Appearance')
lineWid = input.int(1, '', inline = 'l', group = 'Appearance')
boxWid = input.float(0.7, 'Box Width + Type ', step = 0.1, inline =
'xx', group = 'Appearance')
boxStyle = input.string('TYPE 1', '', options = ['TYPE 1', 'TYPE 2'],
inline = 'xx', group = 'Appearance')
labelsize = input.string('Size: Tiny', 'Text Style ', options =
['Size: Normal', 'Size: Large', 'Size: Small', 'Size: Tiny', 'Size: Auto'],
inline = 'txt', group = 'Appearance')
texthalign = input.string('Right', '', options = ['Middle', 'Right',
'Left'], inline = 'txt', group = 'Appearance')
lookback = input.bool(false, '', inline = 'lb')
daysBack = input.float(150, 'Lookback (D) ', inline =
'lb')
// OI Data
binance = input.bool(true, 'Binance USDT.P', inline = 'src', group =
'Open Interest')
binance2 = input.bool(true, 'Binance USD.P', inline = 'src', group =
'Open Interest')
binance3 = input.bool(true, 'Binance BUSD.P', inline = 'src2', group
= 'Open Interest')
bitmex = input.bool(true, 'BitMEX USD.P', inline = 'src2', group =
'Open Interest')
bitmex2 = input.bool(true, 'BitMEX USDT.P ', inline = 'src3', group =
'Open Interest')
kraken = input.bool(true, 'Kraken USD.P', inline = 'src3', group =
'Open Interest')

// Calculating inRange, used for lookback in days


MSPD = 24 * 60 * 60 * 1000
lastBarDate = timestamp(year(timenow), month(timenow),
dayofmonth(timenow), hour(timenow), minute(timenow),
second(timenow))
thisBarDate = timestamp(year, month, dayofmonth, hour, minute,
second)
daysLeft = math.abs(math.floor((lastBarDate - thisBarDate) / MSPD))
inRange = lookback ? daysLeft < daysBack : true

//Pivot calculations
int prevHighIndex = na
int prevLowIndex = na
bool highActive = false
bool lowActive = false
bool h = false
bool l = false
pivHi = ta.pivothigh(high, swingSizeL, swingSizeR)
pivLo = ta.pivotlow(low, swingSizeL, swingSizeR)
if not na(pivHi)
h := true
prevHighIndex := bar_index - swingSizeR
prevHighIndex
if not na(pivLo)
l := true
prevLowIndex := bar_index - swingSizeR
prevLowIndex

// Getting OI data
mex = syminfo.basecurrency == 'BTC' ? 'XBT' :
string(syminfo.basecurrency)
oid1 = nz(request.security('BINANCE' + ':' +
string(syminfo.basecurrency) + 'USDT.P_OI', timeframe.period, close
- close[1], ignore_invalid_symbol = true), 0)
oid2 = nz(request.security('BINANCE' + ':' +
string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, close -
close[1], ignore_invalid_symbol = true), 0)
oid3 = nz(request.security('BINANCE' + ':' +
string(syminfo.basecurrency) + 'BUSD.P_OI', timeframe.period, close
- close[1], ignore_invalid_symbol = true), 0)
oid4 = nz(request.security('BITMEX' + ':' + mex + 'USD.P_OI',
timeframe.period, close - close[1], ignore_invalid_symbol = true), 0)
oid5 = nz(request.security('BITMEX' + ':' + mex + 'USDT.P_OI',
timeframe.period, close - close[1], ignore_invalid_symbol = true), 0)
oid6 = nz(request.security('KRAKEN' + ':' +
string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, close -
close[1], ignore_invalid_symbol = true), 0)

deltaOI = (binance ? nz(oid1, 0) : 0) + (binance2 ? nz(oid2, 0) / close


: 0) + (binance3 ? nz(oid3, 0) : 0) + (bitmex ? nz(oid4, 0) / close : 0)
+ (bitmex2 ? nz(oid5, 0) / close : 0) + (kraken ? nz(oid6, 0) / close :
0)

//Volume, OI, box width


vol = volume[swingSizeR]

oitreshcond = oitresh > 0 ? math.abs(deltaOI[swingSizeR]) > oitresh


: true
voltreshcond = voltresh > 0 ? vol > voltresh : true
oicond = pnoid == 'Positive OI Delta' ? deltaOI[swingSizeR] > 0 :
pnoid == 'Negative OI Delta' ? deltaOI[swingSizeR] < 0 : true

color CLEAR = color.rgb(0, 0, 0, 100)


boxWid1 = 0.001 * boxWid
// Styles
boxStyle(x) =>
switch x
'TYPE 1' => h ? pivHi : l ? pivLo : na
'TYPE 2' => h ? pivHi * (1 - boxWid1) : l ? pivLo * (1 +
boxWid1) : na
lineStyle(x) =>
switch x
'Solid' => line.style_solid
'Dashed' => line.style_dashed
'Dotted' => line.style_dotted
switchtextsize(textsize) =>
switch textsize
'Size: Normal' => size.normal
'Size: Small' => size.small
'Size: Tiny' => size.tiny
'Size: Auto' => size.auto
'Size: Large' => size.large
switchhalign(texthalign) =>
switch texthalign
'Middle' => text.align_center
'Right' => text.align_right
'Left' => text.align_left

//Swing level labels


var levelBoxes = array.new_box()
var levelLines = array.new_line()
if h and inRange and showhighs and oitreshcond and voltreshcond
and oicond
hBox = box.new(prevHighIndex, pivHi * (1 + boxWid1),
bar_index, boxStyle(boxStyle), border_color = na, bgcolor =
showBoxes ? sellboxCol : CLEAR, text = (showVol ? str.tostring(vol,
format.volume) : na) + ' ' + (showOId ?
str.tostring(deltaOI[swingSizeR], format.volume) : ''), text_halign =
switchhalign(texthalign), text_valign = text.align_center, text_color
= chart.fg_color, text_size = switchtextsize(labelsize))
hLine = line.new(prevHighIndex, pivHi, bar_index, pivHi, color =
showSwingLines ? sellcol : CLEAR, style = lineStyle(lineStyle), width
= lineWid)
array.push(levelBoxes, hBox)
array.push(levelLines, hLine)
if l and inRange and showhighs and oitreshcond and voltreshcond
and oicond
lBox = box.new(prevLowIndex, pivLo * (1 - boxWid1), bar_index,
boxStyle(boxStyle), border_color = na, bgcolor = showBoxes ?
buyboxCol : CLEAR, text = (showVol ? str.tostring(vol,
format.volume) : na) + ' ' + (showOId ?
str.tostring(deltaOI[swingSizeR], format.volume) : ''), text_halign =
switchhalign(texthalign), text_valign = text.align_center, text_color
= chart.fg_color, text_size = switchtextsize(labelsize))
lLine = line.new(prevLowIndex, pivLo, bar_index, pivLo, color =
showSwingLines ? buycol : CLEAR, style = lineStyle(lineStyle), width
= lineWid)
array.push(levelBoxes, lBox)
array.push(levelLines, lLine)

// Looping over the full array of lines and updating them, and
deleting them if they have been touched
size = array.size(levelBoxes)
if size > 0
for i = 0 to size - 1 by 1
j = size - 1 - i
box = array.get(levelBoxes, j)
line = array.get(levelLines, j)
level = line.get_y2(line)
filled = high >= level and low <= level

if filled and extendtilfilled and not hidefilled


array.remove(levelLines, j)
array.remove(levelBoxes, j)
continue

box.set_right(box, bar_index + 1)
line.set_x2(line, bar_index + 1)
if filled and hidefilled
array.remove(levelLines, j)
array.remove(levelBoxes, j)
line.delete(line)
box.delete(box)

if not filled and not extendtilfilled


array.remove(levelLines, j)
array.remove(levelBoxes, j)
continue
box.set_right(box, bar_index[0] + 4)
line.set_x2(line, bar_index[0] + 4)

// Deleting the oldest lines if array is too big


if array.size(levelBoxes) >= 500
int i = 0
while array.size(levelBoxes) >= 500
box = array.get(levelBoxes, i)
line = array.get(levelLines, i)
box.delete(box)
line.delete(line)
array.remove(levelBoxes, i)
array.remove(levelLines, i)
i := i + 1
i

// Plotting circle labels


plotshape(showhighs and showBubbles and h and oitreshcond and
voltreshcond and oicond ? high[swingSizeR] : na, style =
shape.circle, location = location.absolute, offset = -swingSizeR,
color = sellcolB, size = size.tiny)
plotshape(showlows and showBubbles and l and oitreshcond and
voltreshcond and oicond ? low[swingSizeR] : na, style = shape.circle,
location = location.absolute, offset = -swingSizeR, color = buycolB,
size = size.tiny)

// indicator(title="Relative Strength Index", shorttitle="RSI",


format=format.price, precision=2, timeframe="",
timeframe_gaps=true)
rsiLengthInput = input.int(14, minval=1, title="RSI Length",
group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate
Divergence", group="RSI Settings", display = display.data_window,
tooltip = "Calculating divergences is needed in order for divergence
alerts to fire.")

change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// rsiPlot = plot(rsi, "RSI", color=#7E57C2)


// rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
// midline = hline(50, "RSI Middle Band", color=color.new(#787B86,
50))
// rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
// fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90),
title="RSI Background Fill")
// midLinePlot = plot(50, color = na, editable = false, display =
display.none)
// fill(rsiPlot, midLinePlot, 100, 70, top_color = color.new(color.green,
0), bottom_color = color.new(color.green, 100), title = "Overbought
Gradient Fill")
// fill(rsiPlot, midLinePlot, 30, 0, top_color = color.new(color.red,
100), bottom_color = color.new(color.red, 0), title = "Oversold
Gradient Fill")

// Smoothing MA inputs
GRP = "Moving Average"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected.
Determines the distance between the SMA and the bands."
maTypeInput = input.string("SMA", "Type", options = ["None",
"SMA", "SMA + Bollinger Bands", "EMA", "SMMA (RMA)", "WMA",
"VWMA"], group = GRP, display = display.data_window)
maLengthInput = input.int(14, "Length", group = GRP, display =
display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval = 0.001, maxval
= 50, step = 0.5, tooltip = TT_BB, group = GRP, display =
display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"

// Smoothing MA Calculation
ma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)

// Smoothing MA plots
smoothingMA = enableMA ? ma(rsi, maLengthInput, maTypeInput) :
na
smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput
: na
// plot(smoothingMA, "RSI-based MA", color=color.yellow, display =
enableMA ? display.all : display.none)
// bbUpperBand = plot(smoothingMA + smoothingStDev, title =
"Upper Bollinger Band", color=color.green, display = isBB ?
display.all : display.none)
// bbLowerBand = plot(smoothingMA - smoothingStDev, title =
"Lower Bollinger Band", color=color.green, display = isBB ?
display.all : display.none)
// fill(bbUpperBand, bbLowerBand, color= isBB ?
color.new(color.green, 90) : na, title="Bollinger Bands Background
Fill", display = isBB ? display.all : display.none)

// Divergence
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

_inRange(bool cond) =>


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

plFound = false
phFound = false

bullCond = false
bearCond = false

rsiLBR = rsi[lookbackRight]

if calculateDivergence
//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low
plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and
_inRange(plFound[1])
// Price: Lower Low
lowLBR = low[lookbackRight]
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound

//------------------------------------------------------------------------------
// Regular Bearish
// rsi: Lower High
phFound := not na(ta.pivothigh(rsi, lookbackLeft,
lookbackRight))
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and
_inRange(phFound[1])
// Price: Higher High
highLBR = high[lookbackRight]
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound

alertcondition(bullCond, title='Regular Bullish Divergence',


message="Found a new Regular Bullish Divergence, `Pivot
Lookback Right` number of bars to the left of the current bar.")
alertcondition(bearCond, title='Regular Bearish Divergence',
message='Found a new Regular Bearish Divergence, `Pivot
Lookback Right` number of bars to the left of the current bar.')

// indicator(title="Awesome Oscillator", shorttitle="AO",


timeframe="", timeframe_gaps=true)
ao = ta.sma(hl2,5) - ta.sma(hl2,34)
diff = ao - ao[1]

// plot(ao, color = diff <= 0 ? #F44336 : #009688,


style=plot.style_columns)
changeToGreen = ta.crossover(diff, 0)
changeToRed = ta.crossunder(diff, 0)
alertcondition(changeToGreen, title = "AO color changed to green",
message = "Awesome Oscillator's color has changed to green")
alertcondition(changeToRed, title = "AO color changed to red",
message = "Awesome Oscillator's color has changed to red")

//DMI
diLength = input.int(14, title="DI Length", minval=1, group="Trend
Detection")
adxSmoothing = input.int(14, title="ADX Smoothing", minval=1,
group="Trend Detection")
adxThreshold = input.float(20, title="ADX Threshold for Trend",
group="Trend Detection")

[diplus, diminus, adx] = ta.dmi(diLength, adxSmoothing)

isFlat = adx < adxThreshold


isLong = adx >= adxThreshold and diplus > diminus
isShort = adx >= adxThreshold and diminus > diplus

// © vikmillion
table_size_input = input.string("Normal", "Table Size",
options=["Tiny", "Small", "Normal", "Large", "Huge"])
// Function to determine text size based on input
get_text_size(size) =>
switch size
"Tiny" => size.tiny
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
"Huge" => size.huge
=> size.small

var table signalsTable = table.new(position = position.top_right,


columns = 3, rows = 12, border_width = 1)
var textSize = get_text_size(table_size_input)

if barstate.isfirst
table.cell_set_text(signalsTable, 0, 0, '\nCHECK')
table.cell_set_text_size(signalsTable, 0, 0, textSize)
table.cell_set_text(signalsTable, 1, 0, '\nLONG')
table.cell_set_text_size(signalsTable, 1, 0, textSize)
table.cell_set_text(signalsTable, 2, 0, '\nSHORT')
table.cell_set_text_size(signalsTable, 2, 0, textSize)
table.cell_set_text_color(signalsTable, 2, 0, color.red)

/// 1. RSI vs MA
table.cell_set_text(signalsTable, 0, 1, "RSI vs MA")
table.cell_set_text_size(signalsTable, 0, 1, textSize)

var int rsiCrossState = 0

bool rsi_cross_above_ma = ta.crossover(rsi, smoothingMA)


bool rsi_cross_below_ma = ta.crossunder(rsi, smoothingMA)

if rsi_cross_above_ma
rsiCrossState := 1
if rsi_cross_below_ma
rsiCrossState := -1

if rsiCrossState == 1
table.cell_set_text(signalsTable, 1, 1, "✔️")
table.cell_set_bgcolor(signalsTable, 1, 1, color.lime)
table.cell_set_text_color(signalsTable, 1, 1, color.black)
table.cell_set_text_size(signalsTable, 1, 1, textSize)

table.cell_set_text(signalsTable, 2, 1, "➖")
table.cell_set_bgcolor(signalsTable, 2, 1, color.white)
table.cell_set_text_color(signalsTable, 2, 1, color.black)
table.cell_set_text_size(signalsTable, 2, 1, textSize)

else if rsiCrossState == -1
table.cell_set_text(signalsTable, 1, 1, "➖")
table.cell_set_bgcolor(signalsTable, 1, 1, color.white)
table.cell_set_text_color(signalsTable, 1, 1, color.black)
table.cell_set_text_size(signalsTable, 1, 1, textSize)

table.cell_set_text(signalsTable, 2, 1, "✔️")
table.cell_set_bgcolor(signalsTable, 2, 1, color.red)
table.cell_set_text_color(signalsTable, 2, 1, color.white)
table.cell_set_text_size(signalsTable, 2, 1, textSize)

else
table.cell_set_text(signalsTable, 1, 1, "➖")
table.cell_set_bgcolor(signalsTable, 1, 1, color.white)
table.cell_set_text_color(signalsTable, 1, 1, color.black)
table.cell_set_text_size(signalsTable, 1, 1, textSize)

table.cell_set_text(signalsTable, 2, 1, "➖")
table.cell_set_bgcolor(signalsTable, 2, 1, color.white)
table.cell_set_text_color(signalsTable, 2, 1, color.black)
table.cell_set_text_size(signalsTable, 2, 1, textSize)

// 2. MACD: cross
bool macd_signal_below = signal < macd
bool macd_signal_above = signal > macd
table.cell_set_text(signalsTable, 0, 2, "MACD CROSS")
table.cell_set_text_size(signalsTable, 0, 2, textSize)

table.cell_set_text(signalsTable, 1, 2, macd_signal_below ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 1, 2, textSize)
table.cell_set_bgcolor(signalsTable, 1, 2, macd_signal_below ?
color.lime : color.white)
table.cell_set_text_color(signalsTable, 1, 2, color.black)

table.cell_set_text(signalsTable, 2, 2, macd_signal_above ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 2, 2, textSize)
table.cell_set_bgcolor(signalsTable, 2, 2, macd_signal_above ?
color.red : color.white)
table.cell_set_text_color(signalsTable, 2, 2, macd_signal_above ?
color.white : color.black)

// 3. MACD: hist
bool macd_hist_above_zero = delta > 0
bool macd_hist_below_zero = delta < 0
table.cell_set_text(signalsTable, 0, 3, "MACD HIST")
table.cell_set_text_size(signalsTable, 0, 3, textSize)

table.cell_set_text(signalsTable, 1, 3, macd_hist_above_zero ? "✔️" :


"➖")
table.cell_set_text_size(signalsTable, 1, 3, textSize)
table.cell_set_bgcolor(signalsTable, 1, 3, macd_hist_above_zero ?
color.lime : color.white)
table.cell_set_text_color(signalsTable, 1, 3, color.black)

table.cell_set_text(signalsTable, 2, 3, macd_hist_below_zero ? "✔️" :


"➖")
table.cell_set_text_size(signalsTable, 2, 3, textSize)
table.cell_set_bgcolor(signalsTable, 2, 3, macd_hist_below_zero ?
color.red : color.white)
table.cell_set_text_color(signalsTable, 2, 3, macd_hist_below_zero ?
color.white : color.black)

// 4. AO: Bar
table.cell_set_text(signalsTable, 0, 4, "AO BAR")
table.cell_set_text_size(signalsTable, 0, 4, textSize)

// AO-текущее и AO-предыдущее
bool barIsGreen = ao > ao[1]
bool barIsRed = ao <= ao[1]

if barIsGreen
table.cell_set_text(signalsTable, 1, 4, "✔️")
table.cell_set_bgcolor(signalsTable, 1, 4, color.lime)
table.cell_set_text_color(signalsTable, 1, 4, color.black)
table.cell_set_text_size(signalsTable, 1, 4, textSize)
else
table.cell_set_text(signalsTable, 1, 4, "➖")
table.cell_set_bgcolor(signalsTable, 1, 4, color.white)
table.cell_set_text_color(signalsTable, 1, 4, color.black)
table.cell_set_text_size(signalsTable, 1, 4, textSize)

if barIsRed
table.cell_set_text(signalsTable, 2, 4, "✔️")
table.cell_set_bgcolor(signalsTable, 2, 4, color.red)
table.cell_set_text_color(signalsTable, 2, 4, color.white)
table.cell_set_text_size(signalsTable, 2, 4, textSize)
else
table.cell_set_text(signalsTable, 2, 4, "➖")
table.cell_set_bgcolor(signalsTable, 2, 4, color.white)
table.cell_set_text_color(signalsTable, 2, 4, color.black)
table.cell_set_text_size(signalsTable, 2, 4, textSize)

// 5. SAR
table.cell_set_text(signalsTable, 0, 5, "SAR")
table.cell_set_text_size(signalsTable, 0, 5, textSize)

table.cell_set_text(signalsTable, 1, 5, sar_long ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 1, 5, textSize)
table.cell_set_bgcolor(signalsTable, 1, 5, sar_long ? color.lime :
color.white)
table.cell_set_text_color(signalsTable, 1, 5, color.black)

table.cell_set_text(signalsTable, 2, 5, sar_short ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 2, 5, textSize)
table.cell_set_bgcolor(signalsTable, 2, 5, sar_short ? color.red :
color.white)
table.cell_set_text_color(signalsTable, 2, 5, sar_short ? color.white :
color.black)

// 6. RSI 50
table.cell_set_text(signalsTable, 0, 6, "RSI 50")
table.cell_set_text_size(signalsTable, 0, 6, textSize)

table.cell_set_text(signalsTable, 1, 6, rsi > 50 ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 1, 6, textSize)
table.cell_set_bgcolor(signalsTable, 1, 6, rsi > 50 ? color.lime :
color.white)
table.cell_set_text_color(signalsTable, 1, 6, color.black)

table.cell_set_text(signalsTable, 2, 6, rsi < 50 ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 2, 6, textSize)
table.cell_set_bgcolor(signalsTable, 2, 6, rsi < 50 ? color.red :
color.white)
table.cell_set_text_color(signalsTable, 2, 6, color.white)

// 7. Awesome Oscillator 0
table.cell_set_text(signalsTable, 0, 7, "AO")
table.cell_set_text_size(signalsTable, 0, 7, textSize)

table.cell_set_text(signalsTable, 1, 7, ao > 0 ? "✔️" : "➖")


table.cell_set_bgcolor(signalsTable, 1, 7, ao > 0 ? color.lime :
color.white)
table.cell_set_text_color(signalsTable, 1, 7, color.black)
table.cell_set_text_size(signalsTable, 1, 7, textSize)

table.cell_set_text(signalsTable, 2, 7, ao < 0 ? "✔️" : "➖")


table.cell_set_bgcolor(signalsTable, 2, 7, ao < 0 ? color.red :
color.white)
table.cell_set_text_color(signalsTable, 2, 7, color.white)
table.cell_set_text_size(signalsTable, 2, 7, textSize)

// 8. 200MA
bool trend_above_ma = close > EMA_200
bool trend_below_ma = close < EMA_200
table.cell_set_text(signalsTable, 0, 8, "200MA")
table.cell_set_text_size(signalsTable, 0, 8, textSize)

table.cell_set_text(signalsTable, 1, 8, trend_above_ma ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 1, 8, textSize)
table.cell_set_bgcolor(signalsTable, 1, 8, trend_above_ma ?
color.lime : color.white)
table.cell_set_text_color(signalsTable, 1, 8, color.black)

table.cell_set_text(signalsTable, 2, 8, trend_below_ma ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 2, 8, textSize)
table.cell_set_bgcolor(signalsTable, 2, 8, trend_below_ma ? color.red
: color.white)
table.cell_set_text_color(signalsTable, 2, 8, trend_below_ma ?
color.white : color.black)

// 9. Conservative Entry (CM_SlingShotSystem)


table.cell_set_text(signalsTable, 0, 9, "CONS ENTRY")
table.cell_set_text_size(signalsTable, 0, 9, textSize)

table.cell_set_text(signalsTable, 1, 9, (st_CSS and upTrend_CSS ?


upTrend_CSS : false) ? "✔️" : "➖")
table.cell_set_text_size(signalsTable, 1, 9, textSize)
table.cell_set_bgcolor(signalsTable, 1, 9, (st_CSS and upTrend_CSS ?
upTrend_CSS : false) ? color.lime : color.white)
table.cell_set_text_color(signalsTable, 1, 9, color.black)

table.cell_set_text(signalsTable, 2, 9, (st_CSS and downTrend_CSS ?


downTrend_CSS : false) ? "✔️" : "➖")
table.cell_set_text_size(signalsTable, 2, 9, textSize)
table.cell_set_bgcolor(signalsTable, 2, 9, (st_CSS and
downTrend_CSS ? downTrend_CSS : false) ? color.red : color.white)
table.cell_set_text_color(signalsTable, 2, 9, color.black)

// 10. RSI: 70/30


bool rsi_overbought = rsi >= 70
bool rsi_oversold = rsi <= 30
table.cell_set_text(signalsTable, 0, 10, "RSI : 70/30")
table.cell_set_text_size(signalsTable, 0, 10, textSize)

table.cell_set_text(signalsTable, 1, 10, rsi_oversold ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 1, 10, textSize)
table.cell_set_bgcolor(signalsTable, 1, 10, rsi_oversold ? color.lime :
color.white)
table.cell_set_text_color(signalsTable, 1, 10, color.black)

table.cell_set_text(signalsTable, 2, 10, rsi_overbought ? "✔️" : "➖")


table.cell_set_text_size(signalsTable, 2, 10, textSize)
table.cell_set_bgcolor(signalsTable, 2, 10, rsi_overbought ? color.red
: color.white)
table.cell_set_text_color(signalsTable, 2, 10, rsi_overbought ?
color.white : color.black)

// 11. DMI
table.cell_set_text(signalsTable, 0, 11, "DMI:Trend/Flat ")
table.cell_set_text_size(signalsTable, 0, 11, textSize)

if isFlat
table.cell_set_text(signalsTable, 1, 11, "✔️")
table.cell_set_bgcolor(signalsTable, 1, 11, color.gray)
table.cell_set_text_color(signalsTable, 1, 11, color.white)
table.cell_set_text_size(signalsTable, 1, 11, textSize)

table.cell_set_text(signalsTable, 2, 11, "➖")


table.cell_set_bgcolor(signalsTable, 2, 11, color.white)
table.cell_set_text_color(signalsTable, 2, 11, color.black)
table.cell_set_text_size(signalsTable, 2, 11, textSize)
else if isLong
table.cell_set_text(signalsTable, 1, 11, "✔️")
table.cell_set_bgcolor(signalsTable, 1, 11, color.green)
table.cell_set_text_color(signalsTable, 1, 11, color.white)
table.cell_set_text_size(signalsTable, 1, 11, textSize)

table.cell_set_text(signalsTable, 2, 11, "➖")


table.cell_set_bgcolor(signalsTable, 2, 11, color.white)
table.cell_set_text_color(signalsTable, 2, 11, color.black)
table.cell_set_text_size(signalsTable, 2, 11, textSize)
else if isShort
table.cell_set_text(signalsTable, 1, 11, "➖")
table.cell_set_bgcolor(signalsTable, 1, 11, color.white)
table.cell_set_text_color(signalsTable, 1, 11, color.black)
table.cell_set_text_size(signalsTable, 1, 11, textSize)
table.cell_set_text(signalsTable, 2, 11, "✔️")
table.cell_set_bgcolor(signalsTable, 2, 11, color.red)
table.cell_set_text_color(signalsTable, 2, 11, color.white)
table.cell_set_text_size(signalsTable, 2, 11, textSize)

bool rsi_above_ma = (rsi > smoothingMA)


bool rsi_below_ma = (rsi < smoothingMA)
bool buy = macd_signal_below and macd_hist_above_zero and
barIsGreen and rsi_above_ma
bool sell = macd_signal_above and macd_hist_below_zero and
barIsRed and rsi_below_ma

var bool inLong = false

bool buySignal = buy and not inLong


bool sellSignal = sell and inLong

if buySignal
inLong := true
if sellSignal
inLong := false

plotshape( buySignal, title = 'Buy Label', text = 'Buy X


4', location = location.belowbar, style = shape.labelup, size
= size.tiny, color = color.green, textcolor = color.white)
plotshape( sellSignal, title = 'Sell Label', text = 'Sell X 4',
location = location.abovebar, style = shape.labeldown, size
= size.tiny, color = color.red, textcolor = color.white)

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy