Candlestick analysis
RSI Crossover dipali parikhThis script generates buy and sell signals based on the crossover of the Relative Strength Index (RSI) and the RSI-based Exponential Moving Average (EMA). It also includes an additional condition for both buy and sell signals that the RSI-based EMA must be either above or below 50.
Key Features:
Buy Signal: Triggered when:
The RSI crosses above the RSI-based EMA.
The RSI-based EMA is above 50.
A green "BUY" label will appear below the bar when the buy condition is met.
Sell Signal: Triggered when:
The RSI crosses below the RSI-based EMA.
The RSI-based EMA is below 50.
A red "SELL" label will appear above the bar when the sell condition is met.
Customizable Inputs:
RSI Length: Adjust the period for calculating the RSI (default is 14).
RSI-based EMA Length: Adjust the period for calculating the RSI-based EMA (default is 9).
RSI Threshold: Adjust the threshold (default is 50) for when the RSI-based EMA must be above or below.
Visuals:
The RSI is plotted as a blue line.
The RSI-based EMA is plotted as an orange line.
Buy and sell signals are indicated by green "BUY" and red "SELL" labels.
Alerts:
Alerts can be set for both buy and sell conditions to notify you when either condition is met.
How to Use:
Use this script to identify potential buy and sell opportunities based on the behavior of the RSI relative to its EMA.
The buy condition indicates when the RSI is strengthening above its EMA, and the sell condition signals when the RSI is weakening below its EMA.
Strategy Use:
Ideal for traders looking to leverage RSI momentum for entering and exiting positions.
The RSI-based EMA filter helps smooth out price fluctuations, focusing on stronger signals.
This script is designed for both discretionary and algorithmic traders, offering a simple yet effective method for spotting trend reversals and continuation opportunities using RSI.
Price Action Indicator (HarryDPotter)The "Enhanced Price Action Indicator" combines key technical analysis tools to identify high-probability trade entries in the crypto market. It integrates "price action" patterns (like bullish and bearish engulfing or pin bars) with trend confirmation from "EMA crossovers" and "ADX" for market strength. The indicator plots clear "long" and "short" signals based on these factors, with visual support and resistance levels, dynamic trendlines, and EMAs, helping traders make informed decisions during trending markets.
NVDA - Gaussian Channel Strategy v3.4📌 Strategy Description: Gaussian Channel Trading Strategy for NVDA
Overview
The Gaussian Channel Strategy is a trend-following and momentum-based strategy that combines Gaussian filtering with Stochastic RSI crossovers to detect high-probability entry and exit points. This version is specifically optimized for NVDA stock, ensuring proper execution of orders with backtesting support.
🔹 Key Components
Gaussian Filter (Ehlers' Technique)
A low-lag smoothing filter that removes noise and highlights the primary market trend.
It constructs upper and lower bands to define potential support and resistance levels.
The midline (Gaussian Filter) helps determine bullish vs. bearish conditions.
Stochastic RSI for Entry Signals
Momentum indicator that helps identify overbought and oversold conditions.
Uses %K and %D crossovers to generate buy (bullish) and sell (bearish) signals.
Risk Management with Stop Loss & Take Profit
Stop Loss: Set at 2% below the entry price to limit downside risk.
Take Profit: Set at 5% above the entry price to lock in gains.
Ensures controlled risk-to-reward ratio.
📊 Trading Logic
Buy Entry Condition (Go Long)
Stochastic RSI crossover: %K crosses above %D (bullish momentum).
Gaussian Filter confirms an uptrend (filt > filt ).
Price is trading above the Gaussian Filter (close > filt).
Backtesting range is valid (between 2020 - 2069).
✅ If conditions are met:
→ Enter Long Position (strategy.entry("Long", strategy.long))
Sell Entry Condition (Go Short)
Stochastic RSI crossover: %K crosses below %D (bearish momentum).
Gaussian Filter confirms a downtrend (filt < filt ).
Price is trading below the Gaussian Filter (close < filt).
✅ If conditions are met:
→ Enter Short Position (strategy.entry("Short", strategy.short))
Exit Conditions
Stop Loss triggers when price moves 2% against position.
Take Profit triggers when price moves 5% in favor of the position.
Uses strategy.exit() to automatically manage risk.
🔹 Visual Indicators
✔ Gaussian Filter Midline (Blue): Determines trend direction.
✔ Upper Band (Green): Resistance level for potential reversals.
✔ Lower Band (Red): Support level for possible bounces.
✔ Bar Color Coding:
Green Bars: Price trading above Gaussian Filter (bullish trend).
Red Bars: Price trading below Gaussian Filter (bearish trend).
✔ Buy & Sell Markers (plotshape())
Green ⬆ (Buy Signals)
Red ⬇ (Sell Signals)
📈 Strategy Use Case
Best for trend-following traders who want smooth, noise-free signals.
Ideal for swing traders targeting 2-5% price moves on NVDA.
Reduces false breakouts by requiring both Gaussian trend confirmation and Stochastic RSI crossovers.
Works well on high-liquidity stocks like NVDA, especially in volatile conditions.
🚀 Summary
✅ Combines trend detection (Gaussian Filter) with momentum confirmation (Stochastic RSI).
✅ Automated buy/sell execution with visual confirmations.
✅ Risk-controlled strategy with Stop Loss (2%) and Take Profit (5%).
✅ Optimized for NVDA stock, with proper execution & capital allocation.
Spike Strategy 1h Optimized ETHCandle spike take profit. Take profit avery time you have a bearish or bullish candle on the 1 hour chart. It is optimized for Ethereum.
Green & Red Candle SignalThis is a simple entry technique for entry and exit signals. Whenever the candle goes GREEN from WHITE, you can enter the trade on long sideanywhere in between the GREEN candle, keeping STOP below prior lowest WHITE. Trail you profits. Similarly when the candle goes RED from WHITE, you can enter the trade on short side anywhere in between the RED candle, keeping STOP above prior highest WHITE
Price Difference CheckThis code calculates the difference between the highest and lowest values of the current candle, and if this difference is equal to or greater than the percentage value set in the settings, it displays a marker on the chart. Additionally, it shows the difference as a line on the chart.
Smart Money Concepts [Nitin]//@version=5
indicator("Smart Money Concepts ", "Smart Money Concepts "
, overlay = true
, max_labels_count = 500
, max_lines_count = 500
, max_boxes_count = 500
, max_bars_back = 500)
//-----------------------------------------------------------------------------{
//Constants
//-----------------------------------------------------------------------------{
color TRANSP_CSS = #ffffff00
//Tooltips
string MODE_TOOLTIP = 'Allows to display historical Structure or only the recent ones'
string STYLE_TOOLTIP = 'Indicator color theme'
string COLOR_CANDLES_TOOLTIP = 'Display additional candles with a color reflecting the current trend detected by structure'
string SHOW_INTERNAL = 'Display internal market structure'
string CONFLUENCE_FILTER = 'Filter non significant internal structure breakouts'
string SHOW_SWING = 'Display swing market Structure'
string SHOW_SWING_POINTS = 'Display swing point as labels on the chart'
string SHOW_SWHL_POINTS = 'Highlight most recent strong and weak high/low points on the chart'
string INTERNAL_OB = 'Display internal order blocks on the chart Number of internal order blocks to display on the chart'
string SWING_OB = 'Display swing order blocks on the chart Number of internal swing blocks to display on the chart'
string FILTER_OB = 'Method used to filter out volatile order blocks It is recommended to use the cumulative mean range method when a low amount of data is available'
string SHOW_EQHL = 'Display equal highs and equal lows on the chart'
string EQHL_BARS = 'Number of bars used to confirm equal highs and equal lows'
string EQHL_THRESHOLD = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows Lower values will return fewer but more pertinent results'
string SHOW_FVG = 'Display fair values gaps on the chart'
string AUTO_FVG = 'Filter out non significant fair value gaps'
string FVG_TF = 'Fair value gaps timeframe'
string EXTEND_FVG = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
string PED_ZONES = 'Display premium, discount, and equilibrium zones on chart'
//-----------------------------------------------------------------------------{
//Settings
//-----------------------------------------------------------------------------{
//General
//----------------------------------------{
mode = input.string('Historical'
, options =
, group = 'Smart Money Concepts'
, tooltip = MODE_TOOLTIP)
style = input.string('Colored'
, options =
, group = 'Smart Money Concepts'
, tooltip = STYLE_TOOLTIP)
show_trend = input(false, 'Color Candles'
, group = 'Smart Money Concepts'
, tooltip = COLOR_CANDLES_TOOLTIP)
//----------------------------------------}
//Internal Structure
//----------------------------------------{
show_internals = input(true, 'Show Internal Structure'
, group = 'Real Time Internal Structure'
, tooltip = SHOW_INTERNAL)
show_ibull = input.string('All', 'Bullish Structure'
, options =
, inline = 'ibull'
, group = 'Real Time Internal Structure')
swing_ibull_css = input(#089981, ''
, inline = 'ibull'
, group = 'Real Time Internal Structure')
//Bear Structure
show_ibear = input.string('All', 'Bearish Structure'
, options =
, inline = 'ibear'
, group = 'Real Time Internal Structure')
swing_ibear_css = input(#f23645, ''
, inline = 'ibear'
, group = 'Real Time Internal Structure')
ifilter_confluence = input(false, 'Confluence Filter'
, group = 'Real Time Internal Structure'
, tooltip = CONFLUENCE_FILTER)
//----------------------------------------}
//Swing Structure
//----------------------------------------{
show_Structure = input(true, 'Show Swing Structure'
, group = 'Real Time Swing Structure'
, tooltip = SHOW_SWING)
//Bull Structure
show_bull = input.string('All', 'Bullish Structure'
, options =
, inline = 'bull'
, group = 'Real Time Swing Structure')
swing_bull_css = input(#089981, ''
, inline = 'bull'
, group = 'Real Time Swing Structure')
//Bear Structure
show_bear = input.string('All', 'Bearish Structure'
, options =
, inline = 'bear'
, group = 'Real Time Swing Structure')
swing_bear_css = input(#f23645, ''
, inline = 'bear'
, group = 'Real Time Swing Structure')
//Swings
show_swings = input(false, 'Show Swings Points'
, inline = 'swings'
, group = 'Real Time Swing Structure'
, tooltip = SHOW_SWING_POINTS)
length = input.int(50, ''
, minval = 10
, inline = 'swings'
, group = 'Real Time Swing Structure')
show_hl_swings = input(true, 'Show Strong/Weak High/Low'
, group = 'Real Time Swing Structure'
, tooltip = SHOW_SWHL_POINTS)
//----------------------------------------}
//Order Blocks
//----------------------------------------{
show_iob = input(true, 'Internal Order Blocks'
, inline = 'iob'
, group = 'Order Blocks'
, tooltip = INTERNAL_OB)
iob_showlast = input.int(5, ''
, minval = 1
, inline = 'iob'
, group = 'Order Blocks')
show_ob = input(false, 'Swing Order Blocks'
, inline = 'ob'
, group = 'Order Blocks'
, tooltip = SWING_OB)
ob_showlast = input.int(5, ''
, minval = 1
, inline = 'ob'
, group = 'Order Blocks')
ob_filter = input.string('Atr', 'Order Block Filter'
, options =
, group = 'Order Blocks'
, tooltip = FILTER_OB)
ibull_ob_css = input.color(color.new(#3179f5, 80), 'Internal Bullish OB'
, group = 'Order Blocks')
ibear_ob_css = input.color(color.new(#f77c80, 80), 'Internal Bearish OB'
, group = 'Order Blocks')
bull_ob_css = input.color(color.new(#1848cc, 80), 'Bullish OB'
, group = 'Order Blocks')
bear_ob_css = input.color(color.new(#b22833, 80), 'Bearish OB'
, group = 'Order Blocks')
//----------------------------------------}
//EQH/EQL
//----------------------------------------{
show_eq = input(true, 'Equal High/Low'
, group = 'EQH/EQL'
, tooltip = SHOW_EQHL)
eq_len = input.int(3, 'Bars Confirmation'
, minval = 1
, group = 'EQH/EQL'
, tooltip = EQHL_BARS)
eq_threshold = input.float(0.1, 'Threshold'
, minval = 0
, maxval = 0.5
, step = 0.1
, group = 'EQH/EQL'
, tooltip = EQHL_THRESHOLD)
//----------------------------------------}
//Fair Value Gaps
//----------------------------------------{
show_fvg = input(false, 'Fair Value Gaps'
, group = 'Fair Value Gaps'
, tooltip = SHOW_FVG)
fvg_auto = input(true, "Auto Threshold"
, group = 'Fair Value Gaps'
, tooltip = AUTO_FVG)
fvg_tf = input.timeframe('', "Timeframe"
, group = 'Fair Value Gaps'
, tooltip = FVG_TF)
bull_fvg_css = input.color(color.new(#00ff68, 70), 'Bullish FVG'
, group = 'Fair Value Gaps')
bear_fvg_css = input.color(color.new(#ff0008, 70), 'Bearish FVG'
, group = 'Fair Value Gaps')
fvg_extend = input.int(1, "Extend FVG"
, minval = 0
, group = 'Fair Value Gaps'
, tooltip = EXTEND_FVG)
//----------------------------------------}
//Previous day/week high/low
//----------------------------------------{
//Daily
show_pdhl = input(false, 'Daily'
, inline = 'daily'
, group = 'Highs & Lows MTF')
pdhl_style = input.string('⎯⎯⎯', ''
, options =
, inline = 'daily'
, group = 'Highs & Lows MTF')
pdhl_css = input(#2157f3, ''
, inline = 'daily'
, group = 'Highs & Lows MTF')
//Weekly
show_pwhl = input(false, 'Weekly'
, inline = 'weekly'
, group = 'Highs & Lows MTF')
pwhl_style = input.string('⎯⎯⎯', ''
, options =
, inline = 'weekly'
, group = 'Highs & Lows MTF')
pwhl_css = input(#2157f3, ''
, inline = 'weekly'
, group = 'Highs & Lows MTF')
//Monthly
show_pmhl = input(false, 'Monthly'
, inline = 'monthly'
, group = 'Highs & Lows MTF')
pmhl_style = input.string('⎯⎯⎯', ''
, options =
, inline = 'monthly'
, group = 'Highs & Lows MTF')
pmhl_css = input(#2157f3, ''
, inline = 'monthly'
, group = 'Highs & Lows MTF')
//----------------------------------------}
//Premium/Discount zones
//----------------------------------------{
show_sd = input(false, 'Premium/Discount Zones'
, group = 'Premium & Discount Zones'
, tooltip = PED_ZONES)
premium_css = input.color(#f23645, 'Premium Zone'
, group = 'Premium & Discount Zones')
eq_css = input.color(#b2b5be, 'Equilibrium Zone'
, group = 'Premium & Discount Zones')
discount_css = input.color(#089981, 'Discount Zone'
, group = 'Premium & Discount Zones')
//-----------------------------------------------------------------------------}
//Functions
//-----------------------------------------------------------------------------{
n = bar_index
atr = ta.atr(200)
cmean_range = ta.cum(high - low) / n
//HL Output function
hl() =>
//Get ohlc values function
get_ohlc()=> [close , open , high, low, high , low ]
//Display Structure function
display_Structure(x, y, txt, css, dashed, down, lbl_size)=>
structure_line = line.new(x, y, n, y
, color = css
, style = dashed ? line.style_dashed : line.style_solid)
structure_lbl = label.new(int(math.avg(x, n)), y, txt
, color = TRANSP_CSS
, textcolor = css
, style = down ? label.style_label_down : label.style_label_up
, size = lbl_size)
if mode == 'Present'
line.delete(structure_line )
label.delete(structure_lbl )
//Swings detection/measurements
swings(len)=>
var os = 0
upper = ta.highest(len)
lower = ta.lowest(len)
os := high > upper ? 0 : low < lower ? 1 : os
top = os == 0 and os != 0 ? high : 0
btm = os == 1 and os != 1 ? low : 0
//Order block coordinates function
ob_coord(use_max, loc, target_top, target_btm, target_left, target_type)=>
min = 99999999.
max = 0.
idx = 1
ob_threshold = ob_filter == 'Atr' ? atr : cmean_range
//Search for highest/lowest high within the structure interval and get range
if use_max
for i = 1 to (n - loc)-1
if (high - low ) < ob_threshold * 2
max := math.max(high , max)
min := max == high ? low : min
idx := max == high ? i : idx
else
for i = 1 to (n - loc)-1
if (high - low ) < ob_threshold * 2
min := math.min(low , min)
max := min == low ? high : max
idx := min == low ? i : idx
array.unshift(target_top, max)
array.unshift(target_btm, min)
array.unshift(target_left, time )
array.unshift(target_type, use_max ? -1 : 1)
//Set order blocks
display_ob(boxes, target_top, target_btm, target_left, target_type, show_last, swing, size)=>
for i = 0 to math.min(show_last-1, size-1)
get_box = array.get(boxes, i)
box.set_lefttop(get_box, array.get(target_left, i), array.get(target_top, i))
box.set_rightbottom(get_box, array.get(target_left, i), array.get(target_btm, i))
box.set_extend(get_box, extend.right)
color css = na
if swing
if style == 'Monochrome'
css := array.get(target_type, i) == 1 ? color.new(#b2b5be, 80) : color.new(#5d606b, 80)
border_css = array.get(target_type, i) == 1 ? #b2b5be : #5d606b
box.set_border_color(get_box, border_css)
else
css := array.get(target_type, i) == 1 ? bull_ob_css : bear_ob_css
box.set_border_color(get_box, css)
box.set_bgcolor(get_box, css)
else
if style == 'Monochrome'
css := array.get(target_type, i) == 1 ? color.new(#b2b5be, 80) : color.new(#5d606b, 80)
else
css := array.get(target_type, i) == 1 ? ibull_ob_css : ibear_ob_css
box.set_border_color(get_box, css)
box.set_bgcolor(get_box, css)
//Line Style function
get_line_style(style) =>
out = switch style
'⎯⎯⎯' => line.style_solid
'----' => line.style_dashed
'····' => line.style_dotted
//Set line/labels function for previous high/lows
phl(h, l, tf, css)=>
var line high_line = line.new(na,na,na,na
, xloc = xloc.bar_time
, color = css
, style = get_line_style(pdhl_style))
var label high_lbl = label.new(na,na
, xloc = xloc.bar_time
, text = str.format('P{0}H', tf)
, color = TRANSP_CSS
, textcolor = css
, size = size.small
, style = label.style_label_left)
var line low_line = line.new(na,na,na,na
, xloc = xloc.bar_time
, color = css
, style = get_line_style(pdhl_style))
var label low_lbl = label.new(na,na
, xloc = xloc.bar_time
, text = str.format('P{0}L', tf)
, color = TRANSP_CSS
, textcolor = css
, size = size.small
, style = label.style_label_left)
hy = ta.valuewhen(h != h , h, 1)
hx = ta.valuewhen(h == high, time, 1)
ly = ta.valuewhen(l != l , l, 1)
lx = ta.valuewhen(l == low, time, 1)
if barstate.islast
ext = time + (time - time )*20
//High
line.set_xy1(high_line, hx, hy)
line.set_xy2(high_line, ext, hy)
label.set_xy(high_lbl, ext, hy)
//Low
line.set_xy1(low_line, lx, ly)
line.set_xy2(low_line, ext, ly)
label.set_xy(low_lbl, ext, ly)
//-----------------------------------------------------------------------------}
//Global variables
//-----------------------------------------------------------------------------{
var trend = 0, var itrend = 0
var top_y = 0., var top_x = 0
var btm_y = 0., var btm_x = 0
var itop_y = 0., var itop_x = 0
var ibtm_y = 0., var ibtm_x = 0
var trail_up = high, var trail_dn = low
var trail_up_x = 0, var trail_dn_x = 0
var top_cross = true, var btm_cross = true
var itop_cross = true, var ibtm_cross = true
var txt_top = '', var txt_btm = ''
//Alerts
bull_choch_alert = false
bull_bos_alert = false
bear_choch_alert = false
bear_bos_alert = false
bull_ichoch_alert = false
bull_ibos_alert = false
bear_ichoch_alert = false
bear_ibos_alert = false
bull_iob_break = false
bear_iob_break = false
bull_ob_break = false
bear_ob_break = false
eqh_alert = false
eql_alert = false
//Structure colors
var bull_css = style == 'Monochrome' ? #b2b5be
: swing_bull_css
var bear_css = style == 'Monochrome' ? #b2b5be
: swing_bear_css
var ibull_css = style == 'Monochrome' ? #b2b5be
: swing_ibull_css
var ibear_css = style == 'Monochrome' ? #b2b5be
: swing_ibear_css
//Swings
= swings(length)
= swings(5)
//-----------------------------------------------------------------------------}
//Pivot High
//-----------------------------------------------------------------------------{
var line extend_top = na
var label extend_top_lbl = label.new(na, na
, color = TRANSP_CSS
, textcolor = bear_css
, style = label.style_label_down
, size = size.tiny)
if top
top_cross := true
txt_top := top > top_y ? 'HH' : 'LH'
if show_swings
top_lbl = label.new(n-length, top, txt_top
, color = TRANSP_CSS
, textcolor = bear_css
, style = label.style_label_down
, size = size.small)
if mode == 'Present'
label.delete(top_lbl )
//Extend recent top to last bar
line.delete(extend_top )
extend_top := line.new(n-length, top, n, top
, color = bear_css)
top_y := top
top_x := n - length
trail_up := top
trail_up_x := n - length
if itop
itop_cross := true
itop_y := itop
itop_x := n - 5
//Trailing maximum
trail_up := math.max(high, trail_up)
trail_up_x := trail_up == high ? n : trail_up_x
//Set top extension label/line
if barstate.islast and show_hl_swings
line.set_xy1(extend_top, trail_up_x, trail_up)
line.set_xy2(extend_top, n + 20, trail_up)
label.set_x(extend_top_lbl, n + 20)
label.set_y(extend_top_lbl, trail_up)
label.set_text(extend_top_lbl, trend < 0 ? 'Strong High' : 'Weak High')
//-----------------------------------------------------------------------------}
//Pivot Low
//-----------------------------------------------------------------------------{
var line extend_btm = na
var label extend_btm_lbl = label.new(na, na
, color = TRANSP_CSS
, textcolor = bull_css
, style = label.style_label_up
, size = size.tiny)
if btm
btm_cross := true
txt_btm := btm < btm_y ? 'LL' : 'HL'
if show_swings
btm_lbl = label.new(n - length, btm, txt_btm
, color = TRANSP_CSS
, textcolor = bull_css
, style = label.style_label_up
, size = size.small)
if mode == 'Present'
label.delete(btm_lbl )
//Extend recent btm to last bar
line.delete(extend_btm )
extend_btm := line.new(n - length, btm, n, btm
, color = bull_css)
btm_y := btm
btm_x := n-length
trail_dn := btm
trail_dn_x := n-length
if ibtm
ibtm_cross := true
ibtm_y := ibtm
ibtm_x := n - 5
//Trailing minimum
trail_dn := math.min(low, trail_dn)
trail_dn_x := trail_dn == low ? n : trail_dn_x
//Set btm extension label/line
if barstate.islast and show_hl_swings
line.set_xy1(extend_btm, trail_dn_x, trail_dn)
line.set_xy2(extend_btm, n + 20, trail_dn)
label.set_x(extend_btm_lbl, n + 20)
label.set_y(extend_btm_lbl, trail_dn)
label.set_text(extend_btm_lbl, trend > 0 ? 'Strong Low' : 'Weak Low')
//-----------------------------------------------------------------------------}
//Order Blocks Arrays
//-----------------------------------------------------------------------------{
var iob_top = array.new_float(0)
var iob_btm = array.new_float(0)
var iob_left = array.new_int(0)
var iob_type = array.new_int(0)
var ob_top = array.new_float(0)
var ob_btm = array.new_float(0)
var ob_left = array.new_int(0)
var ob_type = array.new_int(0)
//-----------------------------------------------------------------------------}
//Pivot High BOS/CHoCH
//-----------------------------------------------------------------------------{
//Filtering
var bull_concordant = true
if ifilter_confluence
bull_concordant := high - math.max(close, open) > math.min(close, open - low)
//Detect internal bullish Structure
if ta.crossover(close, itop_y) and itop_cross and top_y != itop_y and bull_concordant
bool choch = na
if itrend < 0
choch := true
bull_ichoch_alert := true
else
bull_ibos_alert := true
txt = choch ? 'CHoCH' : 'BOS'
if show_internals
if show_ibull == 'All' or (show_ibull == 'BOS' and not choch) or (show_ibull == 'CHoCH' and choch)
display_Structure(itop_x, itop_y, txt, ibull_css, true, true, size.tiny)
itop_cross := false
itrend := 1
//Internal Order Block
if show_iob
ob_coord(false, itop_x, iob_top, iob_btm, iob_left, iob_type)
//Detect bullish Structure
if ta.crossover(close, top_y) and top_cross
bool choch = na
if trend < 0
choch := true
bull_choch_alert := true
else
bull_bos_alert := true
txt = choch ? 'CHoCH' : 'BOS'
if show_Structure
if show_bull == 'All' or (show_bull == 'BOS' and not choch) or (show_bull == 'CHoCH' and choch)
display_Structure(top_x, top_y, txt, bull_css, false, true, size.small)
//Order Block
if show_ob
ob_coord(false, top_x, ob_top, ob_btm, ob_left, ob_type)
top_cross := false
trend := 1
//-----------------------------------------------------------------------------}
//Pivot Low BOS/CHoCH
//-----------------------------------------------------------------------------{
var bear_concordant = true
if ifilter_confluence
bear_concordant := high - math.max(close, open) < math.min(close, open - low)
//Detect internal bearish Structure
if ta.crossunder(close, ibtm_y) and ibtm_cross and btm_y != ibtm_y and bear_concordant
bool choch = false
if itrend > 0
choch := true
bear_ichoch_alert := true
else
bear_ibos_alert := true
txt = choch ? 'CHoCH' : 'BOS'
if show_internals
if show_ibear == 'All' or (show_ibear == 'BOS' and not choch) or (show_ibear == 'CHoCH' and choch)
display_Structure(ibtm_x, ibtm_y, txt, ibear_css, true, false, size.tiny)
ibtm_cross := false
itrend := -1
//Internal Order Block
if show_iob
ob_coord(true, ibtm_x, iob_top, iob_btm, iob_left, iob_type)
//Detect bearish Structure
if ta.crossunder(close, btm_y) and btm_cross
bool choch = na
if trend > 0
choch := true
bear_choch_alert := true
else
bear_bos_alert := true
txt = choch ? 'CHoCH' : 'BOS'
if show_Structure
if show_bear == 'All' or (show_bear == 'BOS' and not choch) or (show_bear == 'CHoCH' and choch)
display_Structure(btm_x, btm_y, txt, bear_css, false, false, size.small)
//Order Block
if show_ob
ob_coord(true, btm_x, ob_top, ob_btm, ob_left, ob_type)
btm_cross := false
trend := -1
//-----------------------------------------------------------------------------}
//Order Blocks
//-----------------------------------------------------------------------------{
//Set order blocks
var iob_boxes = array.new_box(0)
var ob_boxes = array.new_box(0)
//Delete internal order blocks box coordinates if top/bottom is broken
for element in iob_type
index = array.indexof(iob_type, element)
if close < array.get(iob_btm, index) and element == 1
array.remove(iob_top, index)
array.remove(iob_btm, index)
array.remove(iob_left, index)
array.remove(iob_type, index)
bull_iob_break := true
else if close > array.get(iob_top, index) and element == -1
array.remove(iob_top, index)
array.remove(iob_btm, index)
array.remove(iob_left, index)
array.remove(iob_type, index)
bear_iob_break := true
//Delete internal order blocks box coordinates if top/bottom is broken
for element in ob_type
index = array.indexof(ob_type, element)
if close < array.get(ob_btm, index) and element == 1
array.remove(ob_top, index)
array.remove(ob_btm, index)
array.remove(ob_left, index)
array.remove(ob_type, index)
bull_ob_break := true
else if close > array.get(ob_top, index) and element == -1
array.remove(ob_top, index)
array.remove(ob_btm, index)
array.remove(ob_left, index)
array.remove(ob_type, index)
bear_ob_break := true
iob_size = array.size(iob_type)
ob_size = array.size(ob_type)
if barstate.isfirst
if show_iob
for i = 0 to iob_showlast-1
array.push(iob_boxes, box.new(na,na,na,na, xloc = xloc.bar_time))
if show_ob
for i = 0 to ob_showlast-1
array.push(ob_boxes, box.new(na,na,na,na, xloc = xloc.bar_time))
if iob_size > 0
if barstate.islast
display_ob(iob_boxes, iob_top, iob_btm, iob_left, iob_type, iob_showlast, false, iob_size)
if ob_size > 0
if barstate.islast
display_ob(ob_boxes, ob_top, ob_btm, ob_left, ob_type, ob_showlast, true, ob_size)
//-----------------------------------------------------------------------------}
//EQH/EQL
//-----------------------------------------------------------------------------{
var eq_prev_top = 0.
var eq_top_x = 0
var eq_prev_btm = 0.
var eq_btm_x = 0
if show_eq
eq_top = ta.pivothigh(eq_len, eq_len)
eq_btm = ta.pivotlow(eq_len, eq_len)
if eq_top
max = math.max(eq_top, eq_prev_top)
min = math.min(eq_top, eq_prev_top)
if max < min + atr * eq_threshold
eqh_line = line.new(eq_top_x, eq_prev_top, n-eq_len, eq_top
, color = bear_css
, style = line.style_dotted)
eqh_lbl = label.new(int(math.avg(n-eq_len, eq_top_x)), eq_top, 'EQH'
, color = #00000000
, textcolor = bear_css
, style = label.style_label_down
, size = size.tiny)
if mode == 'Present'
line.delete(eqh_line )
label.delete(eqh_lbl )
eqh_alert := true
eq_prev_top := eq_top
eq_top_x := n-eq_len
if eq_btm
max = math.max(eq_btm, eq_prev_btm)
min = math.min(eq_btm, eq_prev_btm)
if min > max - atr * eq_threshold
eql_line = line.new(eq_btm_x, eq_prev_btm, n-eq_len, eq_btm
, color = bull_css
, style = line.style_dotted)
eql_lbl = label.new(int(math.avg(n-eq_len, eq_btm_x)), eq_btm, 'EQL'
, color = #00000000
, textcolor = bull_css
, style = label.style_label_up
, size = size.tiny)
eql_alert := true
if mode == 'Present'
line.delete(eql_line )
label.delete(eql_lbl )
eq_prev_btm := eq_btm
eq_btm_x := n-eq_len
//-----------------------------------------------------------------------------}
//Fair Value Gaps
//-----------------------------------------------------------------------------{
var bullish_fvg_max = array.new_box(0)
var bullish_fvg_min = array.new_box(0)
var bearish_fvg_max = array.new_box(0)
var bearish_fvg_min = array.new_box(0)
float bullish_fvg_avg = na
float bearish_fvg_avg = na
bullish_fvg_cnd = false
bearish_fvg_cnd = false
=
request.security(syminfo.tickerid, fvg_tf, get_ohlc())
if show_fvg
delta_per = (src_c1 - src_o1) / src_o1 * 100
change_tf = timeframe.change(fvg_tf)
threshold = fvg_auto ? ta.cum(math.abs(change_tf ? delta_per : 0)) / n * 2
: 0
//FVG conditions
bullish_fvg_cnd := src_l > src_h2
and src_c1 > src_h2
and delta_per > threshold
and change_tf
bearish_fvg_cnd := src_h < src_l2
and src_c1 < src_l2
and -delta_per > threshold
and change_tf
//FVG Areas
if bullish_fvg_cnd
array.unshift(bullish_fvg_max, box.new(n-1, src_l, n + fvg_extend, math.avg(src_l, src_h2)
, border_color = bull_fvg_css
, bgcolor = bull_fvg_css))
array.unshift(bullish_fvg_min, box.new(n-1, math.avg(src_l, src_h2), n + fvg_extend, src_h2
, border_color = bull_fvg_css
, bgcolor = bull_fvg_css))
if bearish_fvg_cnd
array.unshift(bearish_fvg_max, box.new(n-1, src_h, n + fvg_extend, math.avg(src_h, src_l2)
, border_color = bear_fvg_css
, bgcolor = bear_fvg_css))
array.unshift(bearish_fvg_min, box.new(n-1, math.avg(src_h, src_l2), n + fvg_extend, src_l2
, border_color = bear_fvg_css
, bgcolor = bear_fvg_css))
for bx in bullish_fvg_min
if low < box.get_bottom(bx)
box.delete(bx)
box.delete(array.get(bullish_fvg_max, array.indexof(bullish_fvg_min, bx)))
for bx in bearish_fvg_max
if high > box.get_top(bx)
box.delete(bx)
box.delete(array.get(bearish_fvg_min, array.indexof(bearish_fvg_max, bx)))
//-----------------------------------------------------------------------------}
//Previous day/week high/lows
//-----------------------------------------------------------------------------{
//Daily high/low
= request.security(syminfo.tickerid, 'D', hl()
, lookahead = barmerge.lookahead_on)
//Weekly high/low
= request.security(syminfo.tickerid, 'W', hl()
, lookahead = barmerge.lookahead_on)
//Monthly high/low
= request.security(syminfo.tickerid, 'M', hl()
, lookahead = barmerge.lookahead_on)
//Display Daily
if show_pdhl
phl(pdh, pdl, 'D', pdhl_css)
//Display Weekly
if show_pwhl
phl(pwh, pwl, 'W', pwhl_css)
//Display Monthly
if show_pmhl
phl(pmh, pml, 'M', pmhl_css)
//-----------------------------------------------------------------------------}
//Premium/Discount/Equilibrium zones
//-----------------------------------------------------------------------------{
var premium = box.new(na, na, na, na
, bgcolor = color.new(premium_css, 80)
, border_color = na)
var premium_lbl = label.new(na, na
, text = 'Premium'
, color = TRANSP_CSS
, textcolor = premium_css
, style = label.style_label_down
, size = size.small)
var eq = box.new(na, na, na, na
, bgcolor = color.rgb(120, 123, 134, 80)
, border_color = na)
var eq_lbl = label.new(na, na
, text = 'Equilibrium'
, color = TRANSP_CSS
, textcolor = eq_css
, style = label.style_label_left
, size = size.small)
var discount = box.new(na, na, na, na
, bgcolor = color.new(discount_css, 80)
, border_color = na)
var discount_lbl = label.new(na, na
, text = 'Discount'
, color = TRANSP_CSS
, textcolor = discount_css
, style = label.style_label_up
, size = size.small)
//Show Premium/Discount Areas
if barstate.islast and show_sd
avg = math.avg(trail_up, trail_dn)
box.set_lefttop(premium, math.max(top_x, btm_x), trail_up)
box.set_rightbottom(premium, n, .95 * trail_up + .05 * trail_dn)
label.set_xy(premium_lbl, int(math.avg(math.max(top_x, btm_x), n)), trail_up)
box.set_lefttop(eq, math.max(top_x, btm_x), .525 * trail_up + .475*trail_dn)
box.set_rightbottom(eq, n, .525 * trail_dn + .475 * trail_up)
label.set_xy(eq_lbl, n, avg)
box.set_lefttop(discount, math.max(top_x, btm_x), .95 * trail_dn + .05 * trail_up)
box.set_rightbottom(discount, n, trail_dn)
label.set_xy(discount_lbl, int(math.avg(math.max(top_x, btm_x), n)), trail_dn)
//-----------------------------------------------------------------------------}
//Trend
//-----------------------------------------------------------------------------{
var color trend_css = na
if show_trend
if style == 'Colored'
trend_css := itrend == 1 ? bull_css : bear_css
else if style == 'Monochrome'
trend_css := itrend == 1 ? #b2b5be : #5d606b
plotcandle(open, high, low, close
, color = trend_css
, wickcolor = trend_css
, bordercolor = trend_css
, editable = false)
//-----------------------------------------------------------------------------}
//Alerts
//-----------------------------------------------------------------------------{
//Internal Structure
alertcondition(bull_ibos_alert, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(bull_ichoch_alert, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(bear_ibos_alert, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(bear_ichoch_alert, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
//Swing Structure
alertcondition(bull_bos_alert, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(bull_choch_alert, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(bear_bos_alert, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(bear_choch_alert, 'Bearish CHoCH', 'Bearish CHoCH formed')
//order Blocks
alertcondition(bull_iob_break, 'Bullish Internal OB Breakout', 'Price broke bullish iternal OB')
alertcondition(bear_iob_break, 'Bearish Internal OB Breakout', 'Price broke bearish iternal OB')
alertcondition(bull_ob_break, 'Bullish OB Breakout', 'Price broke bullish iternal OB')
alertcondition(bear_ob_break, 'bearish OB Breakout', 'Price broke bearish iternal OB')
//EQH/EQL
alertcondition(eqh_alert, 'Equal Highs', 'Equal highs detected')
alertcondition(eql_alert, 'Equal Lows', 'Equal lows detected')
//FVG
alertcondition(bullish_fvg_cnd, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(bearish_fvg_cnd, 'Bearish FVG', 'Bearish FVG formed')
//-----------------------------------
Cripto🟢🟠Veterano v1.0"Cripto🟢🟠Veterano v1.0 es un indicador que te ayuda a identificar entradas y salidas en el mercado de criptomonedas. usando estadísticas e inteligencia artificial.
Solo funciona en temporalidades de 5 minutos. El usuario solo debe esperar las entradas y tomarlas, basándose en señales precisas de soporte, resistencia, RSI y EMAs. Además, el indicador se actualizará a medida que pasa el tiempo.
Si deseas hacer una donación, esta es la dirección de TRON EN USDT:
TVdQYjPr11j3PLSTx7KQcCH4abRFqPLEUE
CONFIGURACIÓN:
Vela Izquierda y Derecha: 73
Extensión de Soporte y Resistencia: 20
Número Máximo de Soporte y Resistencia: 3
Colores:
Rectángulo (0.20): Rosado
Rectángulo (-0120): Rosado
Condiciones:
Caída Extrema: Caída extrema
Cambio de Texto: Subida extrema
Colores de Caída y Subida Extrema: Gris
EMA:
Período de EMA 1: 200
Desactivar las demás EMAs
Trailing Stop with 21 EMA and ATRTrailing Stop with 21 EMA and ATR
This indicator helps traders to dynamically track their trailing stops based on market volatility, ensuring better risk management and optimized exit points.
This Pine Script indicator for TradingView calculates and plots trailing stops based on the 21-period Exponential Moving Average (EMA) and the Average True Range (ATR). The script uses an ATR multiplier to adjust the trailing stops dynamically.
Key Features:
Trailing Stops Calculation:
Long Trailing Stop: Calculated as EMA21 - (ATR * ATR Multiplier)
Short Trailing Stop: Calculated as EMA21 + (ATR * ATR Multiplier)
Customization Options:
Visibility: Toggle the visibility of long and short trailing stops.
Color: Customize the color of the trailing stops for both long and short positions.
Line Width: Adjust the width of the trailing stop lines.
Inputs:
EMA Length: Set the length for the Exponential Moving Average (default is 21).
ATR Length: Set the length for the Average True Range (default is 14).
ATR Multiplier: Set the multiplier for the ATR to adjust the trailing stop distance (default is 1.0).
Engulfing Candle Demand/SupplyEngulfing Candle Demand/Supply
Marks opening price of candle prior to the engulfing candle
Engulfing Volume IndicatorThe Bullish Engulfing Candlestick Pattern is the primary technical pattern to be analyzed for the buy setup. This particular pattern consists of two candlesticks and serves as a key reversal indicator, signalling a potential shift in market sentiment from bearish to bullish. It occurs following a downtrend and is characterized by a small bearish candle (typically black or red) that is succeeded by a more significant bullish candle (white or green) on the next trading day. The bullish candle must completely cover or "engulf" the body of the prior bearish candle.
EMA Crossover + Candle Pattern AlertI would like to build a trading bot alert in PineScript that performs the following:
9-15 EMA Crossover:
When the 9-period EMA crosses above the 15-period EMA, it's a bullish signal.
When the 9-period EMA crosses below the 15-period EMA, it's a bearish signal.
Candle Pattern Confirmation:
After a bullish crossover, check for any of the following bullish candle patterns in the next 3 or 5 minutes:
Hammer
Bullish Engulfing
Morning Star
Bullish Piercing Pattern
If any of these patterns are detected, trigger an alert
b1r1nc1 crt indicatorwinning circle crt indicator
b1r1nc1
Candle Range Trading (CRT) Indicator
The CRT Indicator identifies potential trading opportunities by analyzing specific candlestick patterns. This script is designed to detect both bullish and bearish CRT patterns and provides visual cues directly on your chart.
Features:
Pattern Detection:
Analyzes two consecutive candles to identify the CRT pattern.
Detects both bullish and bearish setups based on the relative positions of the candles.
Price Difference CheckThis code calculates the difference between the highest and lowest values of the current candle, and if this difference is equal to or greater than the percentage value set in the settings, it displays a marker on the chart. Additionally, it shows the difference as a line on the chart.
Prashant Dynamic EMA Crossover Signal (Corrected)Take entries only upon candle close above or below ema channel
Bahubali indicatorIndicator: Last Daily Candle High, Low, and Close
This TradingView script plots horizontal lines on the chart representing the high, low, and close values of the previous day's candle. Here’s how it works:
indicator("Last Daily Candle High, Low, and Close", overlay=true)
This line defines the name of the indicator ("Last Daily Candle High, Low, and Close") and specifies that the indicator will be displayed on the main price chart (overlay=true).
2. Fetching Data from the Previous Day
pinescript
Copy
Edit
prev_day_high = ta.valuewhen(timeframe.change("D"), high , 0) // Fetch yesterday's high
prev_day_low = ta.valuewhen(timeframe.change("D"), low , 0) // Fetch yesterday's low
prev_day_close = ta.valuewhen(timeframe.change("D"), close , 0) // Fetch yesterday's close
Fetching the High, Low, and Close:
The script fetches the high, low, and close of the previous day’s completed candle.
timeframe.change("D"): Detects when the day changes.
high , low , close : These references access the high, low, and close of the previous day's candle (using to access the prior bar's values).
ta.valuewhen: This function ensures the values are only fetched when the daily candle changes (i.e., once per day).
3. Initializing Line Variables
pinescript
Copy
Edit
var line high_line = na
var line low_line = na
var line close_line = na
Initializing Line Variables:
Three variables are declared to store the line objects for the high, low, and close levels of the previous day.
These variables are initialized as na, which means "Not Available," until the lines are created.
4. Updating Lines at the Start of Each Day
pinescript
Copy
Edit
if timeframe.change("D")
// Remove old lines
line.delete(high_line)
line.delete(low_line)
line.delete(close_line)
Detecting New Day:
The if timeframe.change("D") block ensures the script detects when a new day starts.
When a new day starts, it deletes the previous day's lines to ensure no overlap.
5. Drawing New Lines
pinescript
Copy
Edit
// Create new lines extending fully across the chart
high_line := line.new(x1=bar_index - 500, y1=prev_day_high, x2=bar_index + 500, y2=prev_day_high, color=color.red, width=2, extend=extend.both)
low_line := line.new(x1=bar_index - 500, y1=prev_day_low, x2=bar_index + 500, y2=prev_day_low, color=color.black, width=2, extend=extend.both)
close_line := line.new(x1=bar_index - 500, y1=prev_day_close, x2=bar_index + 500, y2=prev_day_close, color=color.blue, width=2, extend=extend.both)
Creating Horizontal Lines:
High Line: Drawn at the previous day's high, using a red color.
Low Line: Drawn at the previous day's low, using a black color.
Close Line: Drawn at the previous day's close, using a blue color.
Line Extensions:
The lines are extended from x1=bar_index - 500 to x2=bar_index + 500, meaning they will span a wide section of the chart from far left to far right, ensuring visibility.
extend=extend.both ensures the lines extend beyond the current bar in both directions.
Summary:
This TradingView indicator draws horizontal lines representing the high, low, and close levels of the previous day's candle. The lines are updated daily, with each new day resetting the previous lines and drawing new ones at the appropriate levels for that day’s high, low, and close prices.
This tool helps traders quickly identify important price levels from the previous trading day, which can act as potential support or resistance levels.
337 Day EMA with buy/selll and uptrend downtrend Notifications!337 Day EMA with buy/selll and uptrend downtrend Notifications!
A a sophisticated trading tool designed to help traders identify significant market trends and make informed decisions. By leveraging the 337-day Exponential Moving Average (EMA), this indicator provides a clear visual representation of the long-term price trend of an asset. The EMA gives more weight to recent prices, making it a responsive and reliable indicator.
Key Features
337-day EMA Calculation
The indicator calculates the 337-day EMA, which smooths out price data and highlights the overall trend by giving greater significance to recent price changes.
Trend Identification
Uptrend: An uptrend is detected when the price crosses above the 337 EMA, signaling a potential bullish market. This is visually represented with a green "Uptrend" label below the corresponding bar.
Downtrend A downtrend is identified when the price crosses below the 337 EMA, indicating a potential bearish market. This is marked with a red "Downtrend" label above the corresponding bar.
Alert Notifications
The indicator includes built-in alert conditions for both uptrends and downtrends. Traders receive real-time notifications when the price crosses above or below the 337 EMA, ensuring they are promptly informed of significant market movements.
Customizable Visuals
The uptrend and downtrend labels are designed to be easily readable, with green "Uptrend" text boxes and red "Downtrend" text boxes, enhancing the clarity of the trend signals.
Benefits
Timely Alerts: Receive instant notifications about key trend changes, allowing for timely trading decisions.
Long-Term Perspective: The 337-day EMA provides a comprehensive view of the market's long-term trend, reducing the noise of short-term fluctuations.
Enhanced Readability: The clear visual labels for uptrends and downtrends make it easy to interpret the market conditions at a glance.
By integrating the "337 EMA with Uptrend/Downtrend Notifications" into your trading strategy, you can stay ahead of market trends and make more informed trading decisions. This tool is particularly useful for traders looking for a reliable way to identify long-term trends and react to significant market movements effectively.
Let me know if there's anything else you need or if you want more details! 📈
Price Difference CheckThis code calculates the difference between the highest and lowest values of the current candle, and if this difference is equal to or greater than the percentage value set in the settings, it displays a marker on the chart. Additionally, it shows the difference as a line on the chart.
ADR by CTL modelled on TREPENG'sThis is an ADR indicator, a modified version of trepengs.
New ADR levels added 100/150/200/250/300%
Arrow functions and labels option, added to show when candles touch the above levels
Candle Volume DisplayCandle Volume Display Indicator
Version: 1.0
Author: pool_shark
Pine Script Version: v5
Description:
The Candle Volume Display Indicator overlays real-time trading volume on each candlestick by displaying a small label above the candle.
Features:
Displays volume as a label above each candle.
Uses dynamic text conversion to ensure accurate volume representation.
Labels are positioned at the high of each bar for clear visibility.
Customizable label color, text color, and size for easy readability.
Ideal for traders who want a quick volume reference on their price chart.
How to Use:
Add this script to your TradingView chart.
The indicator will automatically overlay volume labels on each candlestick.
Use it to quickly spot high or low volume trends without looking at the volume panel.
FShariar_Engulfing Pattern with Dynamic LevelsThis Pine Script indicator, created by Fshariar, detects Bullish and Bearish Engulfing patterns and plots dynamic Fibonacci retracement levels based on recent price action. It uses customizable lookback periods to identify engulfing candles and calculate the highest high/lowest low for Fibonacci levels. A volume filter is included to potentially improve signal quality. Fibonacci levels are automatically drawn upon engulfing pattern detection, extending to the right. Traders can customize Fibonacci levels and the volume factor. Alerts are triggered for bullish and bearish engulfing signals. This indicator aims to help traders identify potential reversal points. Remember, no indicator is perfect, and proper risk management is essential. Backtesting is highly recommended.