Wolfpack Id with DivergenceThis indicator simply identifies if the markets are in an up or down trend. You should always use it in combination with other indicators, just as Wavetrends.
This indicator is mostly known because of Market Cipher. The script that was published under the name Wolfpack Id is for some reason closed source, but as it turns out there is of course no secret sauce involved, the original indicator goes way back and the thing that was then called Wolfpack Indicator is simply a MACD Signal Line with 3,8 settings. I added a simple divergence hunter for some extra Informations that might help, brought it up to contemporary pinescript standards, added Alerts and made the whole script open source, as it should be and as the original script also once was. Have fun!
스크립트에서 "WaveTrend"에 대해 찾기
[Lixx] MESA(EMA/SMA) and ROC(ROC/MESA) Take Profit TriggersThis script uses the MESA EMA and SMA as well as the ROC/MESA cross to help find the take profit areas when trading divergences using market cipher or wavetrend. It is inspired by jordanfungs MESA indicator, however this one is different because it is not lagging in the signals.
Hope you enjoy it, and make sure to backtest any strategy before you use it.
Volume Momentum [LucF]Volume momentum gives much more information than a simple volume MA. It does require interpretation however, since increasing volume momentum can indicate strengthening of both an up or down movement. Volume momentum peaks and bottoms are also interesting as they often lead to shifts in price movement.
In order to help interpretation, I color rising volume momentum using price momentum. Green indicates volume-supported upward price movement and red indicates volume-supported downward price movement.
As to falling volume momentum, in my world view it indicates exhaustion or disinterest which requires prior price activity to be interpreted. In strong and steady price movements it can indicate a mere pause. After high price volatility often signalling a top or bottom, falling volume momentum often leads reversals.
Features
Two optional MAs on the main volume momentum line, with crosses on the short MA.
A higher time frame line (shown by default), with the higher time frame being a user-defined multiple of the current chart’s interval. The default is 8, so that a 15m chart will also show a 2h volume momentum.
Two Markers
Tops/Bottoms (marker 1): these occur on high/low price momentum pivots situated in favorable regions, combined with volume momentum peaks.
Pauses/Reversals (marker 2): these simply identify volume momentum high pivots that often lead to shifts in price movement. They are not directional. You can choose to color bars where these markers occur (shown on chart).
You can show only long or short markers.
Alerts
You can define alerts on any combination of markers you configure. After defining the markers you want the alert to trigger on, make sure you are on the interval you want the alert to be monitoring at, then create the alert, select Volume Momentum, use the default “Configured Markers” alert condition and choose your triggering window (usually “Once Per Bar Close”). Once the alert is created, you can change the indicator's inputs with no effect on the alert.
Use Cases
The higher time frame line is very useful in situating current volume activity in a larger context.
I consider all peaks in volume momentum as potentially significant events.
When looking for an entry, I will often wait for the descending volume momentum to change direction at a shorter interval, using price momentum to confirm that increasing volume is working in my favor.
Volume momentum variations can often inform otherwise insignificant price momentum activity.
Here I use price momentum to color volume momentum; inversely, I also use volume momentum to color my momentum indicator.
Notes
Where the markers on my Volume Columns indicator focus on confirming strength of price movements, this indicators’ markers try to focus on shifts in price movement.
My volume momentum is calculated using a smoother variant of CCI which came to be known as WaveTrend.
BUZARA// © Buzzara
// =================================
// PLEASE SUPPORT THE TEAM
// =================================
//
// Telegram: t.me
// =================================
//@version=5
VERSION = ' Buzzara2.0'
strategy('ALGOX V6_1_24', shorttitle = '🚀〄 Buzzara2.0 〄🚀'+ VERSION, overlay = true, explicit_plot_zorder = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 1, calc_on_every_tick = false, process_orders_on_close = true)
G_SCRIPT01 = '■ ' + 'SAIYAN OCC'
//#region ———— <↓↓↓ G_SCRIPT01 ↓↓↓> {
// === INPUTS ===
res = input.timeframe('15', 'TIMEFRAME', group ="NON REPAINT")
useRes = input(true, 'Use Alternate Signals')
intRes = input(10, 'Multiplier for Alernate Signals')
basisType = input.string('ALMA', 'MA Type: ', options= )
basisLen = input.int(50, 'MA Period', minval=1)
offsetSigma = input.int(5, 'Offset for LSMA / Sigma for ALMA', minval=0)
offsetALMA = input.float(2, 'Offset for ALMA', minval=0, step=0.01)
scolor = input(false, 'Show coloured Bars to indicate Trend?')
delayOffset = input.int(0, 'Delay Open/Close MA', minval=0, step=1,
tooltip = 'Forces Non-Repainting')
tradeType = input.string('BOTH', 'What trades should be taken : ',
options = )
//=== /INPUTS ===
h = input(false, 'Signals for Heikin Ashi Candles')
//INDICATOR SETTINGS
swing_length = input.int(10, 'Swing High/Low Length', group = 'Settings', minval = 1, maxval = 50)
history_of_demand_to_keep = input.int(20, 'History To Keep', minval = 5, maxval = 50)
box_width = input.float(2.5, 'Supply/Demand Box Width', group = 'Settings', minval = 1, maxval = 10, step = 0.5)
//INDICATOR VISUAL SETTINGS
show_zigzag = input.bool(false, 'Show Zig Zag', group = 'Visual Settings', inline = '1')
show_price_action_labels = input.bool(false, 'Show Price Action Labels', group = 'Visual Settings', inline = '2')
supply_color = input.color(#00000000, 'Supply', group = 'Visual Settings', inline = '3')
supply_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '3')
demand_color = input.color(#00000000, 'Demand', group = 'Visual Settings', inline = '4')
demand_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '4')
bos_label_color = input.color(#00000000, 'BOS Label', group = 'Visual Settings', inline = '5')
poi_label_color = input.color(#00000000, 'POI Label', group = 'Visual Settings', inline = '7')
poi_border_color = input.color(#00000000, 'POI border', group = 'Visual Settings', inline = '7')
swing_type_color = input.color(#00000000, 'Price Action Label', group = 'Visual Settings', inline = '8')
zigzag_color = input.color(#00000000, 'Zig Zag', group = 'Visual Settings', inline = '9')
//END SETTINGS
// FUNCTION TO ADD NEW AND REMOVE LAST IN ARRAY
f_array_add_pop(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// FUNCTION SWING H & L LABELS
f_sh_sl_labels(array, swing_type) =>
var string label_text = na
if swing_type == 1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HH'
else
label_text := 'LH'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_down,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
else if swing_type == -1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HL'
else
label_text := 'LL'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_up,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
// FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING
f_check_overlapping(new_poi, box_array, atrValue) =>
atr_threshold = atrValue * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// FUNCTION TO DRAW SUPPLY OR DEMAND ZONE
f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atrValue) =>
atr_buffer = atrValue * (box_width / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = f_check_overlapping(poi, box_array, atrValue)
// okay_to_draw = true
//delete oldest box, and then create a new box and add it to the array
if box_type == 1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
// FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN
f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
// if ta.crossover(close, level_to_break)
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
// if ta.crossunder(close, level_to_break)
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT
f_extend_box_endpoint(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 100)
//
stratRes = timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes, '###M') :
timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes, '###W') :
timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes, '###D') :
timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') :
'60'
src = h ? request.security(ticker.heikinashi(syminfo.tickerid),
timeframe.period, close, lookahead = barmerge.lookahead_off) : close
// CALCULATE ATR
atrValue = ta.atr(50)
// CALCULATE SWING HIGHS & SWING LOWS
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
// ARRAYS FOR SWING H/L & BN
var swing_high_values = array.new_float(5,0.00)
var swing_low_values = array.new_float(5,0.00)
var swing_high_bns = array.new_int(5,0)
var swing_low_bns = array.new_int(5,0)
// ARRAYS FOR SUPPLY / DEMAND
var current_supply_box = array.new_box(history_of_demand_to_keep, na)
var current_demand_box = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR SUPPLY / DEMAND POI LABELS
var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR BOS
var supply_bos = array.new_box(5, na)
var demand_bos = array.new_box(5, na)
//END CALCULATIONS
// NEW SWING HIGH
if not na(swing_high)
//MANAGE SWING HIGH VALUES
f_array_add_pop(swing_high_values, swing_high)
f_array_add_pop(swing_high_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_high_values, 1)
f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atrValue)
// NEW SWING LOW
else if not na(swing_low)
//MANAGE SWING LOW VALUES
f_array_add_pop(swing_low_values, swing_low)
f_array_add_pop(swing_low_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_low_values, -1)
f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atrValue)
f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
f_extend_box_endpoint(current_supply_box)
f_extend_box_endpoint(current_demand_box)
channelBal = input.bool(false, "Channel Balance", group = "CHART")
lr_slope(_src, _len) =>
x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
for i = 0 to _len - 1
val = _src
per = i + 1
x += per
y += val
x2 += per * per
xy += val * per
_slp = (_len * xy - x * y) / (_len * x2 - x * x)
_avg = y / _len
_int = _avg - _slp * x / _len + _slp
lr_dev(_src, _len, _slp, _avg, _int) =>
upDev = 0.0, dnDev = 0.0
val = _int
for j = 0 to _len - 1
price = high - val
if price > upDev
upDev := price
price := val - low
if price > dnDev
dnDev := price
price := _src
val += _slp
//
= ta.kc(close, 80, 10.5)
= ta.kc(close, 80, 9.5)
= ta.kc(close, 80, 8)
= ta.kc(close, 80, 3)
barsL = 10
barsR = 10
pivotHigh = fixnan(ta.pivothigh(barsL, barsR) )
pivotLow = fixnan(ta.pivotlow(barsL, barsR) )
source = close, period = 150
= lr_slope(source, period)
= lr_dev(source, period, s, a, i)
y1 = low - (ta.atr(30) * 2), y1B = low - ta.atr(30)
y2 = high + (ta.atr(30) * 2), y2B = high + ta.atr(30)
x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
//Functions
//Line Style function
get_line_style(style) =>
out = switch style
'???' => line.style_solid
'----' => line.style_dashed
' ' => line.style_dotted
//Function to get order block coordinates
get_coordinates(condition, top, btm, ob_val)=>
var ob_top = array.new_float(0)
var ob_btm = array.new_float(0)
var ob_avg = array.new_float(0)
var ob_left = array.new_int(0)
float ob = na
//Append coordinates to arrays
if condition
avg = math.avg(top, btm)
array.unshift(ob_top, top)
array.unshift(ob_btm, btm)
array.unshift(ob_avg, avg)
ob := ob_val
//Function to remove mitigated order blocks from coordinate arrays
remove_mitigated(ob_top, ob_btm, ob_left, ob_avg, target, bull)=>
mitigated = false
target_array = bull ? ob_btm : ob_top
for element in target_array
idx = array.indexof(target_array, element)
if (bull ? target < element : target > element)
mitigated := true
array.remove(ob_top, idx)
array.remove(ob_btm, idx)
array.remove(ob_avg, idx)
array.remove(ob_left, idx)
mitigated
//Function to set order blocks
set_order_blocks(ob_top, ob_btm, ob_left, ob_avg, ext_last, bg_css, border_css, lvl_css)=>
var ob_box = array.new_box(0)
var ob_lvl = array.new_line(0)
//Global elements
var os = 0
var target_bull = 0.
var target_bear = 0.
// Create non-repainting security function
rp_security(_symbol, _res, _src) =>
request.security(_symbol, _res, _src )
htfHigh = rp_security(syminfo.tickerid, res, high)
htfLow = rp_security(syminfo.tickerid, res, low)
// Main Indicator
// Functions
smoothrng(x, t, m) =>
wper = t * 2 - 1
avrng = ta.ema(math.abs(x - x ), t)
smoothrng = ta.ema(avrng, wper) * m
rngfilt(x, r) =>
rngfilt = x
rngfilt := x > nz(rngfilt ) ? x - r < nz(rngfilt ) ? nz(rngfilt ) : x - r : x + r > nz(rngfilt ) ? nz(rngfilt ) : x + r
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
securityNoRep(sym, res, src) => request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on)
swingPoints(prd) =>
pivHi = ta.pivothigh(prd, prd)
pivLo = ta.pivotlow (prd, prd)
last_pivHi = ta.valuewhen(pivHi, pivHi, 1)
last_pivLo = ta.valuewhen(pivLo, pivLo, 1)
hh = pivHi and pivHi > last_pivHi ? pivHi : na
lh = pivHi and pivHi < last_pivHi ? pivHi : na
hl = pivLo and pivLo > last_pivLo ? pivLo : na
ll = pivLo and pivLo < last_pivLo ? pivLo : na
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
f_kc(src, len, sensitivity) =>
basis = ta.sma(src, len)
span = ta.atr(len)
wavetrend(src, chlLen, avgLen) =>
esa = ta.ema(src, chlLen)
d = ta.ema(math.abs(src - esa), chlLen)
ci = (src - esa) / (0.015 * d)
wt1 = ta.ema(ci, avgLen)
wt2 = ta.sma(wt1, 3)
f_top_fractal(_src) => _src < _src and _src < _src and _src > _src and _src > _src
f_bot_fractal(_src) => _src > _src and _src > _src and _src < _src and _src < _src
top_fractal = f_top_fractal(src)
bot_fractal = f_bot_fractal(src)
f_fractalize (_src) => top_fractal ? 1 : bot_fractal ? -1 : 0
f_findDivs(src, topLimit, botLimit) =>
fractalTop = f_fractalize(src) > 0 and src >= topLimit ? src : na
fractalBot = f_fractalize(src) < 0 and src <= botLimit ? src : na
highPrev = ta.valuewhen(fractalTop, src , 0)
highPrice = ta.valuewhen(fractalTop, high , 0)
lowPrev = ta.valuewhen(fractalBot, src , 0)
lowPrice = ta.valuewhen(fractalBot, low , 0)
bearSignal = fractalTop and high > highPrice and src < highPrev
bullSignal = fractalBot and low < lowPrice and src > lowPrev
// Get user input
enableSR = input(false , "SR On/Off", group="SR")
colorSup = input(#00000000 , "Support Color", group="SR")
colorRes = input(#00000000 , "Resistance Color", group="SR")
strengthSR = input.int(2 , "S/R Strength", 1, group="SR")
lineStyle = input.string("Dotted", "Line Style", , group="SR")
lineWidth = input.int(2 , "S/R Line Width", 1, group="SR")
useZones = input(true , "Zones On/Off", group="SR")
useHLZones = input(true , "High Low Zones On/Off", group="SR")
zoneWidth = input.int(2 , "Zone Width %", 0,
tooltip = "it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR")
expandSR = input(true , "Expand SR")
// Get components
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid :
lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1 )
d1 = 0.0, d1 := nz(d1 )
highestph = 0.0, highestph := highestph
lowestpl = 0.0, lowestpl := lowestpl
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel )
label llabel = na, label.delete(llabel )
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
highestph := math.max(highestph, nz(ph , prdlowest), nz(pl , prdlowest))
lowestpl := math.min(lowestpl, nz(ph , prdhighest), nz(pl , prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (not na(ph ) and (ph != 0) ? high : low ) + cwidth
dnl = (not na(ph ) and (ph != 0) ? high : low ) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph )
if high <= upl and high >= dnl
tpoint += 1
chg := true
if not na(pl )
if low <= upl and low >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if (not na(ph ) and countpp < 21)
array.set(sr_levels, countpp, high )
if (not na(pl ) and countpp < 21)
array.set(sr_levels, countpp, low )
// Plot
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? colorSup : colorRes
lo_col = close >= lowestpl ? colorSup : colorRes
if enableSR
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, hi_col)
linefill.new(lowest_fill1 , lowest_fill2 , lo_col)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if (not na(array.get(sr_levs, x)) and enableSR)
line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), line_col))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if (not na(array.get(sr_levs, x)) and enableSR)
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
// Get components
rsi = ta.rsi(close, 28)
//rsiOb = rsi > 78 and rsi > ta.ema(rsi, 10)
//rsiOs = rsi < 27 and rsi < ta.ema(rsi, 10)
rsiOb = rsi > 65 and rsi > ta.ema(rsi, 10)
rsiOs = rsi < 35 and rsi < ta.ema(rsi, 10)
dHigh = securityNoRep(syminfo.tickerid, "D", high )
dLow = securityNoRep(syminfo.tickerid, "D", low )
dClose = securityNoRep(syminfo.tickerid, "D", close )
ema = ta.ema(close, 144)
emaBull = close > ema
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() and not timeframe.isseconds
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() or timeframe.isseconds
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep1(sym, res, src) =>
bool bull_ = na
bull_ := equal_tf(res) ? src : bull_
bull_ := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull_
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) + (timeframe.isseconds ? "S" : "") : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull_ := array.pop(bull_array)
array.clear(bull_array)
bull_
// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
v1 = ta.sma(src, len) // Simple
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
v7 = 0.0
sma_1 = ta.sma(src, len) // Smoothed
v7 := na(v7 ) ? sma_1 : (v7 * (len - 1) + src) / len
v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) // Hull
v9 = ta.linreg(src, len, offSig) // Least Squares
v10 = ta.alma(src, len, offALMA, offSig) // Arnaud Legoux
v11 = ta.sma(v1, len) // Triangular (extreme smooth)
// SuperSmoother filter
// 2013 John F. Ehlers
a1 = math.exp(-1.414 * 3.14159 / len)
b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len)
c2 = b1
c3 = -a1 * a1
c1 = 1 - c2 - c3
v12 = 0.0
v12 := c1 * (src + nz(src )) / 2 + c2 * nz(v12 ) + c3 * nz(v12 )
type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type == 'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HullMA' ? v8 : type == 'LSMA' ? v9 : type == 'ALMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
security_1 = request.security(syminfo.tickerid, res, exp, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
use ? security_1 : exp
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
closeSeries = variant(basisType, close , basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open , basisLen, offsetSigma, offsetALMA)
// === /SERIES ===
// Get Alternate resolution Series if selected.
closeSeriesAlt = reso(closeSeries, useRes, stratRes)
openSeriesAlt = reso(openSeries, useRes, stratRes)
//
lxTrigger = false
sxTrigger = false
leTrigger = ta.crossover (closeSeriesAlt, openSeriesAlt)
seTrigger = ta.crossunder(closeSeriesAlt, openSeriesAlt)
G_RISK = '■ ' + 'Risk Management'
//#region ———— <↓↓↓ G_RISK ↓↓↓> {
// ———————————
//Tooltip
T_LVL = '(%) Exit Level'
T_QTY = '(%) Adjust trade exit volume'
T_MSG = 'Paste JSON message for your bot'
//Webhook Message
O_LEMSG = 'Long Entry'
O_LXMSGSL = 'Long SL'
O_LXMSGTP1 = 'Long TP1'
O_LXMSGTP2 = 'Long TP2'
O_LXMSGTP3 = 'Long TP3'
O_LXMSG = 'Long Exit'
O_SEMSG = 'Short Entry'
O_SXMSGSL = 'Short SL'
O_SXMSGA = 'Short TP1'
O_SXMSGB = 'Short TP2'
O_SXMSGC = 'Short TP3'
O_SXMSGX = 'Short Exit'
// ——————————— | | | Line length guide |
i_lxLvlTP1 = input.float (0.2, 'Level TP1' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP1 = input.float (80.0, 'Qty TP1' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP2 = input.float (0.5, 'Level TP2' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP2 = input.float (10.0, 'Qty TP2' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP3 = input.float (7.0, 'Level TP3' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP3 = input.float (2, 'Qty TP3' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlSL = input.float (0.5, 'Stop Loss' , group = G_RISK,
tooltip = T_LVL)
i_sxLvlTP1 = i_lxLvlTP1
i_sxQtyTP1 = i_lxQtyTP1
i_sxLvlTP2 = i_lxLvlTP2
i_sxQtyTP2 = i_lxQtyTP2
i_sxLvlTP3 = i_lxLvlTP3
i_sxQtyTP3 = i_lxQtyTP3
i_sxLvlSL = i_lxLvlSL
G_MSG = '■ ' + 'Webhook Message'
i_leMsg = input.string (O_LEMSG ,'Long Entry' , group = G_MSG, tooltip = T_MSG)
i_lxMsgSL = input.string (O_LXMSGSL ,'Long SL' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP1 = input.string (O_LXMSGTP1,'Long TP1' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP2 = input.string (O_LXMSGTP2,'Long TP2' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP3 = input.string (O_LXMSGTP3,'Long TP3' , group = G_MSG, tooltip = T_MSG)
i_lxMsg = input.string (O_LXMSG ,'Long Exit' , group = G_MSG, tooltip = T_MSG)
i_seMsg = input.string (O_SEMSG ,'Short Entry' , group = G_MSG, tooltip = T_MSG)
i_sxMsgSL = input.string (O_SXMSGSL ,'Short SL' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP1 = input.string (O_SXMSGA ,'Short TP1' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP2 = input.string (O_SXMSGB ,'Short TP2' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP3 = input.string (O_SXMSGC ,'Short TP3' , group = G_MSG, tooltip = T_MSG)
i_sxMsg = input.string (O_SXMSGX ,'Short Exit' , group = G_MSG, tooltip = T_MSG)
i_src = close
G_DISPLAY = 'Display'
//
i_alertOn = input.bool (true, 'Alert Labels On/Off' , group = G_DISPLAY)
i_barColOn = input.bool (true, 'Bar Color On/Off' , group = G_DISPLAY)
// ———————————
// @function Calculate the Take Profit line, and the crossover or crossunder
f_tp(_condition, _conditionValue, _leTrigger, _seTrigger, _src, _lxLvlTP, _sxLvlTP)=>
var float _tpLine = 0.0
_topLvl = _src + (_src * (_lxLvlTP / 100))
_botLvl = _src - (_src * (_sxLvlTP / 100))
_tpLine := _condition != _conditionValue and _leTrigger ? _topLvl :
_condition != -_conditionValue and _seTrigger ? _botLvl :
nz(_tpLine )
// @function Similar to "ta.crossover" or "ta.crossunder"
f_cross(_scr1, _scr2, _over)=>
_cross = _over ? _scr1 > _scr2 and _scr1 < _scr2 :
_scr1 < _scr2 and _scr1 > _scr2
// ———————————
//
var float condition = 0.0
var float slLine = 0.0
var float entryLine = 0.0
//
entryLine := leTrigger and condition <= 0.0 ? close :
seTrigger and condition >= 0.0 ? close : nz(entryLine )
//
slTopLvl = i_src + (i_src * (i_lxLvlSL / 100))
slBotLvl = i_src - (i_src * (i_sxLvlSL / 100))
slLine := condition <= 0.0 and leTrigger ? slBotLvl :
condition >= 0.0 and seTrigger ? slTopLvl : nz(slLine )
slLong = f_cross(low, slLine, false)
slShort = f_cross(high, slLine, true )
//
= f_tp(condition, 1.2,leTrigger, seTrigger, i_src, i_lxLvlTP3, i_sxLvlTP3)
= f_tp(condition, 1.1,leTrigger, seTrigger, i_src, i_lxLvlTP2, i_sxLvlTP2)
= f_tp(condition, 1.0,leTrigger, seTrigger, i_src, i_lxLvlTP1, i_sxLvlTP1)
tp3Long = f_cross(high, tp3Line, true )
tp3Short = f_cross(low, tp3Line, false)
tp2Long = f_cross(high, tp2Line, true )
tp2Short = f_cross(low, tp2Line, false)
tp1Long = f_cross(high, tp1Line, true )
tp1Short = f_cross(low, tp1Line, false)
switch
leTrigger and condition <= 0.0 => condition := 1.0
seTrigger and condition >= 0.0 => condition := -1.0
tp3Long and condition == 1.2 => condition := 1.3
tp3Short and condition == -1.2 => condition := -1.3
tp2Long and condition == 1.1 => condition := 1.2
tp2Short and condition == -1.1 => condition := -1.2
tp1Long and condition == 1.0 => condition := 1.1
tp1Short and condition == -1.0 => condition := -1.1
slLong and condition >= 1.0 => condition := 0.0
slShort and condition <= -1.0 => condition := 0.0
lxTrigger and condition >= 1.0 => condition := 0.0
sxTrigger and condition <= -1.0 => condition := 0.0
longE = leTrigger and condition <= 0.0 and condition == 1.0
shortE = seTrigger and condition >= 0.0 and condition == -1.0
longX = lxTrigger and condition >= 1.0 and condition == 0.0
shortX = sxTrigger and condition <= -1.0 and condition == 0.0
longSL = slLong and condition >= 1.0 and condition == 0.0
shortSL = slShort and condition <= -1.0 and condition == 0.0
longTP3 = tp3Long and condition == 1.2 and condition == 1.3
shortTP3 = tp3Short and condition == -1.2 and condition == -1.3
longTP2 = tp2Long and condition == 1.1 and condition == 1.2
shortTP2 = tp2Short and condition == -1.1 and condition == -1.2
longTP1 = tp1Long and condition == 1.0 and condition == 1.1
shortTP1 = tp1Short and condition == -1.0 and condition == -1.1
// ——————————— {
//
if strategy.position_size <= 0 and longE and barstate.isconfirmed
strategy.entry(
'Long',
strategy.long,
alert_message = i_leMsg,
comment = 'LE')
if strategy.position_size > 0 and condition == 1.0
strategy.exit(
id = 'LXTP1',
from_entry = 'Long',
qty_percent = i_lxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'LXTP1',
comment_loss = 'SL',
alert_profit = i_lxMsgTP1,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.1
strategy.exit(
id = 'LXTP2',
from_entry = 'Long',
qty_percent = i_lxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'LXTP2',
comment_loss = 'SL',
alert_profit = i_lxMsgTP2,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.2
strategy.exit(
id = 'LXTP3',
from_entry = 'Long',
qty_percent = i_lxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'LXTP3',
comment_loss = 'SL',
alert_profit = i_lxMsgTP3,
alert_loss = i_lxMsgSL)
if longX
strategy.close(
'Long',
alert_message = i_lxMsg,
comment = 'LX')
//
if strategy.position_size >= 0 and shortE and barstate.isconfirmed
strategy.entry(
'Short',
strategy.short,
alert_message = i_leMsg,
comment = 'SE')
if strategy.position_size < 0 and condition == -1.0
strategy.exit(
id = 'SXTP1',
from_entry = 'Short',
qty_percent = i_sxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'SXTP1',
comment_loss = 'SL',
alert_profit = i_sxMsgTP1,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.1
strategy.exit(
id = 'SXTP2',
from_entry = 'Short',
qty_percent = i_sxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'SXTP2',
comment_loss = 'SL',
alert_profit = i_sxMsgTP2,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.2
strategy.exit(
id = 'SXTP3',
from_entry = 'Short',
qty_percent = i_sxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'SXTP3',
comment_loss = 'SL',
alert_profit = i_sxMsgTP3,
alert_loss = i_sxMsgSL)
if shortX
strategy.close(
'Short',
alert_message = i_sxMsg,
comment = 'SX')
// ———————————
c_tp = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.green
c_entry = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.blue
c_sl = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.red
p_tp1Line = plot (
condition == 1.0 or
condition == -1.0 ? tp1Line : na,
title = "TP Line 1",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp2Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 ? tp2Line : na,
title = "TP Line 2",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp3Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? tp3Line : na,
title = "TP Line 3",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_entryLine = plot (
condition >= 1.0 or
condition <= -1.0 ? entryLine : na,
title = "Entry Line",
color = c_entry,
linewidth = 1,
style = plot.style_linebr)
p_slLine = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? slLine : na,
title = "SL Line",
color = c_sl,
linewidth = 1,
style = plot.style_linebr)
fill(
p_tp3Line, p_entryLine,
color = leTrigger or seTrigger ? na :color.new(color.green, 90))
fill(
p_entryLine, p_slLine,
color = leTrigger or seTrigger ? na :color.new(color.red, 90))
//
plotshape(
i_alertOn and longE,
title = 'Long',
text = 'Long',
textcolor = color.white,
color = color.green,
style = shape.labelup,
size = size.tiny,
location = location.belowbar)
plotshape(
i_alertOn and shortE,
title = 'Short',
text = 'Short',
textcolor = color.white,
color = color.red,
style = shape.labeldown,
size = size.tiny,
location = location.abovebar)
plotshape(
i_alertOn and (longX or shortX) ? close : na,
title = 'Close',
text = 'Close',
textcolor = color.white,
color = color.gray,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
l_tp = i_alertOn and (longTP1 or shortTP1) ? close : na
plotshape(
l_tp,
title = "TP1 Cross",
text = "TP1",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP2 or shortTP2) ? close : na,
title = "TP2 Cross",
text = "TP2",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP3 or shortTP3) ? close : na,
title = "TP3 Cross",
text = "TP3",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longSL or shortSL) ? close : na,
title = "SL Cross",
text = "SL",
textcolor = color.white,
color = color.maroon,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
//
plot(
na,
title = "─── ───",
editable = false,
display = display.data_window)
plot(
condition,
title = "condition",
editable = false,
display = display.data_window)
plot(
strategy.position_size * 100,
title = ".position_size",
editable = false,
display = display.data_window)
//#endregion }
// ——————————— <↑↑↑ G_RISK ↑↑↑>
//#region ———— <↓↓↓ G_SCRIPT02 ↓↓↓> {
// @function Queues a new element in an array and de-queues its first element.
f_qDq(_array, _val) =>
array.push(_array, _val)
_return = array.shift(_array)
_return
var line a_slLine = array.new_line(1)
var line a_entryLine = array.new_line(1)
var line a_tp3Line = array.new_line(1)
var line a_tp2Line = array.new_line(1)
var line a_tp1Line = array.new_line(1)
var label a_slLabel = array.new_label(1)
var label a_tp3label = array.new_label(1)
var label a_tp2label = array.new_label(1)
var label a_tp1label = array.new_label(1)
var label a_entryLabel = array.new_label(1)
newEntry = longE or shortE
entryIndex = 1
entryIndex := newEntry ? bar_index : nz(entryIndex )
lasTrade = bar_index >= entryIndex
l_right = 10
line.delete(
f_qDq(a_slLine,
line.new(
entryIndex,
slLine,
last_bar_index + l_right,
slLine,
style = line.style_solid,
color = c_sl)))
line.delete(
f_qDq(a_entryLine,
line.new(
entryIndex,
entryLine,
last_bar_index + l_right,
entryLine,
style = line.style_solid,
color = color.blue)))
line.delete(
f_qDq(a_tp3Line,
line.new(
entryIndex,
tp3Line,
last_bar_index + l_right,
tp3Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp2Line,
line.new(
entryIndex,
tp2Line,
last_bar_index + l_right,
tp2Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp1Line,
line.new(
entryIndex,
tp1Line,
last_bar_index + l_right,
tp1Line,
style = line.style_solid,
color = c_tp)))
label.delete(
f_qDq(a_slLabel,
label.new(
last_bar_index + l_right,
slLine,
'SL: ' + str.tostring(slLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_sl)))
label.delete(
f_qDq(a_entryLabel,
label.new(
last_bar_index + l_right,
entryLine,
'Entry: ' + str.tostring(entryLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = color.blue)))
label.delete(
f_qDq(a_tp3label,
label.new(
last_bar_index + l_right,
tp3Line,
'TP3: ' + str.tostring(tp3Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp2label,
label.new(
last_bar_index + l_right,
tp2Line,
'TP2: ' + str.tostring(tp2Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp1label,
label.new(
last_bar_index + l_right,
tp1Line,
'TP1: ' + str.tostring(tp1Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
// ———————————
//
if longE or shortE or longX or shortX
alert(message = 'Any Alert', freq = alert.freq_once_per_bar_close)
if longE
alert(message = 'Long Entry', freq = alert.freq_once_per_bar_close)
if shortE
alert(message = 'Short Entry', freq = alert.freq_once_per_bar_close)
if longX
alert(message = 'Long Exit', freq = alert.freq_once_per_bar_close)
if shortX
alert(message = 'Short Exit', freq = alert.freq_once_per_bar_close)
//#endregion }
// ——————————— <↑↑↑ G_SCRIPT03 ↑↑↑>
EDUVEST Lorentzian ClassificationEDUVEST Lorentzian Classification - Machine Learning Signal Detection
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
█ ORIGINALITY
This indicator enhances the original Lorentzian Classification concept by jdehorty with EduVest's visual modifications and alert system integration. The core innovation is using Lorentzian distance instead of Euclidean distance for k-NN classification, providing more robust pattern recognition in financial markets.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
█ WHAT IT DOES
- Generates BUY/SELL signals using machine learning classification
- Displays kernel regression estimate for trend visualization
- Shows prediction values on each bar
- Provides trade statistics (Win Rate, W/L Ratio)
- Includes multiple filter options (Volatility, Regime, ADX, EMA, SMA)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
█ HOW IT WORKS
【Lorentzian Distance Calculation】
Unlike Euclidean distance, Lorentzian distance uses logarithmic transformation:
d = Σ log(1 + |xi - yi|)
This provides:
- Better handling of outliers
- More stable distance measurements
- Reduced sensitivity to extreme values
【Feature Engineering】
The classifier uses up to 5 configurable features:
- RSI (Relative Strength Index)
- WT (WaveTrend)
- CCI (Commodity Channel Index)
- ADX (Average Directional Index)
Each feature is normalized using the n_rsi, n_wt, n_cci, or n_adx functions.
【k-Nearest Neighbors Classification】
1. Calculate Lorentzian distance between current bar and historical bars
2. Find k nearest neighbors (default: 8)
3. Sum predictions from neighbors
4. Generate signal based on prediction sum (>0 = Long, <0 = Short)
【Kernel Regression】
Uses Rational Quadratic kernel for smooth trend estimation:
- Lookback Window: 8
- Relative Weighting: 8
- Regression Level: 25
【Filters】
- Volatility Filter: Filters signals during extreme volatility
- Regime Filter: Identifies market regime using threshold
- ADX Filter: Confirms trend strength
- EMA/SMA Filter: Trend direction confirmation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
█ HOW TO USE
【Recommended Settings】
- Timeframe: 15M, 1H, 4H, Daily
- Neighbors Count: 8 (default)
- Feature Count: 5 for comprehensive analysis
【Signal Interpretation】
- Green BUY label: Long entry signal
- Red SELL label: Short entry signal
- Bar colors: Green (bullish) / Red (bearish) prediction strength
【Trade Statistics Panel】
- Winrate: Historical win percentage
- Trades: Total (Wins|Losses)
- WL Ratio: Win/Loss ratio
- Early Signal Flips: Premature signal changes
【Filter Recommendations】
- Enable Volatility Filter for ranging markets
- Enable Regime Filter for trend confirmation
- Use EMA Filter (200) for higher timeframes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
█ CREDITS
Original Lorentzian Classification concept and MLExtensions library by jdehorty.
Enhanced with visual modifications and alert integration by EduVest.
License: Mozilla Public License 2.0
Nuh's Complete Multi-Timeframe Dashboard v4.0Nuh's Complete Multi-Timeframe Dashboard v4.0 - Unified Power System
Professional Multi-Timeframe Technical Analysis Dashboard
Nuh's Complete Multi-Timeframe Dashboard v4.0 represents a comprehensive trading analysis system that unifies 20 powerful technical indicators across up to 6 customizable timeframes into a single, intelligent dashboard. This advanced indicator combines trend analysis (EMA, Alpha Trend, SuperTrend, ADX, DI), momentum oscillators (RSI, Stochastic RSI, MACD, CCI, Williams %R, WaveTrend, KST), volume indicators (OBV, CMF, Volume Analysis, MFI), and volatility measures (Squeeze Momentum, Bollinger Bands, ATR, Williams VIX Fix) to provide traders with a holistic market perspective. Each indicator can be independently enabled or disabled, allowing complete customization based on your trading strategy and preferences.
The revolutionary Weighted Power System is the core innovation of this dashboard, transforming raw indicator signals into actionable market power scores. Unlike traditional dashboards that simply count bullish or bearish signals, this system applies sophisticated weighting to each indicator based on your chosen preset (Balanced, Trend Focus, Momentum Focus, Volume Focus) or custom weights. It then combines these weighted signals across multiple timeframes—with timeframe-specific weighting for scalping, day trading, or swing trading styles—to calculate an Overall Market Power score. This provides you with clear percentage-based bullish and bearish power readings, eliminating guesswork and enabling confident trade decisions backed by mathematical confluence.
Built for serious traders who demand precision and flexibility, the dashboard features a fully customizable display with 20 indicator rows that can be reordered to match your preferences, color-coded gradient visualization for instant market sentiment recognition, and integrated Wundertrading-compatible alerts for automated trading. The system supports both legacy count-based alerts and modern power-threshold alerts, allowing you to receive notifications when market conditions meet your specified confluence requirements. Whether you're scalping on lower timeframes or swing trading on higher timeframes, this professional-grade tool adapts to your trading style while maintaining clean, readable visualization that won't clutter your charts.
Confluence Execution Engine (2of3)The Confluence Execution Engine is a high-performance logic gate designed to filter out market noise and identify high-probability "Golden" entries. It moves beyond simple indicator signals by acting as a mathematical validator for price action. This engine is designed for the Systematic Trader. It removes the "guesswork" of whether a move is real or an exhaustion pump by requiring a mathematical confluence of volume, multi-timeframe momentum, and volatility-adjusted space.
Why This Tool is Unique:
Multi-Dimensional Scoring, Momentum-Adjusted Stretch, Institutional Fingerprint (RVOL + Spike)
Unlike a standard MACD or RSI, this engine uses a weighted scoring matrix. It pulls a "Bundle" of data (WaveTrend, RSI, ROC) from four different timeframes simultaneously. It doesn't give a signal unless the mathematical weight of all four timeframes crosses your "Hurdle" (Base Threshold).
Standard "overbought" indicators are often wrong during strong trends. This engine uses Dynamic Z-Score logic. The Logic: If the price moves away from the mean, it checks the Rate of Change (ROC). The Result: If momentum is massive, the "Stretch" limit expands. It understands that a "stretched" price is actually a sign of strength in a breakout, not a reason to exit. It only warns of a TRAP RISK when the price is far from the mean but momentum is starting to stall.
The engine is gated by Relative Volume. If the market is "sleepy," the engine stays in "PATIENCE" mode. It specifically hunts for Volume Spikes (default 2.5x average). A signal is only upgraded to "HIGH CONVICTION" when an institutional volume spike occurs, confirming that "Big Money" is participating.
How to Operate the Engine
Define Your Hurdle: Set your Confluence Hurdle. A higher number (e.g., 14+) requires more agreement across timeframes, leading to fewer but higher-quality trades.
Monitor the Z/Dynamic Ratio: In the HUD, watch the Z: X.XX / Y.YY. When X approaches Y, you are reaching the edge of the momentum-adjusted move.
The Entry Trigger: Wait for a "LOOK FOR..." advice to turn into a "HIGH CONVICTION" signal (marked by a triangle shape). This confirms that the MTF scoring, Volume, and HTF Trend are all aligned.
Execute the Lines: Use the red and green "Ghost Lines" to set your orders. These are ATR-based, meaning they widen during high volatility to give your trade room to breathe.
For holistic trading system, pair with Volatility Shield Pro and Session Levels
Supply-Demand Dominance & Energy RibbonOverview:
This indicator is specifically fine-tuned for the Nasdaq (NAS100) market. It combines volume-based Delta analysis (Supply-Demand) with price kinetic energy (Slope) to identify high-probability reversal points and trend strength.
Key Features & Usage:
Supply-Demand Dominance (Top-Right Label):
Analyzes volume spikes over a 50-period lookback to determine market control.
Displays "매수 우위" (Bullish Dominance) or "매도 우위" (Bearish Dominance) in real-time.
Energy Ribbon (Bottom Visualization):
Calculates the slope of the TCI oscillator to visualize momentum intensity.
Solid Green/Red: Strong momentum.
Faded Green/Red: Weakening momentum or minor trend.
Momentum Combo Signals (Circle Shapes):
Triggered when WaveTrend and TCI oscillators cross in extreme zones (Overbought 70 / Oversold 30).
Smart Filter: Signals are only shown when they align with the current Supply-Demand dominance, reducing "market noise."
Volume Spikes (Arrow Symbols):
Indicates abnormal volume activity (1.5x average delta). These arrows (↑/↓) help identify potential breakout points or the climax of a move even when a full combo signal isn't present.
All-in-One Momentum Composite The Four Components (and Why They're Chosen)
RSI (Relative Strength Index) – Classic overbought/oversold oscillator (14-period default). Measures speed and change of price movements.
Stochastic (%D line) – Smoothened momentum indicator that compares closing price to the price range over a period. Excellent at spotting reversals in ranging markets.
WaveTrend – Very popular in crypto and forex communities (originally by LazyBear). It’s essentially a momentum oscillator based on overbought/oversold channels, similar to a faster, smoother RSI/Stochastic hybrid. Known for early divergence signals and clean crossovers.
MACD Histogram – Captures momentum changes and trend strength via the difference between fast and slow EMAs. The histogram shows acceleration/deceleration.
QLC v8.4 – GIBAUUM BEAST + ANTI-FAKEOUTQLC v8.4 – GIBAUUM BEAST + ANTI-FAKEOUT
QLC v8.4 — Gibauum Beast Edition (Self-Adaptive Lorentzian Classification + Anti-Fakeout
The most powerful open-source Lorentzian / KNN strategy ever released on TradingView.
Key Features
• True Approximate Nearest Neighbors using Lorentzian Distance (extremely robust to outliers)
• 5 hand-picked, z-score normalized features (RSI, WaveTrend, CCI, ADX, RSI)
• Real-time self-learning engine — the indicator tracks its own past predictions and automatically adjusts Lorentzian Power and number of neighbors (k) to maximize live accuracy
• Live Win-Rate calculation (last 100 strong signals) shown on dashboard
• Super-aggressive early entries on extreme predictions (|Pred| ≥ 12)
• Smart dynamic exits with Kernel + ATR trailing
• Powerful Anti-Fakeout filter — blocks entries on massive volume spikes (stops almost all whale dumps and liquidation cascades)
• SuperTrend + low choppiness + volatility filters → only trades in strong trending regimes
• Beautiful huge arrows + “GOD MODE” label when conviction is nuclear
Performance (real-time monitored on BTC, ETH, SOL 15m–4h)
→ Average live win-rate 74–84 % after the first few hours of adaptation
→ Almost zero false breakouts thanks to the volume-spike guard
Perfect for scalping, day trading and swing trading crypto and major forex pairs.
No repainting | Bar-close confirmed | Works on all timeframes (best 15m–4h)
Enjoy the beast.
CSS_LFU_v0.1Overview:
A multi-factor, market-adaptive swing strategy designed for intraday and short-term crypto trading. It synthesizes momentum, volatility, and trend signals into a unified composite score over a configurable lookback window. The strategy leverages a modular, signal-weighted approach to ensure robust entry timing while remaining compatible with human-in-the-loop validation and algorithmic execution.
Core Modules:
AJFFRSI (RSX-based Momentum): Measures smoothed price momentum with noise-reduction filters to detect crossovers relative to the QQE trailing stop.
QQE (Quantitative Qualitative Easing RSI): A modified RSI with a dynamic trailing stop that adapts to short-term volatility, identifying exhaustion and potential reversal points.
Keltner Channel Zones: Determines overextension relative to trend, providing buy/sell zones based on ATR-banded EMA.
WaveTrend Oscillator: Confirms short-term swings and market direction through smoothed oscillator cross signals.
Rolling Composite Score: Aggregates module signals over a unified lookback (e.g., 144 bars) to normalize noise and capture consistent trends.
Signal Logic:
Each module outputs a discrete score (+1 / 0 / -1).
The rolling composite score sums all module scores over the lookback period.
Long positions trigger when the rolling score meets or exceeds the long threshold.
Short positions trigger when the rolling score meets or falls below the short threshold.
Multi-dimensional signal aggregation reduces false positives from single indicators.
Rolling lookback ensures score normalization across different volatility regimes.
Highly modular: easy to adapt modules or weights to different instruments or timeframes.
Fully compatible with automated execution pipelines, including custom exchange screener bots.
Use Case:
Ideal for quant-driven altcoin or multi-asset strategies where high-frequency validation is critical and sequential module weighting enhances trend flip detection.
Nuh's Multi-Timeframe DashboardAll 10 indicators (EMA, RSI, ADX, RI, Squeezee, WaveTrend, Alpha Trend, SuperTrend, Stoch RSI, Vix Fix) across 7 time frames (5m, 15m, 1h, 2h, 4h, 1D, 1W) consolidated into a single table.
Cipher B Free | WaveTrend (v6)Uh.. I call this.. Mona Lisa kek. Tried creating my own version of Cipher B with Grok. Feel free to tweak to your heart's content
Hello Crypto! Modern Combo Snapshot
Unified long/short analyzer blending EMA structure, SuperTrend, WaveTrend, QQE, and volume pressure.
Background shading flags “watch” and “ready” states; optional long/short modules let you focus on one side.
Alerts fire when every checklist item aligns, while the side-panel table summarizes trend, momentum, liquidity, and overall score in real time.
Indicator → Trend Analysis
Indicator → Momentum Oscillators
Indicator → Volume Indicators
Tags:
cryptocurrency, bitcoin, altcoins, trend-following, momentum, volume, ema, supertrend, intraday, swing-trading, alerts, checklist, trading-strategy, risk-management
Modern Combo Crypto SuiteBlends long and short playbooks in one overlay with quick toggles.
Tracks EMA stacks, SuperTrend, WaveTrend, QQE, and volume to score bias.
Colors the chart background when watch/ready conditions align.
Fires alerts for imminent or fully aligned long/short setups.
Displays a live checklist table summarizing trend, momentum, and volume confidence.
SulLaLuna — HTF M2 x Ultimate BB (Fusion) 🌕 **SulLaLuna — HTF M2 x Ultimate BB (Fusion)** 🚀💵
**By SulLaLuna Trading**
(Portions of the Bollinger Band logic adapted with permission/credit from the *Ultimate Buy & Sell Indicator* by its original author — thank you for the brilliance!)
---
🧭 **What This Is**
This is not just another price-following tool.
This is **a macro liquidity detector** — a **Daily Higher Timeframe Hull Moving Average of the Global M2 Money Supply**, smoothed via lower timeframe candles (default 5m, 48 Hull length), overlaid with **Ultimate-style double Bollinger Bands** to reveal *over-extension & mean reversion zones*.
It doesn’t chase candles.
It watches the tides beneath the market — the **money supply currents** that have a **direct correlation** to asset price behavior.
When liquidity expands → risk-on assets tend to rise.
When liquidity contracts → risk-off waves hit.
We ride those waves.
---
🔍 **What It Does**
* **Tracks Global M2** across major economies, FX-adjusted, and scales it to your chart’s price.
* **HTF Hull MA** (Daily, smoothed via 5m base) → gives you the macro liquidity trend.
* **Ultimate BB logic** applied to the HTF M2 Hull → inner/outer bands for volatility envelopes.
* **Pivot Labels** → ideal entry/exit zones on macro turns.
* **Over-Extension Alerts** → when HTF M2 Hull pushes outside the outer bands.
* **Re-Entry Alerts** → mean reversion triggers when liquidity moves back inside the range.
* **Background Paint** from chart TF M2 slope → for confluence on your entry timeframe.
---
📜 **Suggested How-To**
1. **Choose your execution chart** — e.g., 1–15m for scalps, 1H–4H for swings.
2. **Use the background paint** as your *local tide check* (chart TF M2 slope).
3. **Trade in the direction of the HTF M2 Hull** — green line = liquidity rising, red line = liquidity falling.
4. **Watch pivot labels** — these are potential “macro inflection” points.
5. **Confluence stack** — pair with ZLSMA, WaveTrend divergences, VWAP volume, or your favorite price-action setups.
6. **Size down** when HTF M2 Hull is flat/gray (chop zone).
7. **Scale in/out** on over-extension + re-entry alerts for higher probability swings.
---
⚠️ **Important Note**
This indicator **does not predict price** — it tracks macro liquidity flows that *influence* price.
Think of it as your market’s **tide chart**: when the water’s coming in, you can swim out; when it’s going out, you’d better be ready for the undertow.
---
📢 **Alerts Available**
* HTF Pivot HIGH / LOW
* Over-Extension (HTF Hull outside outer BB)
* Re-Entry (return from overbought/oversold)
---
🤝 **Join the SulLaLuna Tribe**
If this indicator helps you capture better entries, follow & share so more traders can learn to trade *math, not emotion*.
We rise together — **and we’ll meet you on the Moon** 🌕🚀💵.
Divergence TridentA Combination of MACD + VFI + WaveTrend
Tradingview hates me and is making me explain this in greater detail so maybe this is enough????
WT_CROSS Dip Buy Signal(ozkan)This script identifies potential buy opportunities based on WaveTrend (WT_CROSS) momentum crossing below the -60 level — often indicating oversold conditions.
Additional filters include price being above the Kaufman Adaptive Moving Average (KAMA) and volume below the 5-period average, which helps isolate pullbacks within an uptrend.
Buy Signal Conditions:
WT1 < -60
Price > KAMA
Volume < 5-period SMA of volume
Purpose:
To capture early entries at possible local bottoms during bullish trends while avoiding high-volume breakdown traps.
🔔 You can also set an alert based on this condition.
Macd, Wt Cross & HVPMacd Wt Cross & HVP – Advanced Multi-Signal Indicator
This script is a custom-designed multi-signal indicator that brings together three proven concepts to provide a complete view of market momentum, reversals, and volatility build-ups. It is built for traders who want to anticipate key market moves, not just react to them.
Why This Combination ?
While each tool has its strengths, their combined use creates powerful signal confluence.
Instead of juggling multiple indicators separately, this script synchronizes three key perspectives into a single, intuitive display—helping you trade with greater clarity and confidence.
1. MACD Histogram – Momentum and Trend Clarity
At the core of the indicator is the MACD histogram, calculated as the difference between two exponential moving averages (EMAs).
Color-coded bars represent momentum direction and intensity:
Green / blue bars: bullish momentum
Red / pink bars: bearish momentum
Color intensity shows acceleration or weakening of trend.
This visual makes it easy to detect trend shifts and momentum divergence at a glance.
2. WT Cross Signals – Early Reversal Detection
Overlaid on the histogram are green and red dots, based on the logic of the WaveTrend oscillator cross:
Green dots = potential bullish cross (buy signal)
Red dots = potential bearish cross (sell signal)
These signals are helpful for identifying reversal points during both trending and ranging phases.
3. Historical Volatility Percentile (HVP) – Volatility Compression Zones
Behind the histogram, purple vertical zones highlight periods of low historical volatility, based on the HVP:
When volatility compresses below a specific threshold, these zones appear.
Such periods are often followed by explosive price moves, making them prime areas for pre-breakout positioning.
By integrating HVP, the script doesn’t just tell you where the trend is—it tells you when the trend is likely to erupt.
How to Use This Script
Use the MACD histogram to confirm the dominant trend and its strength.
Watch for WT Cross dots as potential entry/exit signals in alignment or divergence with the MACD.
Monitor HVP purple zones as warnings of incoming volatility expansions—ideal moments to prepare for breakout trades.
Best results occur when all three elements align, offering a high-probability trade setup.
What Makes This Script Original?
Unlike many mashups, this script was not created by simply merging indicators. Each component was carefully integrated to serve a specific, complementary purpose:
MACD detects directional bias
WT Cross adds precision timing
HVP anticipates volatility-based breakout timing
This results in a strategic tool for traders, useful on multiple timeframes and adaptable to different trading styles (trend-following, breakout, swing).
Squeeze Momentum Indicator Strategy [LazyBear + PineIndicators]The Squeeze Momentum Indicator Strategy (SQZMOM_LB Strategy) is an automated trading strategy based on the Squeeze Momentum Indicator developed by LazyBear, which itself is a modification of John Carter's "TTM Squeeze" concept from his book Mastering the Trade (Chapter 11). This strategy is designed to identify low-volatility phases in the market, which often precede explosive price movements, and to enter trades in the direction of the prevailing momentum.
Concept & Indicator Breakdown
The strategy employs a combination of Bollinger Bands (BB) and Keltner Channels (KC) to detect market squeezes:
Squeeze Condition:
When Bollinger Bands are inside the Keltner Channels (Black Crosses), volatility is low, signaling a potential upcoming price breakout.
When Bollinger Bands move outside Keltner Channels (Gray Crosses), the squeeze is released, indicating an expansion in volatility.
Momentum Calculation:
A linear regression-based momentum value is used instead of traditional momentum indicators.
The momentum histogram is color-coded to show strength and direction:
Lime/Green: Increasing bullish momentum
Red/Maroon: Increasing bearish momentum
Signal Colors:
Black: Market is in a squeeze (low volatility).
Gray: Squeeze is released, and volatility is expanding.
Blue: No squeeze condition is present.
Strategy Logic
The script uses historical volatility conditions and momentum trends to generate buy/sell signals and manage positions.
1. Entry Conditions
Long Position (Buy)
The squeeze just released (Gray Cross after Black Cross).
The momentum value is increasing and positive.
The momentum is at a local low compared to the past 100 bars.
The price is above the 100-period EMA.
The closing price is higher than the previous close.
Short Position (Sell)
The squeeze just released (Gray Cross after Black Cross).
The momentum value is decreasing and negative.
The momentum is at a local high compared to the past 100 bars.
The price is below the 100-period EMA.
The closing price is lower than the previous close.
2. Exit Conditions
Long Exit:
The momentum value starts decreasing (momentum lower than previous bar).
Short Exit:
The momentum value starts increasing (momentum higher than previous bar).
Position Sizing
Position size is dynamically adjusted based on 8% of strategy equity, divided by the current closing price, ensuring risk-adjusted trade sizes.
How to Use This Strategy
Apply on Suitable Markets:
Best for stocks, indices, and forex pairs with momentum-driven price action.
Works on multiple timeframes but is most effective on higher timeframes (1H, 4H, Daily).
Confirm Entries with Additional Indicators:
The author recommends ADX or WaveTrend to refine entries and avoid false signals.
Risk Management:
Since the strategy dynamically sizes positions, it's advised to use stop-losses or risk-based exits to avoid excessive drawdowns.
Final Thoughts
The Squeeze Momentum Indicator Strategy provides a systematic approach to trading volatility expansions, leveraging the classic TTM Squeeze principles with a unique linear regression-based momentum calculation. Originally inspired by John Carter’s method, LazyBear's version and this strategy offer a refined, adaptable tool for traders looking to capitalize on market momentum shifts.
Sigma 2.0 - Advanced Buy and Sell Signal IndicatorOverview:
Sigma 2.0 is a sophisticated trading indicator designed to help traders identify potential buy and sell opportunities across various financial markets. By leveraging advanced mathematical calculations and incorporating multiple analytical tools, Sigma 2.0 aims to enhance trading strategies by providing precise entry and exit signals.
Key Features:
Advanced Sigma Calculations:
Utilizes a combination of Exponential Moving Averages (EMAs) and price deviations to calculate the Sigma lines (sigma1 and sigma2).
Detects potential trend reversals through the crossover of these Sigma lines.
Customizable Signal Filtering:
Offers the ability to filter buy and sell signals based on user-defined thresholds.
Helps reduce false signals in volatile markets by setting overbought and oversold levels.
Overbought and Oversold Detection:
Identifies extreme market conditions where price reversals are more likely.
Changes the background color of the chart to visually indicate overbought or oversold states.
Integration of Exponential Moving Averages (EMAs):
Includes EMAs of different lengths (10, 21, 55, 200) to assist in identifying market trends.
EMAs act as dynamic support and resistance levels.
Higher Timeframe Signal Incorporation:
Allows users to include signals from a higher timeframe to align trades with the broader market trend.
Enhances the reliability of signals by considering multiple timeframes.
Custom Alerts:
Provides alert conditions for both buy and sell signals.
Enables traders to receive notifications, ensuring timely decision-making.
How It Works:
Sigma Calculation Methodology:
The indicator calculates an average price (ap) and applies EMAs to derive the Sigma lines.
sigma1 represents the smoothed price deviation, while sigma2 is a moving average of sigma1.
A crossover of sigma1 above sigma2 generates a buy signal, indicating potential upward momentum.
Conversely, a crossover of sigma1 below sigma2 generates a sell signal.
Signal Filtering and Thresholds:
Users can enable filtering to only consider signals when sigma1 is below or above certain thresholds.
This helps in focusing on more significant market movements and reducing noise.
Overbought/Oversold Levels:
The indicator monitors sigma1 to detect when the market is in extreme conditions.
Background color changes provide a quick visual cue for these conditions.
EMA Analysis:
The plotted EMAs help in confirming the trend direction.
They can be used alongside Sigma signals to validate trade entries and exits.
Higher Timeframe Signals:
Incorporates signals from a user-selected higher timeframe.
Helps in aligning trades with the overall market trend, increasing the potential success rate.
How to Use:
Adding the Indicator to Your Chart:
Search for "Sigma 2.0" in the TradingView Indicators menu and add it to your chart.
Configuring the Settings:
Adjust the Sigma configurations (Channel Length, Average Length, Signal Line Length) to suit your trading style.
Set the overbought and oversold levels according to your risk tolerance.
Choose whether to filter signals by thresholds.
Select the higher timeframe for additional signal confirmation.
Interpreting the Signals:
Buy Signals:
Indicated by a green triangle below the price bar.
Occur when sigma1 crosses above sigma2 and other conditions are met.
Sell Signals:
Indicated by a red triangle above the price bar.
Occur when sigma1 crosses below sigma2 and other conditions are met.
Higher Timeframe Signals:
Plotted with lime (buy) and maroon (sell) triangles.
Help confirm signals in the current timeframe.
Utilizing EMAs:
Observe the EMAs to gauge the overall trend.
Consider aligning buy signals when the price is above key EMAs and sell signals when below.
Setting Up Alerts:
Use the built-in alert conditions to receive notifications for buy and sell signals.
Customize alert messages as needed.
Credits:
Original Concept Inspiration:
This indicator is inspired by the WaveTrend oscillator and other momentum-based indicators.
Special thanks to the original authors whose work laid the foundation for this enhanced version.
Disclaimer:
Trading involves significant risk, and past performance is not indicative of future results.
This indicator is a tool to assist in analysis and should not be the sole basis for any trading decision.
Always perform thorough analysis and consider multiple factors before entering a trade.
Note:
Ensure your chart is clean and only includes this indicator when publishing.
The script is open-source and can be modified to fit individual trading strategies.
For any questions or support, feel free to reach out or comment.
AWR_WaveTrend Multitimeframe [adapted from LazyBear]I've adapted a script from Lazy Bear (WT trend oscillator)
WaveTrend Oscillator is a port of a famous TS/MT indicator.
When the oscillator (WT1 designed as a line) is above the overbought band (50 to 60) and crosses down the WT2 (dotted line), it is usually a good SELL signal. Similarly, when the oscillator crosses above the signal when below the Oversold band ( (-50 to -60)), it is a good BUY signal.
In this indicator, you can display at the same time, different time frames.
Choice possible are 1 mn, 15 mn, 30 mn, 60 mn, 120 mn, 240 mn, 1D, Week, Month.
Small time frames (1 to 30 mn) are represented by a blue lines (light to dark)
1H is in grey
2H & 4H are in purple (light to dark)
1D is in green
1W is in orange
1M is in black
You can choose which timeframes you want to display for the current period or for the last period closed.
In a few seconds, you perfectly see the selected timeframes trends.
There is also at the bottom right a table summing up all the different values of WT1, WT2 and difference between them.
Positive difference means an upside trend
Negative difference means a downside trend.
Another way of using this indicator is displaying only the difference between WT1 & WT2. It's giving the speed & the direction of all trends. Trends are our friends ...
You can observe the significent times frames and look if they are all positives or negatives or if the speed of lower timeframe cross a longer timeframe of if the speed is decreasing or increasing...
Difference values goes generaly from -20 to 20 (it can exceed a bit but really rare). 12 is already high level of speed.
Many uses possible.
In the exemple posted, I've selected WT1 and WT2 for timeframes 4H, Daily & Weekly.
Marker 1:
Orange lines (WT1) are far below - 50 (-67 here) and cross WT2 pointed lines : weekly buy signal
But this buy signal is balanced by 4H & Daily sell signal = it's marking start of hesitations of main trend !!!!
Marker 2 :
Next buy signal in 4H or daily would normaly confirm the start
Marker 3 :
Sell signal in 4H and daily but weekly has an upside trend ! Start of a counter trend in the trend. To find the perfect timing of that you have to look to lower time frames, because 4H and daily are giving many hesitations signals crossing down & crossing up many times in an overbought zone.
Marker 4 :
End of the counter trend. Most of the time, the countertrend don't go in the "over" zone. That's why if you trading in an counter trend, you have to keep it in mind.
Then a few days later you can see the sell signal. And what a sell signal ! 4H & daily are smashed down really fastly ! Trends change warning !
Marker 5
Long hesitation/change of the trend. Daily WT and 4H are below the weekly trends. Weekly start to go down.
Start of a counter trend inside the trend giving us the best selling signal at her end !
Marker 6 :
Long hesitation/change of the trend.
You have to look in lower time frames to identify the short trend. Difficult to find the best timing to get in. ....
I've add many alerts. When a time frame become positive or negative. When many time frames are positive or negative or above or below 47 level...
Please feel free to explore.
Hope it will help you.
Thanks to Lazybear ! Thousands thanks to Lazybear !
Exemple with difference
Range of a source displayed in thirdsThis indicator will take the value of any external source input and display how it has changed over time (the lookback period in settings). For the purposes of display here I'm using the WT1 line from Wavetrend with Crosses by LazyBear to provide a source input.
The highest and lowest value of the source over the lookback period are used to determine the highest and lowest point - the green and red lines at the top and bottom of the bands. This region is then mathematically split into three, such that the source (and its optional moving average line) can be defined as being in the top third, the middle or the bottom third.
Applications for this could be in risk management where you may wish to take on a larger position size when a certain indicator is in the top third, or decide that you want to enter / leave positions when the source crosses in / out of the extreme points.






















