Simple TrenderOriginates from:
I was reading some Impulse Trading literature by A. Elder.. In it, someone named Kerry Lovvorn proposed "An End of Day Trend Following System" for someone lazy.
Originally it is just price closing above an 8 ema (low) for long. Exit when price closes below an 8 ema (low). The opposite for a short position.
Conditions: Buy when price closed below ema (low) for two bars or more, then closes above. Opposite for a short position. I do not follow this condition. Though it may help with whipsaw.
My condition is when price closes above the 26 ema (low) (works the best for me) I place orders above the initial crossing bars high. Opposite for lows.
I look for stocks that are low in price to go long on. I want the run from 2's to 15's
I look for stocks that are mid-teens/20's in price to go short on. I want the run from 20's to 2's
I look for stock with news and earnings that are already running (up or down) to play the pullback.
These conditions can easily be scanned for on thinkorswim
From first glance, the system looks like CMsling shotsystem. Although, I plagiarized some parts of the codes, because I am inept when it comes to that shit, it differs as it is not a moving average crossover system.
It is a price crossing over concept. A moving average VWAP is used for best entries on pullbacks.
Purpose:
--To catch the majority of a trend/wave/run.
--To identify pullback areas to go long or short while in midst of trend. To catch pullbacks off news and earning runners.
--To catch the initial start of trend with clear rules to enter
--Clear rules to exit
Issues
--possibilities of getting ninja sliced the fuck up. Can be mitigated by entering stocks with decent average volume. And also only going long above 200 ema and short below it. ADX won't work, at the initial start of the trend it will show not trending. Can look at blow off volume at the bottom followed by increase in buying for long and vice versa for short.
--Can give some huge gains away through gap ups or gap downs from news or earnings during trend. However, can get huge gain on gaps from news or earning. Nature of the game.
--Need some brass balls and a supply of pepto to stomach through some of the pullbacks. Gut wrenching seeing big gains dwindle. But they all even out at the end, you hope. (see NBEV and IGC, and CRON and others. shit don't go in straight lines, homie)
Pros
--It's simple and easy. Overall, you profit
--works with any security
Cons
--It can be stressful.
--does not work well on lower time frames. Do not recommend going below 15 minutes
--Possibility of working on 5 minutes with a time frame breakout strategy (15,30 min).
Couple it with LazyBear "Weis Wave Volume" indicator. Works well for pullback entries.
Enjoy. Ride some waves.
Wyszukaj w skryptach "wave"
Godmode RSIbased on the popular Godmode Indicator with modifications by LEGION, LAZYBEAR, Ni6HTH4wK, xSilas, oh92, sco77m4r7in
All Credit belongs to them. THX Guys!
This is a Combination of a RSI and Godmode.
RSI has a Simple or Exponential Moving Average, Histogram Color Changes when the RSI reaches the Overbought/Oversold Zones.
Godmode is basicly the same as the Original one only scaled down a bit with slightly adjusted Caution Signal Zones which i like more. I also added the Option to adjust the Length of the 2nd Wavetrend SMA. Removed the Wavetrend Area because it doesnt have any use for me.
Hope you like it.
Periodic ChannelThis indicator try to create a channel by summing a re-scaled and readapted sinusoidal wave form to the price mean.
The length parameter control the speed of the sinusoidal wave form, this parameter is not converted to a sine wave period for allowing a better estimation, higher length's work better but feel free to try shorter periods.
The invert parameter invert the sinusoidal wave.
Each bands represent possible return points, the higher the band the higher the probability.
Inverted sin wave exemple
The performance of the indicator is subjective to the main estimation (blue line), select the parameter that best fit the blue line to the price.
Best ragards
rem sim v0.1every alt-coin has similarity.
cause of bitcoin.
always i want to delete that similarity and read the true(?) value of each coin.
and i made some script for that, but not good enough.
this one is different.
Rem Sim (rs) removes the similarity very effectively.
it make avg WaveTrend from nxt, strat, steem, ...
and that is the similarity
and it show true(?) WaveTrend without similarity.
so if the alt-coin move like other alt-coin, the WT almost 0.
sorry my bad english.
if you dont understand my english. just look at that chart.
also you can see source code.
--------
대부분의 알트가 어느정도 비슷한 차트를 가지는데, 그 유사성을 제거하면 어떤 모양인지 궁금해서 만들었어요.
전에 만들었던 비트코인의 영향력을 제거해주는 아이디어는 실제론 별 효용이 없는데 이건 좀 쓸만해보이네요.
웨이브트렌드의 모양으로 보여줍니다.
FLD's - Future Lines of Demarcation Backtest An FLD is a line that is plotted on the same scale as the price and is in fact the
price itself displaced to the right (into the future) by (approximately) half the
wavelength of the cycle for which the FLD is plotted. There are three FLD's that can be
plotted for each cycle:
An FLD based on the median price.
An FLD based on the high price.
An FLD based on the low price.
FLD - Future Lines of Demarcation Strategy An FLD is a line that is plotted on the same scale as the price and is in fact the
price itself displaced to the right (into the future) by (approximately) half the
wavelength of the cycle for which the FLD is plotted. There are three FLD's that can be
plotted for each cycle:
An FLD based on the median price.
An FLD based on the high price.
An FLD based on the low price.
FLD's - Future Lines of Demarcation An FLD is a line that is plotted on the same scale as the price and is in fact the
price itself displaced to the right (into the future) by (approximately) half the
wavelength of the cycle for which the FLD is plotted. There are three FLD's that can be
plotted for each cycle:
An FLD based on the median price.
An FLD based on the high price.
An FLD based on the low price.
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
Fractal Market Geometry [JOAT]
Fractal Market Geometry
Overview
Fractal Market Geometry is an open-source overlay indicator that combines fractal analysis with harmonic pattern detection, Fibonacci retracements and extensions, Elliott Wave concepts, and Wyckoff phase identification. It provides traders with a geometric framework for understanding market structure and identifying potential reversal patterns with multi-factor signal confirmation.
What This Indicator Does
The indicator calculates and displays:
Fractal Detection - Identifies fractal highs and lows using Williams-style pivot analysis with configurable period
Fractal Dimension - Calculates market complexity using range-based dimension estimation
Harmonic Patterns - Detects Gartley, Butterfly, Bat, Crab, Shark, Cypher, and ABCD patterns using Fibonacci ratios
Fibonacci Retracements - Key levels at 38.2%, 50%, and 61.8%
Fibonacci Extensions - Projection level at 161.8%
Elliott Wave Count - Simplified wave counting based on pivot detection (1-5)
Wyckoff Phase - Volume-based phase identification (Accumulation, Markup, Distribution, Neutral)
Golden Spiral Levels - ATR-based support and resistance levels using phi (1.618) ratio
Trend Detection - EMA crossover trend identification (20/50 EMA)
How It Works
Fractal detection uses a configurable period to identify swing points:
detectFractalHigh(simple int period) =>
bool result = true
float centerVal = high
for i = 0 to period - 1
if high >= centerVal or high >= centerVal
result := false
break
Harmonic pattern detection uses Fibonacci ratio analysis between swing points. Each pattern has specific ratio requirements:
Gartley: AB 0.382-0.618, BC 0.382-0.886, CD 1.27-1.618
Butterfly: AB 0.382-0.5, BC 0.382-0.886, CD 1.618-2.24
Bat: AB 0.5-0.618, BC 1.13-1.618, CD 1.618-2.24
Crab: AB 0.382-0.618, BC 0.382-0.886, CD 2.24-3.618
Shark: AB 0.382-0.618, BC 1.13-1.618, CD 1.618-2.24
Cypher: AB 0.382-0.618, BC 1.13-1.414, CD 0.786-0.886
Wyckoff phase detection analyzes volume relative to price movement:
wyckoffPhase(simple int period) =>
float avgVol = ta.sma(volume, period)
float priceChg = ta.change(close, period)
string phase = "NEUTRAL"
if volume > avgVol * 1.5 and math.abs(priceChg) < close * 0.02
phase := "ACCUMULATION"
else if volume > avgVol * 1.5 and math.abs(priceChg) > close * 0.05
phase := "MARKUP"
else if volume < avgVol * 0.7
phase := "DISTRIBUTION"
phase
Signal Generation
Signals use multi-factor confirmation for accuracy:
BUY Signal: Fractal low + Uptrend (EMA20 > EMA50) + RSI 30-55 + Bullish candle + Volume confirmation
SELL Signal: Fractal high + Downtrend (EMA20 < EMA50) + RSI 45-70 + Bearish candle + Volume confirmation
Pattern Detection: Label appears when harmonic pattern completes at current bar
Dashboard Panel (Top-Right)
Dimension - Fractal dimension value (market complexity measure)
Last High - Most recent fractal high price
Last Low - Most recent fractal low price
Pattern - Current harmonic pattern name or NONE
Elliott Wave - Current wave count (Wave 1-5) or OFF
Wyckoff - Current market phase or OFF
Trend - BULLISH, BEARISH, or NEUTRAL based on EMA crossover
Signal - BUY, SELL, or WAIT status
Visual Elements
Fractal Markers - Small triangles at fractal highs (down arrow) and lows (up arrow)
Geometry Lines - Dashed lines connecting the most recent fractal high and low
Fibonacci Levels - Clean horizontal lines at 38.2%, 50%, and 61.8% retracement levels
Fibonacci Extension - Horizontal line at 161.8% extension level
Golden Spiral Levels - Support and resistance lines based on ATR x 1.618
3D Fractal Field - Optional depth layers around swing levels (OFF by default)
Harmonic Pattern Markers - Small diamond shapes when Crab, Shark, or Cypher patterns detected
Pattern Labels - Text label showing pattern name when detected
Signal Labels - BUY/SELL labels on confirmed multi-factor signals
Input Parameters
Fractal Period (default: 5) - Bars on each side for fractal detection
Geometry Depth (default: 3) - Complexity of geometric calculations
Pattern Sensitivity (default: 0.8) - Tolerance for pattern ratio matching
Show Fibonacci Levels (default: true) - Display retracement levels
Show Fibonacci Extensions (default: true) - Display extension level
Elliott Wave Detection (default: true) - Enable wave counting
Wyckoff Analysis (default: true) - Enable phase detection
Golden Spiral Levels (default: true) - Display spiral support/resistance
Show Fractal Points (default: true) - Display fractal markers
Show Geometry Lines (default: true) - Display connecting lines
Show Pattern Labels (default: true) - Display pattern name labels
Show 3D Fractal Field (default: false) - Display depth layers
Show Harmonic Patterns (default: true) - Display pattern markers
Show Buy/Sell Signals (default: true) - Display signal labels
Suggested Use Cases
Identify potential reversal zones using harmonic pattern completion
Use Fibonacci levels for entry, stop-loss, and target planning
Monitor Wyckoff phases for accumulation/distribution awareness
Track Elliott Wave counts for trend structure analysis
Use fractal dimension to gauge market complexity
Wait for multi-factor signal confirmation before entering trades
Timeframe Recommendations
Best on 1H to Daily charts. Lower timeframes produce more fractals but with less significance. Higher timeframes provide stronger levels and more reliable signals.
Limitations
Harmonic pattern detection uses simplified ratio ranges and may not match all textbook definitions
Elliott Wave counting is basic and does not include all wave rules
Wyckoff phase detection is volume-based approximation
Fractal dimension calculation is simplified
Signals require fractal confirmation which has inherent lag equal to the fractal period
Open-Source and Disclaimer
This script is published as open-source under the Mozilla Public License 2.0 for educational purposes. It does not constitute financial advice. Past performance does not guarantee future results. Always use proper risk management.
- Made with passion by officialjackofalltrades
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.
Volatility Aurora [The_lurker]█░░░░░░░░░░░░░░░░░░░ VOLATILITY AURORA ░░░░░░░░░░░░░░░░░░░░█
█░░░░░░░░░░░░░░░ Where Market Energy Meets Visual Poetry ░░░░░░░░░░░░░░░░█
📖 INTRODUCTION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The Aurora Borealis occurs when charged particles from the sun collide with gases in Earth's atmosphere, creating mesmerizing waves of colorful light.
𝗩𝗼𝗹𝗮𝘁𝗶𝗹𝗶𝘁𝘆 𝗔𝘂𝗿𝗼𝗿𝗮 applies this elegant concept to financial markets:
⚡ Price Momentum = Charged Particles
🌌 ATR Layers = Atmospheric Layers
🎨 Color Intensity = Energy Magnitude
📐 Layer Expansion = Volatility State
When momentum "collides" with volatility layers, the Aurora illuminates potential market regime changes — often before they fully manifest in price action.
🔬 THE SCIENCE BEHIND IT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Unlike traditional volatility indicators that provide a single value, Volatility Aurora creates a 𝗺𝘂𝗹𝘁𝗶-𝗱𝗶𝗺𝗲𝗻𝘀𝗶𝗼𝗻𝗮𝗹 𝘃𝗼𝗹𝗮𝘁𝗶𝗹𝗶𝘁𝘆 𝗳𝗶𝗲𝗹𝗱 using five distinct ATR layers based on Fibonacci periods:
│ Layer │ Period │ Atmospheric │ Function │
├──────────────────────┼─────────────────┼─────────────────┤
│ Layer 1 │ 5 │ Ionosphere │ Captures immediate vol shifts
│ Layer 2 │ 13 │ Mesosphere │ Medium-term vol response
│ Layer 3 │ 34 │ Stratosphere │ Intermediate vol structure
│ Layer 4 │ 55 │ Troposphere │ Foundational vol baseline
│ Layer 5 │ 89 │ Surface │ Structural, long-term vol
⚡ CORE CONCEPTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
𝟭. 𝗟𝗮𝘆𝗲𝗿 𝗘𝘅𝗽𝗮𝗻𝘀𝗶𝗼𝗻 & 𝗖𝗼𝗻𝘁𝗿𝗮𝗰𝘁𝗶𝗼𝗻
Each layer dynamically expands or contracts based on its normalized ATR value:
• 𝗘𝘅𝗽𝗮𝗻𝗱𝗶𝗻𝗴 𝗟𝗮𝘆𝗲𝗿𝘀 → Increasing volatility regime
• 𝗖𝗼𝗻𝘁𝗿𝗮𝗰𝘁𝗶𝗻𝗴 𝗟𝗮𝘆𝗲𝗿𝘀 → Decreasing volatility / Consolidation
• 𝗕𝗿𝗲𝗮𝘁𝗵𝗶𝗻𝗴 𝗘𝗳𝗳𝗲𝗰𝘁 → Natural market rhythm visualization
𝟮. 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 𝗦𝗰𝗼𝗿𝗲
Measures alignment between all five layers:
• 𝗛𝗶𝗴𝗵 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 (>70%) → All timeframes agree → Strong, reliable trends
• 𝗟𝗼𝘄 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 (<30%) → Timeframe divergence → Choppy conditions
𝟯. 𝗘𝗻𝗲𝗿𝗴𝘆 𝗜𝗻𝘁𝗲𝗻𝘀𝗶𝘁𝘆
Quantifies how strongly momentum is "hitting" the volatility layers:
• 𝗛𝗶𝗴𝗵 𝗜𝗻𝘁𝗲𝗻𝘀𝗶𝘁𝘆 → Strong directional conviction
• 𝗟𝗼𝘄 𝗜𝗻𝘁𝗲𝗻𝘀𝗶𝘁𝘆 → Weak momentum, potential reversal
𝟰. 𝗥𝗲𝗴𝗶𝗺𝗲 𝗖𝗹𝗮𝘀𝘀𝗶𝗳𝗶𝗰𝗮𝘁𝗶𝗼𝗻
Based on aggregate layer states:
🟢 𝗖𝗔𝗟𝗠 → Low volatility across all layers
🟡 𝗡𝗢𝗥𝗠𝗔𝗟 → Balanced market conditions
🟠 𝗩𝗢𝗟𝗔𝗧𝗜𝗟𝗘 → Elevated activity
🔴 𝗘𝗫𝗧𝗥𝗘𝗠𝗘 → Maximum volatility state
🎨 VISUAL COMPONENTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌈 𝗔𝘂𝗿𝗼𝗿𝗮 𝗟𝗮𝘆𝗲𝗿𝘀 (𝗚𝗿𝗮𝗱𝗶𝗲𝗻𝘁 𝗕𝗮𝗻𝗱𝘀)
• Five pairs of symmetrical bands around the price core
• Color gradient from core (bright) to outer (dim)
• Expansion reflects current volatility state
💠 𝗖𝗼𝗿𝗲 𝗟𝗶𝗻𝗲
• Central EMA-based trend line
• Color changes with momentum direction:
🟢 Cyan/Teal = Bullish
🔴 Pink/Magenta = Bearish
🟣 Purple = Neutral
💫 𝗘𝗻𝗲𝗿𝗴𝘆 𝗣𝘂𝗹𝘀𝗲 𝗟𝗶𝗻𝗲𝘀
• Diagonal flow lines showing momentum trajectory
• Thicker lines = Higher energy
• Direction indicates momentum flow
🎵 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 𝗪𝗮𝘃𝗲𝘀
• Vertical dotted lines appear when harmony exceeds 70%
• Signals timeframe alignment — high-probability zones
📊 HOW TO USE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 𝗧𝗿𝗲𝗻𝗱 𝗙𝗼𝗹𝗹𝗼𝘄𝗶𝗻𝗴
• Enter when Aurora expands in your direction
• Core line color confirms bias
• High harmony = Higher confidence
💥 𝗩𝗼𝗹𝗮𝘁𝗶𝗹𝗶𝘁𝘆 𝗕𝗿𝗲𝗮𝗸𝗼𝘂𝘁𝘀
• Watch for regime shift from CALM to VOLATILE
• Expanding layers signal incoming movement
• Intensity spike confirms breakout strength
↩️ 𝗠𝗲𝗮𝗻 𝗥𝗲𝘃𝗲𝗿𝘀𝗶𝗼𝗻
• EXTREME regime often precedes reversals
• Contracting layers after expansion = Potential pullback
• Low harmony during trends = Weakening momentum
🛡️ 𝗥𝗶𝘀𝗸 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁
• Use outer layers as dynamic support/resistance
• Wider Aurora = Wider stops required
• Contracting Aurora = Tighter risk parameters
⚙️ SETTINGS GUIDE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌌 𝗔𝘂𝗿𝗼𝗿𝗮 𝗖𝗼𝗿𝗲
│ Setting │Default │ Description
│ Layer 1-5 │ Fib │ ATR periods (5,13,34,55,89)
│ Expansion Factor │ 2.5 │ Controls layer width multiplier
│ Smoothing │ 5 │ EMA smoothing for visual clarity
⚡ 𝗘𝗻𝗲𝗿𝗴𝘆 𝗙𝗶𝗲𝗹𝗱
│ Setting │ Default │ Description
│ Momentum Length │ 14 │ Period for momentum calculation
│ Energy Lookback │ 21 │ Normalization window
│ Energy Multiplier │ 1.5 │ Amplifies energy display
🎨 𝗩𝗶𝘀𝘂𝗮𝗹
│ Setting │ Default │ Description
│ Language │ EN │ Interface language (EN/AR)
│ Show Aurora │ ✓ │ Toggle layer visibility
│ Show Core Line │ ✓ │ Toggle center line
│ Show Energy Pulse │ ✓ │ Toggle flow lines
│ Show Harmony Waves │ ✓ │ Toggle alignment indicators
🔔 ALERTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ 𝗥𝗲𝗴𝗶𝗺𝗲 𝗦𝗵𝗶𝗳𝘁 — Volatility regime changed
🎵 𝗛𝗶𝗴𝗵 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 — All layers aligned (>85%)
↕️ 𝗗𝗶𝗿𝗲𝗰𝘁𝗶𝗼𝗻 𝗖𝗵𝗮𝗻𝗴𝗲 — Momentum direction reversed
🔥 𝗜𝗻𝘁𝗲𝗻𝘀𝗶𝘁𝘆 𝗦𝗽𝗶𝗸𝗲 — Energy exceeded 80% threshold
💡 TIPS FOR BEST RESULTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ 𝗛𝗶𝗴𝗵𝗲𝗿 𝗧𝗶𝗺𝗲𝗳𝗿𝗮𝗺𝗲𝘀 — Aurora works best on 1H+ charts
2️⃣ 𝗖𝗼𝗺𝗯𝗶𝗻𝗲 𝘄𝗶𝘁𝗵 𝗣𝗔 — Use Aurora as context, not signals
3️⃣ 𝗪𝗮𝘁𝗰𝗵 𝗛𝗮𝗿𝗺𝗼𝗻𝘆 — High harmony setups win more
4️⃣ 𝗥𝗲𝘀𝗽𝗲𝗰𝘁 𝗥𝗲𝗴𝗶𝗺𝗲 — Don't fight EXTREME volatility
5️⃣ 𝗟𝗮𝘆𝗲𝗿 𝗖𝗼𝗻𝗳𝗹𝘂𝗲𝗻𝗰𝗲 — Multi-layer bounces = Strong S/R
⚠️ DISCLAIMER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This indicator is for educational purposes only. Past performance does not
guarantee future results. Always use proper risk management and conduct your
own analysis before making trading decisions.
█████████████████████████████████████████████████████████████
█░░░░░░░░░░░░░░░░░░░░░ شفق التقلب ░░░░░░░░░░░░░░░░░░░░░░█
█░░░░░░░░░░░░░░░ حيث تلتقي طاقة السوق بالشعور البصري ░░░░░░░░░░░░░░░░█
📖 المقدمة
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
يحدث الشفق القطبي عندما تصطدم الجسيمات المشحونة القادمة من الشمس بالغازات في الغلاف الجوي للأرض، مما يخلق موجات ساحرة من الضوء الملون.
يطبق نفس المفهوم الأنيق على الأسواق المالية
⚡ زخم السعر = الجسيمات المشحونة
🌌 طبقات ATR = طبقات الغلاف الجوي
🎨 شدة اللون = حجم الطاقة
📐 توسع الطبقات = حالة التقلب
عندما "يصطدم" الزخم بطبقات التقلب، يُضيء الشفق التغيرات المحتملة في نظام السوق — غالباً قبل أن تتجلى بالكامل في حركة السعر.
🔬 العلم وراء المؤشر
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
على عكس مؤشرات التقلب التقليدية التي تقدم قيمة واحدة، يُنشئ شفق التقلب 𝗽𝗮𝗾𝗹 𝘁𝗮𝗾𝗮𝗹𝗹𝘂𝗯 𝗺𝘂𝘁𝗮'𝗮𝗱𝗱𝗶𝗱 𝗮𝗹-𝗮𝗯'𝗮𝗱 باستخدام خمس طبقات ATR مميزة مبنية على أرقام فيبوناتشي:
│ الطبقة │ الفترة │ المعادل الجوي │ الوظيفة
│ الطبقة١ │ 5 │ الأيونوسفير │ تلتقط تحولات التقلب الفورية
│ الطبقة٢ │ 13 │ الميزوسفير │ استجابة التقلب متوسطة المدى
│ الطبقة٣ │ 34 │ الستراتوسفير │ هيكل التقلب المتوسط
│ الطبقة٤ │ 55 │ التروبوسفير │ خط الأساس للتقلب
│ الطبقة٥ │ 89 │ السطح │ التقلب الهيكلي طويل المدى
⚡ المفاهيم الأساسية
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
𝟭. توسع وانكماش الطبقات
تتوسع أو تنكمش كل طبقة ديناميكياً بناءً على قيمة ATR المعيارية:
• طبقات متوسعة ← نظام تقلب متزايد
• طبقات منكمشة ← تقلب متناقص / تجميع
• تأثير التنفس ← تصور إيقاع السوق الطبيعي
𝟮. درجة التناغم
تقيس التوافق بين جميع الطبقات الخمس:
• تناغم عالي (>٧٠٪) ← جميع الأطر متفقة ← اتجاهات قوية
• تناغم منخفض (<٣٠٪) ← تباين الأطر ← ظروف متقطعة
𝟯. شدة الطاقة
تحدد مدى قوة "اصطدام" الزخم بطبقات التقلب:
• شدة عالية ← قناعة اتجاهية قوية
• شدة منخفضة ← زخم ضعيف، احتمال انعكاس
𝟰. تصنيف النظام
بناءً على حالات الطبقات المجمعة:
🟢 هادئ ← تقلب منخفض عبر جميع الطبقات
🟡 طبيعي ← ظروف سوق متوازنة
🟠 متقلب ← نشاط مرتفع
🔴 متطرف ← حالة التقلب القصوى
🎨 المكونات البصرية
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌈 طبقات الشفق (النطاقات المتدرجة)
• خمسة أزواج من النطاقات المتماثلة حول نواة السعر
• تدرج لوني من النواة (ساطع) إلى الخارج (خافت)
• التوسع يعكس حالة التقلب الحالية
💠 خط النواة
• خط اتجاه مركزي قائم على EMA
• يتغير اللون مع اتجاه الزخم:
🟢 سماوي = صاعد
🔴 وردي = هابط
🟣 بنفسجي = محايد
💫 خطوط نبض الطاقة
• خطوط تدفق مائلة تُظهر مسار الزخم
• خطوط أسمك = طاقة أعلى
• الاتجاه يشير إلى تدفق الزخم
🎵 موجات التناغم
• خطوط عمودية منقطة تظهر عندما يتجاوز التناغم ٧٠٪
• تشير إلى توافق الأطر الزمنية — مناطق احتمالية عالية
📊 كيفية الاستخدام
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 تتبع الاتجاه
• ادخل عندما يتوسع الشفق في اتجاهك
• لون خط النواة يؤكد التحيز
• تناغم عالي = ثقة أعلى
💥 اختراقات التقلب
• راقب تحول النظام من هادئ إلى متقلب
• الطبقات المتوسعة تشير إلى حركة قادمة
• ارتفاع الشدة يؤكد قوة الاختراق
↩️ الارتداد للمتوسط
• النظام المتطرف غالباً يسبق الانعكاسات
• طبقات منكمشة بعد التوسع = احتمال تراجع
• تناغم منخفض أثناء الاتجاهات = زخم ضعيف
🛡️ إدارة المخاطر
• استخدم الطبقات الخارجية كدعم/مقاومة ديناميكية
• شفق أوسع = وقف خسارة أوسع مطلوب
• شفق منكمش = معايير مخاطر أضيق
⚙️ دليل الإعدادات
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌌 نواة الشفق
│ الإعداد │الافتراضي│ الوصف
│ الطبقات ١-٥ │ Fib │ فترات ATR (5,13,34,55,89)
│ معامل التوسع │ 2.5 │ يتحكم في مضاعف عرض الطبقات
│ التنعيم │ 5 │ تنعيم EMA للوضوح البصري
⚡ مجال الطاقة
│ الإعداد │الافتراضي│ الوصف
│ فترة الزخم │ 14 │ فترة حساب الزخم
│ فترة الطاقة │ 21 │ نافذة التطبيع
│ مضاعف الطاقة │ 1.5 │ يضخم عرض الطاقة
🎨 العرض البصري
│ الإعداد │الافتراضي│ الوصف
│ اللغة │ EN │ لغة الواجهة (EN/AR)
│ إظهار الشفق │ ✓ │ تبديل ظهور الطبقات
│ خط النواة │ ✓ │ تبديل الخط المركزي
│ نبض الطاقة │ ✓ │ تبديل خطوط التدفق
│ موجات التناغم │ ✓ │ تبديل مؤشرات التوافق
🔔 التنبيهات
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ تحول النظام — تغير نظام التقلب
🎵 تناغم عالي — جميع الطبقات متوافقة (>٨٥٪)
↕️ تغير الاتجاه — انعكس اتجاه الزخم
🔥 ارتفاع الشدة — تجاوزت الطاقة عتبة ٨٠٪
💡 نصائح للحصول على أفضل النتائج
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ الأطر الزمنية الأعلى — الشفق يعمل بشكل أفضل على ساعة فأكثر
2️⃣ ادمج مع حركة السعر — استخدم الشفق كسياق وليس إشارات
3️⃣ راقب التناغم — إعدادات التناغم العالي تربح أكثر
4️⃣ احترم النظام — لا تحارب التقلب المتطرف
5️⃣ تقاطع الطبقات — ارتداد من طبقات متعددة = دعم/مقاومة قوية
⚠️ إخلاء المسؤولية
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
هذا المؤشر للأغراض التعليمية فقط. الأداء السابق لا يضمن النتائج المستقبلية.
استخدم دائماً إدارة مخاطر مناسبة وقم بتحليلك الخاص قبل اتخاذ قرارات التداول.
█████████████████████████████████████████████████████████████
BOS and CHoCHThe market never moves in a straight line. It moves in waves.
It makes a High, comes down a bit (Low), then breaks the previous High to make a new High.
Similarly, It makes a Low, goes up a bit (High), then breaks the previous Low to make a new Low.
BOS (Break Of Structure) - Trend Continuation
BOS means the market is continuing its current trend. If the market is in an Uptrend and breaks the old "High" -> Bullish BOS. If the market is in a Downtrend and breaks the old "Low" -> Bearish BOS.
3. CHOCH (Change Of Character) - Trend Reversal
CHOCH means the mood of the market has changed. For the first time, the trend has shifted its nature.
Bullish to Bearish CHOCH: The market was making Higher Highs, but suddenly it broke its previous "Low". Now the market can fall.
Bearish to Bullish CHOCH: The market was falling (Lower Lows), but suddenly it broke its previous "High". Now the market can rise.
BOS: Confirms the trend (Breaking the ceiling to go higher).
CHOCH: Signals a trend change (Slipping and falling below the previous floor).
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.
Fib and Slope Trend Detector [EWT] + MTF Dashboard🚀 Overview
The Momentum Structure Trend Detector is a sophisticated trend-following tool that combines Price Velocity (Slope) with Market Structure (Fibonacci) to identify high-probability trend reversals and continuations.
Unlike traditional indicators that rely heavily on lagging moving averages, this script analyzes the speed of price action in real-time. It operates on the core principle of market structure: Impulse moves are fast and steep, while corrections are slow and shallow.
🧠 The Logic: Physics Meets Market Structure
This indicator determines the trend direction by calculating the Slope (Velocity) of price swings.
ZigZag Calculation: It first identifies market swings (Highs and Lows) using a standard pivot detection algorithm.
Slope Calculation: It calculates the velocity of every completed leg using the formula: $Slope = \frac{|Price Change|}{|Time Duration|}$.
Trend Definition:
Uptrend : If the previous Up-move was fast (Impulse) and the subsequent Down-move is slower (Correction), the market is primed for an uptrend.
Downtrend : If the previous Down-move was fast (Impulse) and the subsequent Up-move is slower (Correction), the market is primed for a downtrend.
🔥 Key Features
1. Aggressive Real-Time Detection (No Lag)
Most structure indicators wait for a "Higher High" to confirm a trend, which often leads to late entries. This script uses an Aggressive Live Slope calculation:
It compares the current developing slope of the live price action against the slope of the previous completed leg.
Result: As soon as the current move becomes "steeper" (faster) than the previous correction, the trend flips immediately. This allows you to catch the "meat" of the move before a new pivot is even confirmed.
2. Fibonacci Validity Filter
Momentum alone isn't enough; we need structural integrity.
The script calculates the 78.6% Retracement level of the impulse leg.
If a correction moves deeper than this Fibonacci limit (on a closing basis), the trend structure is considered "broken" or "invalid," and the indicator switches to a Neutral state. This filters out choppy/ranging markets.
3. Multi-Timeframe (MTF) Dashboard
A customizable dashboard on the chart allows for fractal analysis. You can view the trend state (UP/DOWN/NEUTRAL) across 9 different timeframes (1m to 1M) simultaneously.
Green Row : Uptrend
Red Row : Downtrend
Gray : Neutral/Indeterminate
4. Smart Visuals
Background Colo r: Changes dynamically (Teal for Bullish, Red for Bearish, Gray for Neutral) to give you an instant read of the market state.
Slope Labels : Displays the calculated numeric slope on the chart, helping you visualize the momentum difference between impulse and corrective waves.
Invalidation Levels : Automatically plots the invalidation line (Stop Loss level) based on the market structure.
🛠️ Settings & Inputs
Strategy Settings
Pivot Deviation Length : Sensitivity of the ZigZag calculation (Default: 5). Lower numbers = more sensitive to small swings.
Max Retracement % : The Fibonacci limit for a valid correction (Default: 78.6%).
Min Bars for Live Calc : To prevent noise, the script waits for this many bars after a pivot before calculating the "Live Slope" (Default: 3).
Dashboard Settings
Show Dashboard : Toggle the table on/off.
Timeframe Toggles : Enable/Disable specific timeframes (1m, 5m, 15m, 30m, 1H, 4H, 1D, 1W, 1M) to suit your trading style.
🎯 How to Use
Wait for Background Change : When the background turns Teal, it indicates that a corrective pullback has ended and a new impulse with high velocity has begun.
Check Invalidation : Look at the plotted Stop Loss Level. If price closes below this line, the trade idea is invalid.
Confirm with Dashboard : Use the table to ensure the higher timeframes (e.g., 1H, 4H) align with your current chart's direction for higher probability setups.
Disclaimer : This tool is designed for trend analysis and educational purposes. Past performance (momentum) is not indicative of future results. Always manage your risk.
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
Ehlers Even Better Sinewave (EBSW)# EBSW: Ehlers Even Better Sinewave
## Overview and Purpose
The Ehlers Even Better Sinewave (EBSW) indicator, developed by John Ehlers, is an advanced cycle analysis tool. This implementation is based on a common interpretation that uses a cascade of filters: first, a High-Pass Filter (HPF) to detrend price data, followed by a Super Smoother Filter (SSF) to isolate the dominant cycle. The resulting filtered wave is then normalized using an Automatic Gain Control (AGC) mechanism, producing a bounded oscillator that fluctuates between approximately +1 and -1. It aims to provide a clear and responsive measure of market cycles.
## Core Concepts
* **Detrending (High-Pass Filter):** A 1-pole High-Pass Filter removes the longer-term trend component from the price data, allowing the indicator to focus on cyclical movements.
* **Cycle Smoothing (Super Smoother Filter):** Ehlers' Super Smoother Filter is applied to the detrended data to further refine the cycle component, offering effective smoothing with relatively low lag.
* **Wave Generation:** The output of the SSF is averaged over a short period (typically 3 bars) to create the primary "wave".
* **Automatic Gain Control (AGC):** The wave's amplitude is normalized by dividing it by the square root of its recent power (average of squared values). This keeps the oscillator bounded and responsive to changes in volatility.
* **Normalized Oscillator:** The final output is a single sinewave-like oscillator.
## Common Settings and Parameters
| Parameter | Default | Function | When to Adjust |
| ----------- | ------- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Source | close | Price data used for calculation. | Typically `close`, but `hlc3` or `ohlc4` can be used for a more comprehensive price representation. |
| HP Length | 40 | Lookback period for the 1-pole High-Pass Filter used for detrending. | Shorter periods make the filter more responsive to shorter cycles; longer periods focus on longer-term cycles. Adjust based on observed cycle characteristics. |
| SSF Length | 10 | Lookback period for the Super Smoother Filter used for smoothing the detrended cycle component. | Shorter periods result in a more responsive (but potentially noisier) wave; longer periods provide more smoothing. |
**Pro Tip:** The `HP Length` and `SSF Length` parameters should be tuned based on the typical cycle lengths observed in the market and the desired responsiveness of the indicator.
## Calculation and Mathematical Foundation
**Simplified explanation:**
1. Remove the trend from the price data using a 1-pole High-Pass Filter.
2. Smooth the detrended data using a Super Smoother Filter to get a clean cycle component.
3. Average the output of the Super Smoother Filter over the last 3 bars to create a "Wave".
4. Calculate the average "Power" of the Super Smoother Filter output over the last 3 bars.
5. Normalize the "Wave" by dividing it by the square root of the "Power" to get the final EBSW value.
**Technical formula (conceptual):**
1. **High-Pass Filter (HPF - 1-pole):**
`angle_hp = 2 * PI / hpLength`
`alpha1_hp = (1 - sin(angle_hp)) / cos(angle_hp)`
`HP = (0.5 * (1 + alpha1_hp) * (src - src )) + alpha1_hp * HP `
2. **Super Smoother Filter (SSF):**
`angle_ssf = sqrt(2) * PI / ssfLength`
`alpha2_ssf = exp(-angle_ssf)`
`beta_ssf = 2 * alpha2_ssf * cos(angle_ssf)`
`c2 = beta_ssf`
`c3 = -alpha2_ssf^2`
`c1 = 1 - c2 - c3`
`Filt = c1 * (HP + HP )/2 + c2*Filt + c3*Filt `
3. **Wave Generation:**
`WaveVal = (Filt + Filt + Filt ) / 3`
4. **Power & Automatic Gain Control (AGC):**
`Pwr = (Filt^2 + Filt ^2 + Filt ^2) / 3`
`EBSW_SineWave = WaveVal / sqrt(Pwr)` (with check for Pwr == 0)
> 🔍 **Technical Note:** The combination of HPF and SSF creates a form of band-pass filter. The AGC mechanism ensures the output remains scaled, typically between -1 and +1, making it behave like a normalized oscillator.
## Interpretation Details
* **Cycle Identification:** The EBSW wave shows the current phase and strength of the dominant market cycle as filtered by the indicator. Peaks suggest cycle tops, and troughs suggest cycle bottoms.
* **Trend Reversals/Momentum Shifts:** When the EBSW wave crosses the zero line, it can indicate a potential shift in the short-term cyclical momentum.
* Crossing up through zero: Potential start of a bullish cyclical phase.
* Crossing down through zero: Potential start of a bearish cyclical phase.
* **Overbought/Oversold Levels:** While normalized, traders often establish subjective or statistically derived overbought/oversold levels (e.g., +0.85 and -0.85, or other values like +0.7, +0.9).
* Reaching above the overbought level and turning down may signal a potential cyclical peak.
* Falling below the oversold level and turning up may signal a potential cyclical trough.
## Limitations and Considerations
* **Parameter Sensitivity:** The indicator's performance depends on tuning `hpLength` and `ssfLength` to prevailing market conditions.
* **Non-Stationary Markets:** In strongly trending markets with weak cyclical components, or in very choppy non-cyclical conditions, the EBSW may produce less reliable signals.
* **Lag:** All filtering introduces some lag. The Super Smoother Filter is designed to minimize this for its degree of smoothing, but lag is still present.
* **Whipsaws:** Rapid oscillations around the zero line can occur in volatile or directionless markets.
* **Requires Confirmation:** Signals from EBSW are often best confirmed with other forms of technical analysis (e.g., price action, volume, other non-correlated indicators).
## References
* Ehlers, J. F. (2002). *Rocket Science for Traders: Digital Signal Processing Applications*. John Wiley & Sons.
* Ehlers, J. F. (2013). *Cycle Analytics for Traders: Advanced Technical Trading Concepts*. John Wiley & Sons.
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






















