Détecteur d'Order Blocks Non TouchésAn indicator for detecting unmitigated bullish and bearish OBs.
It's 90% reliable :D
Happy trading!
Breadth Indicators
Angel Signal proAngel Signal Pro is a comprehensive technical analysis tool that integrates multiple indicators to provide a structured market assessment.
RSI, MACD, and ADX – evaluate trend strength and identify potential entry and exit points.
Momentum and ATR – measure price acceleration and volatility, assisting in risk management.
Stochastic Oscillator – detects overbought and oversold conditions.
SMA (50, 100, 200) – allows tracking of key moving averages with the option to enable all at once.
Cryptocurrency price display – select and monitor real-time prices of any cryptocurrency available on the BINANCE exchange.
Automatic trend detection – classifies trends as bullish, bearish, or neutral based on RSI and MACD signals.
Customizable table – presents key indicator values in a structured and convenient format.
Suitable for traders of all experience levels, Angel Signal Pro helps navigate market conditions with confidence.
BBVOL SwiftEdgeBBVOL SwiftEdge – Precision Scalping with Trend Awareness
Enhance your trading analysis with BBVOLK a versatile indicator designed for scalpers and short-term traders. Optimized for timeframes like the 1-minute chart, this tool integrates Bollinger Bands, volume analysis, and trend-aware signals to provide potential entry points while visually indicating market direction through colored candlesticks. Suitable for forex, crypto, and stocks, it supports informed decision-making across various markets.
What Does BBVOL Do?
Potential Entry Points: Identifies "Buy Point" and "Sell Point" labels near the lower and upper Bollinger Bands, filtered by trend momentum and volume strength. Ideal for analyzing quick market moves.
Trend Visualization with Colored Candles: Gain insight into market direction with candlestick coloring:
Green Candles: Price is above the trend baseline (blue line), suggesting a bullish tendency.
Red Candles: Price is below the baseline, indicating a bearish tendency.
Purple Candles: Price is consolidating near the baseline, highlighting potential ranging conditions.
Volume-Based Confirmation: Signals are supported by buy and sell volume percentages, aligning with market momentum.
Trend Support with EMA: An Exponential Moving Average (EMA) helps filter signals based on short-term trend direction.
Customizable Settings: Adjust Bollinger Bands length, multiplier, volume thresholds, and EMA length to suit your trading style and market conditions
Strategy Overview
HeikinBBVolStrategy is designed for scalping and short-term trading, especially on 1-minute charts. The approach utilizes:
Bollinger Bands to detect overbought and oversold conditions, offering potential entry points at band crossings.
Heikin Ashi Filtering: Employs Heikin Ashi calculations to confirm trend direction for signal reliability.
Volume Analysis to validate momentum with buy or sell volume thresholds.
EMA Trend Support to align trades with the short-term trend.
Trend Coloring to visually distinguish trending and consolidating markets, aiding in trade planning.
Détecteur de BPR (Balanced Price Range)A visual indicator of BPRs.
Of course, you'll have to be careful, as it can sometimes detect false BPRs, but if you know how an BPR works, you'll be able to see for yourself.
Nevertheless, this indicator remains a good visual aid :P
Forex Sessions//@version=5
indicator("Forex Sessions", overlay=true, max_lines_count=500, max_boxes_count=500)
// asianSession = input(title="Asian Session", defval="0930-1700:146")
showAsian = input.bool(title="Asia", defval=true, group="Show", inline="01")
showFrankfurt = input.bool(title="Frankfurt", defval=true, group="Show", inline="01")
showLondon = input.bool(title="London", defval=true, group="Show", inline="01")
showNewYork = input.bool(title="New York", defval=true, group="Show", inline="01")
asianSession = input.session(title="Asian Session", defval="1700-0200", group="Asia")
asianBorder = input.color(color.new(color.blue,85), "Border", inline = "01", group="Asia")
asianBg = input.color(color.new(color.blue,85), "Background", inline = "01", group="Asia")
frankfurtSession = input.session(title="Frakfurt Session", defval="0200-0300", group="Frankfurt")
frankfurtBorder = input.color(color.new(color.gray,80), "Border", inline = "01", group="Frankfurt")
frankfurtBg = input.color(color.new(color.gray,80), "Background", inline = "01", group="Frankfurt")
londonSession = input.session(title="London Session", defval="0300-1100", group="London")
londonBorder = input.color(color.new(color.teal,90), "Border", inline = "01", group="London")
londonBg = input.color(color.new(color.teal,90), "Background", inline = "01", group="London")
londonKzSession = input.session(title="London Killzone", defval="0330-0530", group="London")
newYorkSession = input.session(title="New York Session", defval="0800-1600", group="New York")
newYorkBorder = input.color(color.new(color.orange,90), "Border", inline = "01", group="New York")
newYorkBg = input.color(color.new(color.orange,90), "Background", inline = "01", group="New York")
newYorkKzSession = input.session(title="New York Killzone", defval="0830-1030", group="New York")
styleOption = input.string(title="Line Style",
options= ,
defval="Dashed (╌)")
lineStyle = (styleOption == "Dotted (┈)") ? line.style_dotted :
(styleOption == "Dashed (╌)") ? line.style_dashed :
(styleOption == "Arrow left (←)") ? line.style_arrow_left :
(styleOption == "Arrow right (→)") ? line.style_arrow_right :
(styleOption == "Arrows both (↔)") ? line.style_arrow_both :
line.style_solid
var box asianRangeBox = na
var line asianMidLine = na
var label dayLabel = na
var box frankfurtRangeBox = na
var box londonRangeBox = na
var box londonKzRangeBox = na
var box newYorkRangeBox = na
var box newYorkKzRangeBox = na
isSession(sess) =>
not na(time(timeframe.period, sess))
dayOfWeekDescription() =>
switch dayofweek
dayofweek.monday => "M"
dayofweek.tuesday => "T"
dayofweek.wednesday => "W"
dayofweek.thursday => "T"
=> "F"
// Asia
if (showAsian)
if (isSession(asianSession) and na(asianRangeBox))
// dayLabel := label.new(bar_index, high, text=dayOfWeekDescription(), style=label.style_none)
asianRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=asianBg, border_color=asianBorder)
asianMidLine := line.new(bar_index, low + (high-low)/2, bar_index+1, low + (high-low)/2, style=lineStyle)
if (not isSession(asianSession) and not na(asianRangeBox))
asianRangeBox := na
asianMidLine := na
if (not na(asianRangeBox))
box.set_top(asianRangeBox, math.max(high, box.get_top(asianRangeBox)))
box.set_bottom(asianRangeBox, math.min(low, box.get_bottom(asianRangeBox)))
box.set_right(asianRangeBox, bar_index)
line.set_y1(asianMidLine, box.get_bottom(asianRangeBox) + (box.get_top(asianRangeBox) - box.get_bottom(asianRangeBox)) / 2)
line.set_y2(asianMidLine, box.get_bottom(asianRangeBox) + (box.get_top(asianRangeBox) - box.get_bottom(asianRangeBox)) / 2)
line.set_x2(asianMidLine,bar_index)
// label.set_y(dayLabel, box.get_top(asianRangeBox))
// Frankfurt
if (showFrankfurt)
if (isSession(frankfurtSession) and na(frankfurtRangeBox))
// label.new(bar_index, low, "foo")
frankfurtRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=frankfurtBg, border_color=frankfurtBorder)
if (not isSession(frankfurtSession) and not na(frankfurtRangeBox))
frankfurtRangeBox := na
if (not na(frankfurtRangeBox))
box.set_top(frankfurtRangeBox, math.max(high, box.get_top(frankfurtRangeBox)))
box.set_bottom(frankfurtRangeBox, math.min(low, box.get_bottom(frankfurtRangeBox)))
box.set_right(frankfurtRangeBox, bar_index)
if (showLondon)
// London
if (isSession(londonSession) and na(londonRangeBox))
londonRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=londonBg, border_color=londonBorder)
if (not isSession(londonSession) and not na(londonRangeBox))
londonRangeBox := na
if (not na(londonRangeBox))
box.set_top(londonRangeBox, math.max(high, box.get_top(londonRangeBox)))
box.set_bottom(londonRangeBox, math.min(low, box.get_bottom(londonRangeBox)))
box.set_right(londonRangeBox, bar_index)
// London KZ
if (isSession(londonKzSession) and na(londonKzRangeBox))
londonKzRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=color.new(color.gray, 100), border_color=color.new(color.blue, 60))
if (not isSession(londonKzSession) and not na(londonKzRangeBox))
londonKzRangeBox := na
if (not na(londonKzRangeBox))
box.set_top(londonKzRangeBox, math.max(high, box.get_top(londonKzRangeBox)))
box.set_bottom(londonKzRangeBox, math.min(low, box.get_bottom(londonKzRangeBox)))
box.set_right(londonKzRangeBox, bar_index)
if (showNewYork)
// New York
if (isSession(newYorkSession) and na(newYorkRangeBox))
newYorkRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=newYorkBg, border_color=newYorkBorder)
if (not isSession(newYorkSession) and not na(newYorkRangeBox))
newYorkRangeBox := na
if (not na(newYorkRangeBox))
box.set_top(newYorkRangeBox, math.max(high, box.get_top(newYorkRangeBox)))
box.set_bottom(newYorkRangeBox, math.min(low, box.get_bottom(newYorkRangeBox)))
box.set_right(newYorkRangeBox, bar_index)
// New york KZ
if (isSession(newYorkKzSession) and na(newYorkKzRangeBox))
newYorkKzRangeBox := box.new(bar_index, high, bar_index+1, low, bgcolor=color.new(color.red, 100), border_color=color.new(color.blue, 60))
if (not isSession(newYorkKzSession) and not na(newYorkKzRangeBox))
newYorkKzRangeBox := na
if (not na(newYorkKzRangeBox))
box.set_top(newYorkKzRangeBox, math.max(high, box.get_top(newYorkKzRangeBox)))
box.set_bottom(newYorkKzRangeBox, math.min(low, box.get_bottom(newYorkKzRangeBox)))
box.set_right(newYorkKzRangeBox, bar_index)
EMA Crossover with Triangle and XThis indicator will flash a signal when 2 EMA crossover take places. Great for Swing Trading.
2 MA Ratio with SignalsCrossover with signal when it crosses, you can add a flag or other signals instead.
Ichimoku SP-RE LNQ97
//@version=5
indicator('Ichimoku SP-RE LNQ97', 'Ichimoku SP-RE LNQ97', overlay=true, max_bars_back=2000, max_lines_count=500, max_labels_count=500)
//◀─── Groups Setup ───►
gsrc = 'SOURCE SETUP'
gichi = 'ICHIMOKU SETTINGS'
gsr = 'SUPPORTS/RESISTANCES SETTINGS'
gpsylvl = 'PSYCHOLOGICAL LEVELS'
gadvset = 'ADVANCED SETTINGS'
gvosc = 'VOLUME OSCILLATOR SETTINGS'
gvrindex = 'RELATIVE VOLUME STRENGTH INDEX SETTINGS'
gatr = 'VOLATILITY SETTINGS'
gbarcol = 'BAR COLOR SETTINGS'
gtable = 'PANEL SETTINGS'
//◀─── Constant String Declaration ───►
string obvstr = 'On Balance Volume'
string cvdstr = 'Cumulative Volume Delta'
string pvtstr = 'Price Volume Trend'
//◀─── Inputs ───►
i_src = input.source(close, 'Source', group=gsrc)
i_altsrc = input.string('(close > open ? high : low)', 'Alternative Source', options= , group=gsrc)
i_uha = input(true, 'Use Volume Heikin Ashi?', group=gsrc)
i_wmas = input.bool(true, 'Weighted Moving Average Smoothing?', group=gsrc)
i_showlabels = input.bool(true, 'Show Labels?', group=gichi)
i_showprice = input.bool(true, 'Show Tenkan-Sen/kijun-Sen Price Labels?', group=gichi)
i_showtenkan = input.bool(true, 'Tenkan-Sen', group=gichi, inline='tenkan')
i_tenkancolor = input.color(color.new(#007FFF, 0), '', group=gichi, inline='tenkan')
i_tkminlen = input.int(9, 'Tenkan Min Length', minval=1, group=gichi, inline='tenkanlength')
i_tkmaxlen = input.int(30, 'Tenkan Max Length', minval=1, group=gichi, inline='tenkanlength')
i_tkdynperc = input.float(96.85, 'Tenkan Dynamic Length Adaptive Percentage', minval=0, maxval=100, group=gichi) / 100.0
i_tkvolsetup = input.bool(true, 'Volume', group=gichi, inline='tenkanfilter')
i_tkatrsetup = input.bool(true, 'Volatility', group=gichi, inline='tenkanfilter')
i_tkchfilter = input.bool(true, 'Chikou Trend Filter', group=gichi, inline='tenkanfilter')
i_showkijun = input.bool(true, 'Kijun-Sen ', group=gichi, inline='kijun')
i_kijuncolor = input.color(color.new(#FF0016, 0), '', group=gichi, inline='kijun')
i_showkjhlabels = input.bool(true, 'Show Hidden Kijun-Sen Labels?', group=gichi)
i_showkjhsr = input.bool(false, 'Show Hidden Kijun-Sen Supports/Resistances?', group=gichi)
i_kjminlen = input.int(20, 'Kijun Min Length', minval=1, group=gichi, inline='kijunlength')
i_kjmaxlen = input.int(60, 'Kijun Max Length', minval=1, group=gichi, inline='kijunlength')
i_kjdynperc = input.float(96.85, 'Kijun Dynamic Length Adaptive Percentage', minval=0, maxval=100, group=gichi) / 100.0
i_kjdivider = input.int(1, 'Kijun Divider Tool', minval=1, maxval=4, group=gichi)
i_kjvolsetup = input.bool(true, 'Volume', group=gichi, inline='kijunfilter')
i_kjatrsetup = input.bool(true, 'Volatility', group=gichi, inline='kijunfilter')
i_kjchfilter = input.bool(true, 'Chikou Trend Filter', group=gichi, inline='kijunfilter')
i_showchikou = input.bool(true, 'Chikou Span', group=gichi)
i_chbearcol = input.color(color.new(#FF0016, 0), 'Bear', group=gichi, inline='chikoucolor')
i_chbullcol = input.color(color.new(#459915, 0), 'Bull', group=gichi, inline='chikoucolor')
i_chconsocol = input.color(color.new(#FF9800, 0), 'Consolidation', group=gichi, inline='chikoucolor')
i_chminlen = input.int(26, 'Chikou Min Length', minval=1, group=gichi, inline='chikoulength')
i_chmaxlen = input.int(50, 'Chikou Max Length', minval=1, group=gichi, inline='chikoulength')
i_chdynperc = input.float(96.85, 'Chikou Dynamic Length Adaptive Percentage', minval=0, maxval=100, group=gichi) / 100.0
i_chfiltper = input.int(25, 'Chikou Filter Period', minval=1, group=gichi)
i_chlb = input.int(50, 'Chikou Filter Percentage Lookback', minval=1, maxval=89, group=gichi)
i_chvolsetup = input.bool(true, 'Volume', group=gichi, inline='chikoufilter')
i_chatrsetup = input.bool(true, 'Volatility', group=gichi, inline='chikoufilter')
i_chtfilter = input.bool(true, 'Chikou Trend Filter', group=gichi, inline='chikoufilter')
I_ska = input.bool(true, 'Senkou-Span A', group=gichi, inline='senkou')
I_skb = input.bool(true, 'Senkou-Span B', group=gichi, inline='senkou')
I_skbear = input.color(color.new(#FF0016, 0), 'Bear', group=gichi, inline='senkoucolor')
I_skbull = input.color(color.new(#459915, 0), 'Bull', group=gichi, inline='senkoucolor')
I_skconso = input.color(color.new(#CED7DF, 0), 'Consolidation', group=gichi, inline='senkoucolor')
I_skminlen = input.int(50, 'Senkou-Span Min Length', minval=1, group=gichi, inline='senkoulength')
I_skmaxlen = input.int(120, 'Senkou-Span Max Length', minval=1, group=gichi, inline='senkoulength')
I_skperc = input.float(96.85, 'Senkou Dynamic Length Adaptive Percentage', minval=0, maxval=100, group=gichi) / 100.0
I_skoffset = input.int(26, 'Senkou-Span Offset', minval=1, group=gichi)
I_skvolsetup = input.bool(true, 'Volume', group=gichi, inline='sn_chks')
I_atrsetup = input.bool(true, 'Volatility', group=gichi, inline='sn_chks')
I_skchfilter = input.bool(true, 'Chikou Trend Filter', group=gichi, inline='sn_chks')
I_kumofill = input.bool(true, 'Kumo Fill', group=gichi, inline='kumo')
I_kumofillt = input.int(65, 'Transparency', minval=1, group=gichi, inline='kumo')
I_volsetup = input.bool(true, 'Volume?', group=gadvset)
I_tkkjcross = input.bool(true, 'Tenkan-Sen/Kijun-Sen Cross?', group=gadvset)
I_atrvolatility = input.bool(true, 'Volatility?', group=gadvset)
I_tkeqkj = input.bool(true, 'Tenkan-Sen Equal Kijun-Sen?', group=gadvset)
I_chgtp = input.bool(true, 'Chikou Greater Than Price?', group=gadvset)
I_chmom = input.bool(true, 'Chikou Momentum?', group=gadvset)
I_pgtk = input.bool(true, 'Price Greater Than Kumo?', group=gadvset)
I_pgttk = input.bool(true, 'Price Greater Than Tenkan-Sen?', group=gadvset)
I_pgtchf = input.bool(true, 'Chikou Trend Filter?', group=gadvset)
I_volosctype = input.string('On Balance Volume', 'Volume Oscillator Type', options= , group=gvosc)
I_volosctypetk = input.string('On Balance Volume', 'Volume Oscillator Type for Tenkan-Sen', options= , group=gvosc)
I_volosctypekj = input.string('On Balance Volume', 'Volume Oscillator Type for Kijun-Sen', options= , group=gvosc)
I_volosctypesk = input.string('On Balance Volume', 'Volume Oscillator Type for Senkou', options= , group=gvosc)
I_volosctypech = input.string('On Balance Volume', 'Volume Oscillator Type for Chikou', options= , group=gvosc)
I_volumelen = input.int(30, 'Volume Length', minval=1, group=gvosc)
I_volzonelen = input.int(21, 'Volume Zone Length', minval=1, group=gvosc)
I_volfastlen = input.int(34, 'Volume Fast Length', minval=1, group=gvosc)
I_volslowlen = input.int(55, 'Volume Slow Length', minval=1, group=gvosc)
I_rvolumetype = input.string(pvtstr, 'Relative Volume Strength Index Type', options= , group=gvrindex)
I_rvolumelen = input.int(14, 'Relative Volume Strength Index Length', minval=1, group=gvrindex)
I_volpeak = input.int(50, 'Relative Volume Strength Index Peak', minval=1, group=gvrindex)
i_emalen1 = input.int(8, 'EMA 1 Length', minval=1, group=gvrindex)
i_emalen2 = input.int(21, 'EMA 2 Length', minval=1, group=gvrindex)
i_atrfastlen = input.int(14, 'Average True Range Fast Length', group=gatr)
i_atrslowlen = input.int(46, 'Average True Range Slow Length', group=gatr)
i_showsr = input.bool(true, 'Show Supports/Resistances?', group=gsr)
i_rescol = input.color(color.new(color.red, 0), 'Resistance Color', group=gsr, inline='srcol')
i_supcol = input.color(color.new(color.green, 0), 'Support Color', group=gsr, inline='srcol')
i_maxline = input.int(2, 'Maximum Lines', minval=1, maxval=500, group=gsr, inline='lines')
i_layout = input.string('Wick', 'Lines Type', options= , group=gsr, inline='lines')
i_linewidth = input.int(1, 'Lines Width ', minval=1, maxval=3, group=gsr, inline='lines style')
i_linestyle = input.string('Solid', 'Lines Style', options= , group=gsr, inline='lines style')
i_extend = input.bool(true, 'Extend Lines', group=gsr, inline='lines style')
i_psylevels = input(false, 'Display Psychological Levels?', group=gpsylvl)
i_linescounter = input(4, 'Lines Above/Below', group=gpsylvl)
i_psylinescol = input.color(color.new(color.gray, 0), 'Lines Color', group=gpsylvl)
i_showbc = input.bool(true, 'Use Bar Color?', group=gbarcol)
i_bearbarcol = input.color(color.new(#910000, 0), 'Bear', group=gbarcol, inline='barcolor')
i_bullbarcol = input.color(color.new(#006400, 0), 'Bull', group=gbarcol, inline='barcolor')
i_consobarcol = input.color(color.new(#FF9800, 0), 'Consolidation', group=gbarcol, inline='barcolor')
i_neutralbarcol = input.color(color.new(#000000, 100), 'Neutral', group=gbarcol, inline='barcolor')
i_showtable = input(true, 'Show Panel?', group=gtable)
i_tablepresets = input.string('Custom', 'Presets', options= , group=gtable)
i_tableloc = input.string('Bottom Right', 'Position', options= , group=gtable)
i_tabletxtsize = input.string('Small', 'Text Size', options= , group=gtable)
i_tabletxtcol = input.color(color.new(color.white, 0), 'Text Color', group=gtable)
i_tablebgcol = input.color(color.new(#696969, 80), 'Background Color', group=gtable)
i_tabletkpc = input.bool(true, 'Display Tenkan-Sen Price Cross?', group=gtable)
i_tablekjpc = input.bool(true, 'Display Kijun-Sen Price Cross?', group=gtable)
i_tablechpc = input.bool(true, 'Display Chikou Span Price Cross?', group=gtable)
i_tablekumobr = input.bool(true, 'Display Kumo Breakout?', group=gtable)
i_tablekumotw = input.bool(true, 'Display Kumo Twist?', group=gtable)
//◀─── Volume Heikin Ashi Calculation ───►
//Constant Price Variables
haclose = i_uha ? ohlc4 : close
vol = volume
//Heikin Ashi Function
f_openha() =>
haopen = float(na)
haopen := na(haopen ) ? (open + close) / 2 : (nz(haopen ) + nz(haclose )) / 2
haopen
//Conditions
haopen = i_uha ? f_openha() : open
haboolean = f_openha()
//◀─── Price Variables Declaration ───►
open_ = open
high_ = high
low_ = low
close_ = close
bar_index_ = bar_index
//Alternative Price Variables Declaration
alternativesrc = i_altsrc == '(open + close +3 * (high + low)) / 8' ? (open + close +3 * (high + low)) / 8 :
i_altsrc == 'close + high + low -2 * open' ? close + high + low -2 * open :
i_altsrc == '(close +5 * (high + low) -7 * (open)) / 4' ? (close +5 * (high + low) -7 * (open)) / 4 :
i_altsrc == '(open + close +5 * (high + low)) / 12' ? (open + close +5 * (high + low)) / 12 :
i_altsrc == '(close > open ? high : low)' ? (close > open ? high : low) :
i_altsrc == 'Heiken-Ashi' ? (ohlc4 > haboolean ? high : low) :
i_src
altsrcres = i_wmas ? ta.swma(alternativesrc) : alternativesrc
//◀─── Global Functions ───►
//Color Call Function
fzonecolor(srcolor, _call) =>
c1 = color.r(srcolor)
c2 = color.g(srcolor)
c3 = color.b(srcolor)
color.rgb(c1, c2, c3, _call)
//Lines Styles String Function
f_i_linestyle(_style) =>
_style == 'Solid' ? line.style_solid : _style == 'Dotted' ? line.style_dotted : line.style_dashed
//Volume Oscillator Functions
f_patternrate(cond, tw, bw, body) =>
ret = 0.5 * (tw + bw + (cond ? 2 * body : 0)) / (tw + bw + body)
ret := nz(ret) == 0 ? 0.5 : ret
ret
f_volcalc(vol_src, _open, _high, _low, _close) =>
float result = 0
tw = _high - math.max(_open, _close)
bw = math.min(_open, _close) - _low
body = math.abs(_close - _open)
deltaup = vol_src * f_patternrate(_open <= _close, tw, bw, body)
deltadown = vol_src * f_patternrate(_open > _close, tw, bw, body)
delta = _close >= _open ? deltaup : -deltadown
cumdelta = ta.cum(delta)
float ctl = na
ctl := cumdelta
cv = I_rvolumetype == obvstr ? ta.obv : I_rvolumetype == cvdstr ? ctl : ta.pvt
ema1 = ta.ema(cv, i_emalen1)
ema2 = ta.ema(cv, i_emalen2)
result := ema1 - ema2
result
f_zone(_src, _type, _len) =>
vp = _src > _src ? _type : _src < _src ? -_type : _src == _src ? 0 : 0
z = 100 * (ta.ema(vp, _len) / ta.ema(_type, _len))
z
f_volzosc(vol_src, _close) =>
float result = 0
zLen = I_volzonelen
result := f_zone(_close, vol_src, zLen)
result
f_volosc(type, vol_src, vol_len, _open, _high, _low, _close) =>
float result = 0
if type == 'TFS Volume Oscillator'
iff_1 = _close < _open ? -vol_src : 0
naccvol = math.sum(_close > _open ? vol_src : iff_1, vol_len)
result := naccvol / vol_len
result
if type == 'On Balance Volume'
result := ta.cum(math.sign(ta.change(_close)) * vol_src)
result
if type == 'Klinger Volume Oscillator'
fastx = I_volfastlen
slowx = I_volslowlen
xtrend = _close > _close ? vol * 100 : -vol * 100
xfast = ta.ema(xtrend, fastx)
xslow = ta.ema(xtrend, slowx)
result := xfast - xslow
result
if type == 'Cumulative Volume Oscillator'
result := f_volcalc(vol_src, _open, _high, _low, _close)
result
if type == 'Volume Zone Oscillator'
result := f_volzosc(vol_src, _close)
result
result
//Kijun V2 Function
f_kjv2(src, len) =>
var float result = 0.0
kijun = math.avg(ta.lowest(len), ta.highest(len))
conversionLine = math.avg(ta.lowest(len / i_kjdivider), ta.highest(len / i_kjdivider))
delta = (kijun + conversionLine) / 2
result := delta
result
//◀─── Relative Volume Strength Index calculation ───►
tksignal = f_volosc(I_volosctypetk, vol, I_rvolumelen, haopen, high, low, haclose)
kjsignal = f_volosc(I_volosctypekj, vol, I_rvolumelen, haopen, high, low, haclose)
sksignal = f_volosc(I_volosctypesk, vol, I_rvolumelen, haopen, high, low, haclose)
chsignal = f_volosc(I_volosctypech, vol, I_rvolumelen, haopen, high, low, haclose)
sumsignal = f_volosc(I_volosctype, vol, I_rvolumelen, haopen, high, low, haclose)
//◀─── Volume Breakout Calculation ───►
tkbrvoldn = tksignal < I_volpeak
tkbrvolup = tksignal > I_volpeak
kjbrvoldn = kjsignal < I_volpeak
kjbrvolup = kjsignal > I_volpeak
skbrvoldn = sksignal < I_volpeak
skbrvolup = sksignal > I_volpeak
chbrvoldn = chsignal < I_volpeak
chbrvolup = chsignal > I_volpeak
//Conditions
signalbrvoldn = sumsignal < I_volpeak
signalbrvolup = sumsignal > I_volpeak
//◀─── Volatility Strength ───►
atrvolmeter = ta.atr(i_atrfastlen) > ta.atr(i_atrslowlen)
//Adaptive Chikou Function
f_chikou(float src, simple int len, float _high, float _low, color bull_col, color bear_col, color r_col) =>
var isup = bool(na)
var isdown = bool(na)
var _re = bool(na)
var sig = int(na)
var color _clr = color.new(na, 0)
isup := src > ta.highest(_high, len)
isdown := src < ta.lowest(_low, len)
_re := src < ta.highest(_high, len) and src > ta.lowest(_low, len)
_clr := isdown ? bear_col : isup ? bull_col : r_col
sig := isup ? 1 : isdown ? -1 : 0
= f_chikou(altsrcres, i_chfiltper, high, low, i_chbullcol, i_chbearcol, i_chconsocol)
//Arrays Index Functions
f_boolean(chka, reference_a) =>
var result_bool = bool(na)
for i = 0 to array.size(chka) -1
if array.get(chka, i) == true
result_bool := array.get(reference_a, i)
break
for i = 0 to array.size(chka) -1
result_bool := array.get(chka, i) ? array.get(reference_a, i) and result_bool : result_bool
result_bool
//Boolean Calculation
bool tkarray = array.from(i_tkvolsetup,
i_tkatrsetup,
i_tkchfilter)
bool kjarray = array.from(i_kjvolsetup,
i_kjatrsetup,
i_kjchfilter)
bool skarray = array.from(I_skvolsetup,
I_atrsetup,
I_skchfilter)
bool charray = array.from(i_chvolsetup,
i_chatrsetup,
i_chtfilter)
bool tkvolarray = array.from(tkbrvolup,
atrvolmeter,
chikoufiltersig == 1)
bool kjvolarray = array.from(kjbrvolup,
atrvolmeter,
chikoufiltersig == 1)
bool skvolarray = array.from(skbrvolup,
atrvolmeter,
chikoufiltersig == 1)
bool chvolarray = array.from(chbrvolup,
atrvolmeter,
chikoufiltersig == 1)
//Boolean to Conditions
booltkup = f_boolean(tkarray, tkvolarray)
boolkjup = f_boolean(kjarray, kjvolarray)
boolchup = f_boolean(charray, chvolarray)
boolskup = f_boolean(skarray, skvolarray)
//Dynamic Length Function
f_dyn(bool para, float adapt_Pct, simple int minLength, simple int maxLength) =>
var dyna_len = int(na)
var float i_len = math.avg(minLength, maxLength)
i_len := para ? math.max(minLength, i_len * adapt_Pct) : math.min(maxLength, i_len * (2-adapt_Pct))
dyna_len := int(i_len)
dyna_len
//Dynamic Length Conditions
dyntk = f_dyn(booltkup, i_tkdynperc, i_tkminlen, i_tkmaxlen)
dynkj = f_dyn(boolkjup , i_kjdynperc, i_kjminlen, i_kjmaxlen)
dynsk = f_dyn(boolskup , I_skperc, I_skminlen, I_skmaxlen)
dynch = f_dyn(boolchup , i_chdynperc, i_chminlen, i_chmaxlen)
//◀─── Index Calculation ───►
tenkansen = f_kjv2(altsrcres, dyntk)
kijunsen = f_kjv2(altsrcres, dynkj)
senkoua = math.avg(tenkansen, kijunsen)
senkoub = math.avg(ta.highest(high, dynsk), ta.lowest(low, dynsk))
chikouspan = altsrcres
//Tenkan-Sen/kijun-Sen Boolean Conditions to Float
var float tkbool = na
if tenkansen
tkbool := tenkansen
tkbool
var float kjbool = na
if kijunsen
kjbool := kijunsen
kjbool
//◀─── Dynamic Type Calculation ───►
bearmomentum = ta.mom(altsrcres, dynch - 1) < 0
bullmomentum = ta.mom(altsrcres, dynch - 1) > 0
cloudhigh = math.max(senkoua , senkoub )
cloudlow = math.min(senkoua , senkoub )
pbk = altsrcres < cloudhigh
pak = altsrcres > cloudhigh
//Boolean Arrays Variables
bool indexarray = array.from(I_volsetup,
I_atrvolatility,
I_tkkjcross,
I_chmom,
I_chgtp,
I_pgtk,
I_pgttk,
I_pgtchf)
bool downvolumearray = array.from(signalbrvoldn,
atrvolmeter,
tenkansen < kijunsen,
bearmomentum,
chikouspan < altsrcres ,
pbk,
altsrcres < tenkansen,
chikoufiltersig == -1)
bool uppervolumearray = array.from(signalbrvolup,
atrvolmeter,
tenkansen > kijunsen,
bullmomentum,
chikouspan > altsrcres ,
pak,
tenkansen,
chikoufiltersig == 1)
//Conditions Calculation
bearfilterdn = f_boolean(indexarray, downvolumearray)
bullfilterup = f_boolean(indexarray, uppervolumearray)
bearcondition = I_tkeqkj ? tenkansen == kijunsen and tenkansen > kijunsen or bearfilterdn : bearfilterdn
bullcondition = I_tkeqkj ? tenkansen == kijunsen and tenkansen < kijunsen or bullfilterup : bullfilterup
isdown = bearcondition
isup = bullcondition
//Conditions
sell = isdown and not isdown
buy = isup and not isup
//Sig Calculation
var sig = 0
if sell and sig >= 0
sig := -1
if buy and sig <= 0
sig := 1
//Sig Conditions
shortcr = sig == -1 and sig != -1
longcr = sig == 1 and sig != 1
//Boolean Conditions to Float
var float ichibearprice = na
if shortcr
ichibearprice := bar_index
ichibearprice
var float ichibullprice = na
if longcr
ichibullprice := bar_index
ichibullprice
//Labels Calculation
if i_showlabels
l = ta.change(ichibearprice) ? label.new(bar_index, ichibearprice + 0.01, str.tostring(math.round_to_mintick(high)), color=color.new(color.black, 0), textcolor=color.new(color.white, 0), style=label.style_label_down, yloc=yloc.abovebar, size=size.small) : ta.change(ichibullprice) ? label.new(bar_index, ichibullprice - 0.01, str.tostring(math.round_to_mintick(low)), color=color.new(color.black, 0), textcolor=color.new(color.white, 0), style=label.style_label_up, yloc=yloc.belowbar, size=size.small) : na
l
//Volatility Coordination Constant Variable
atrxy = 0.85 * ta.atr(5)
//◀─── Plotting ───►
plotshape(i_showlabels and shortcr ? (high) + atrxy : na, style=shape.triangledown, color=i_rescol, location=location.absolute, size=size.small)
plotshape(i_showlabels and longcr ? (low) - atrxy : na, style=shape.triangleup, color=i_supcol, location=location.absolute, size=size.small)
plotshape(i_showlabels and sell ? high + atrxy : na, style=shape.circle, color=i_rescol, location=location.absolute, size=size.tiny)
plotshape(i_showlabels and buy ? low - atrxy : na, style=shape.circle, color=i_supcol, location=location.absolute, size=size.tiny)
plotchikouspan = plot(chikouspan, title='Chikou', color=not i_showchikou ? na : chikou_clr, linewidth=1, offset=-dynch)
f_colorgradient(_source, _min, _max, _cbear, _cbull) =>
var float _center = _min + (_max - _min) / 2
color _return = _source >= _center ?
color.from_gradient(_source, _min, _center, color.new(_cbear, 0), color.new(_cbear, 100)) :
color.from_gradient(_source, _center, _max, color.new(_cbull, 100), color.new(_cbull, 0))
skclr = (senkoua - senkoub) / altsrcres * 100
skfill = senkoua > senkoub ? color.from_gradient(ta.rsi(math.avg(senkoua , senkoub), 14) , 0, 100, I_skconso, I_skbull) :
senkoua < senkoub ? color.from_gradient(ta.rsi(math.avg(senkoua , senkoub), 14) , 0, 100, I_skconso, I_skbear) : I_skconso
plottenkansen = plot(tenkansen, title='Tenkan-Sen', color=not i_showtenkan ? na : i_tenkancolor, linewidth=1, offset=0)
plotkijunsen = plot(kijunsen, title='Kijun-Sen', color=not i_showkijun ? na : i_kijuncolor, linewidth=1, offset=0)
plotsenkoua = plot(senkoua, title='Senkou-Span A', color=not I_ska ? na : I_skbull, linewidth=1, offset=I_skoffset-1)
plotsenkoub = plot(senkoub, title='Senkou-Span B', color=not I_skb ? na : I_skbear, linewidth=1, offset=I_skoffset-1)
fill(plotsenkoua, plotsenkoub, color=not I_kumofill ? na : color.new(skfill, I_kumofillt))
//Tenkan-Sen/kijun-Sen Price Plotting
if i_showtenkan and i_showprice
l1 = label.new(bar_index, tkbool, 'Tenkan-Sen - ' + str.tostring(math.round_to_mintick(tkbool)), color=color.new(i_tenkancolor, 100), textcolor=color.new(i_tenkancolor, 0), style=label.style_label_left, yloc=yloc.price, size=size.small)
l1
label.delete(l1 )
if i_showkijun and i_showprice
l1 = label.new(bar_index, kjbool, 'Kijun-Sen - ' + str.tostring(math.round_to_mintick(kjbool)), color=color.new(i_kijuncolor, 100), textcolor=color.new(i_kijuncolor, 0), style=label.style_label_left, yloc=yloc.price, size=size.small)
l1
label.delete(l1 )
//Bar Color Plotting
colbar(src, tenkansen, kijunsen) =>
vbarcolor = color.new(na, 0)
vbarcolor := src > tenkansen and src > kijunsen? i_bullbarcol :
src < tenkansen and src < kijunsen ? i_bearbarcol :
src > tenkansen and src < kijunsen ? i_consobarcol :
src < tenkansen and src > kijunsen ? i_neutralbarcol : na
vbarcolor
bc = colbar(close, tenkansen, kijunsen)
barcolor(i_showbc ? bc : na)
//◀─── Kijun-Sen Hidden Supports/Resistances ───►
//Smoothed MA Calculation
smma1 = 0.0
smma2 = 0.0
smakj1 = ta.sma(close, i_kjminlen)
smakj2 = ta.sma(close, i_kjmaxlen)
smma1 := na(smma1 ) ? smakj1 : (smma1 * (20 - 1) + close) / 20
smma2 := na(smma2 ) ? smakj2 : (smma2 * (60 - 1) + close) / 60
//Kijun-Sen Calculation
kjsmma = math.avg(ta.lowest(26), ta.highest(26))
//Conditions
hiddenbearkj = ta.crossunder(smma1, kjsmma) and kjsmma < smma2 and close < smma1
hiddenbullkj = ta.crossover(smma1, kjsmma) and kjsmma > smma2 and close > smma1
//Boolean Conditions to Float
var float bearhkj = na
if hiddenbearkj
bearhkj := high
bearhkj
var float bullhkj = na
if hiddenbullkj
bullhkj := low
bullhkj
//Labels Calculation
if i_showkjhlabels
l = ta.change(bearhkj) ? label.new(bar_index, bearhkj + 0.01, str.tostring(math.round_to_mintick(bearhkj)), color=color.new(color.black, 0), textcolor=color.new(color.white, 0), style=label.style_label_down, yloc=yloc.abovebar, size=size.small) : ta.change(bullhkj) ? label.new(bar_index, bullhkj - 0.01, str.tostring(math.round_to_mintick(bullhkj)), color=color.new(color.black, 0), textcolor=color.new(color.white, 0), style=label.style_label_up, yloc=yloc.belowbar, size=size.small) : na
l
//Plotting
plotshape(i_showkjhlabels ? hiddenbearkj : na, title='Bearish Hidden Kijun-Sen', style=shape.triangledown, location=location.abovebar, color=i_rescol, size=size.tiny)
plotshape(i_showkjhlabels ? hiddenbullkj : na, title='Bullish Hidden Kijun-Sen', style=shape.triangleup, location=location.belowbar, color=i_supcol, size=size.tiny)
//Hidden Kijun S/R Variables Declaration
var int numberofline2 = i_maxline
var float upperphzone2 = na
var float upperplzone2 = na
var float lowerphzone2 = na
var float lowerplzone2 = na
var line upperphzonearr2 = array.new_line(0, na)
var line upperplzonearr2 = array.new_line(0, na)
var line lowerphzonearr2 = array.new_line(0, na)
var line lowerplzonearr2 = array.new_line(0, na)
var line upperphzoneline2 = na
var line upperplzoneline2 = na
var line lowerphzoneline2 = na
var line lowerplzoneline2 = na
var bool upperzonetestedarr2 = array.new_bool(0, false)
var bool lowerzonetestedarr2 = array.new_bool(0, false)
var bool upperzonetested2 = false
var bool lowerzonetested2 = false
var bool nobool2 = true
var color upperzonecolor2 = color.red
var color lowerzonecolor2 = color.green
var label labelpharr2 = array.new_label(0, na)
var label labelplarr2 = array.new_label(0, na)
var label labelph2 = na
var label labelpl2 = na
//Hidden Kijun Resistances Calculation
if i_showsr and i_showkjhsr and hiddenbearkj
upperphzone2 := high_
upperplzone2 := close_ < open_ ? close_ : open_
upperplzoneline2 := i_layout == 'Zone' ? line.new(bar_index_, upperplzone2, bar_index, upperplzone2, width=i_linewidth) : na
upperphzoneline2 := nobool2 ? line.new(bar_index_, upperphzone2, bar_index, upperphzone2, width=i_linewidth) : line.new(bar_index_, (upperphzone2 + upperplzone2) / 2, bar_index, (upperphzone2 + upperplzone2) / 2, width=i_linewidth)
labelph2 := i_showsr ? label.new(bar_index_, nobool2 ? upperphzone2 : (upperphzone2 + upperplzone2) / 2, text=str.tostring(bar_index - bar_index_), textcolor=upperzonecolor2, style=label.style_none) : na
if array.size(upperphzonearr2) > numberofline2
line.delete(array.shift(upperphzonearr2))
line.delete(array.shift(upperplzonearr2))
array.shift(upperzonetestedarr2)
label.delete(array.shift(labelpharr2))
array.push(upperphzonearr2, upperphzoneline2)
array.push(upperplzonearr2, upperplzoneline2)
array.push(upperzonetestedarr2, i_extend ? true : false)
array.push(labelpharr2, labelph2)
if array.size(upperplzonearr2) > 0
for i = 0 to array.size(upperplzonearr2) - 1 by 1
line tempupperline2 = array.get(upperphzonearr2, i)
line templowerline2 = array.get(upperplzonearr2, i)
label linepricelabel2 = array.get(labelpharr2, i)
bool tested2 = array.get(upperzonetestedarr2, i)
line.set_style(tempupperline2, f_i_linestyle(i_linestyle))
line.set_style(templowerline2, f_i_linestyle(i_linestyle))
line.set_color(tempupperline2, color.from_gradient(i, 1, numberofline2, fzonecolor(upperzonecolor2, 00), fzonecolor(upperzonecolor2, 00)))
line.set_color(templowerline2, color.from_gradient(i, 1, numberofline2, fzonecolor(upperzonecolor2, 00), fzonecolor(upperzonecolor2, 00)))
label.set_textcolor(linepricelabel2, color.from_gradient(i, 1, numberofline2, fzonecolor(upperzonecolor2, 00), upperzonecolor2))
label.set_text(linepricelabel2, str.tostring(math.round_to_mintick(line.get_y1(tempupperline2))))
label.set_text(linepricelabel2, ' Hidden Kijun Resistance - ' + str.tostring(math.round_to_mintick(line.get_y1(tempupperline2))))
label.set_x(linepricelabel2, bar_index)
crossed = high > line.get_y1(tempupperline2)
if crossed and not tested2
array.set(upperzonetestedarr2, i, true)
label.delete(linepricelabel2)
else if i_extend ? tested2 : not tested2
line.set_x2(tempupperline2, bar_index)
array.set(upperphzonearr2, i, tempupperline2)
line.set_x2(templowerline2, bar_index)
array.set(upperplzonearr2, i, templowerline2)
//Hidden Kijun Supports Calculation
if i_showsr and i_showkjhsr and hiddenbullkj
lowerplzone2 := low_
lowerphzone2 := close_ > open_ ? open_ : close_
lowerphzoneline2 := i_layout == 'Zone' ? line.new(bar_index_, lowerphzone2, bar_index, lowerphzone2, width=i_linewidth) : na
lowerplzoneline2 := nobool2 ? line.new(bar_index_, lowerplzone2, bar_index, lowerplzone2, width=i_linewidth) : line.new(bar_index_, (lowerphzone2 + lowerplzone2) / 2, bar_index, (lowerphzone2 + lowerplzone2) / 2, width=i_linewidth)
labelpl2 := i_showsr ? label.new(bar_index_, nobool2 ? lowerplzone2 : (lowerphzone2 + lowerplzone2) / 2, text=str.tostring(bar_index - bar_index_), textcolor=lowerzonecolor2, style=label.style_none) : na
if array.size(lowerphzonearr2) > numberofline2
line.delete(array.shift(lowerphzonearr2))
line.delete(array.shift(lowerplzonearr2))
array.shift(lowerzonetestedarr2)
label.delete(array.shift(labelplarr2))
array.push(lowerphzonearr2, lowerphzoneline2)
array.push(lowerplzonearr2, lowerplzoneline2)
array.push(lowerzonetestedarr2, i_extend ? true : false)
array.push(labelplarr2, labelpl2)
if array.size(lowerplzonearr2) > 0
for i = 0 to array.size(lowerplzonearr2) - 1 by 1
line tempupperline2 = array.get(lowerphzonearr2, i)
line templowerline2 = array.get(lowerplzonearr2, i)
label linepricelabel2 = array.get(labelplarr2, i)
bool tested2 = array.get(lowerzonetestedarr2, i)
line.set_style(tempupperline2, f_i_linestyle(i_linestyle))
line.set_style(templowerline2, f_i_linestyle(i_linestyle))
line.set_color(tempupperline2, color.from_gradient(i, 1, numberofline2, fzonecolor(lowerzonecolor2, 00), fzonecolor(lowerzonecolor2, 00)))
line.set_color(templowerline2, color.from_gradient(i, 1, numberofline2, fzonecolor(lowerzonecolor2, 00), fzonecolor(lowerzonecolor2, 00)))
label.set_textcolor(linepricelabel2, color.from_gradient(i, 1, numberofline2, fzonecolor(lowerzonecolor2, 00), lowerzonecolor2))
label.set_text(linepricelabel2, str.tostring(math.round_to_mintick(line.get_y1(templowerline2))))
label.set_text(linepricelabel2, ' Hidden Kijun Support - ' + str.tostring(math.round_to_mintick(line.get_y1(templowerline2))))
label.set_x(linepricelabel2, bar_index)
crossed = low < line.get_y1(templowerline2)
if crossed and not tested2
array.set(lowerzonetestedarr2, i, true)
label.delete(linepricelabel2)
else if i_extend ? tested2 : not tested2
line.set_x2(tempupperline2, bar_index)
array.set(lowerphzonearr2, i, tempupperline2)
line.set_x2(templowerline2, bar_index)
array.set(lowerplzonearr2, i, templowerline2)
//◀─── Table Calculation ───►
//Constant Colors Variables
itablestrongbearcol = color.new(color.red, 0)
itablebearcol = color.new(color.maroon, 0)
itableneutralbearcol = color.new(color.silver, 0)
itablestrongbullcol = color.new(color.lime, 0)
itablebullcol = color.new(color.green, 0)
itableneutralbullcol = color.new(color.silver, 0)
itableconsocol = color.new(color.orange, 0)
//Boolean Dynamic Settings To Integer Conditions
var int dyntkint = 0
if dyntk
dyntkint := dyntk
dyntkint
var int dynkjint = 0
if dynkj
dynkjint := dynkj
dynkjint
var int dynskint = 0
if dynsk
dynskint := dynsk
dynskint
var int dynchint = 0
if dynch
dynchint := dynch
dynchint
//Global Functions
donchian(len) =>
math.avg(ta.lowest(len), ta.highest(len))
f_presets(p) =>
if p == 'Custom'
else if p == '9/26/52/26 - 6D Markets (Default)'
else if p == '8/22/44/22 - 5D Markets'
else if p == '9/30/60/30 - 24h/7D Markets (Crypto)'
else if p == '20/60/120/60 - 24h/7D Markets (Slow Version)'
else
f_tablestringpos(p) =>
p == 'Bottom Right' ? position.bottom_right : p == 'Top Right' ? position.top_right : p == 'Bottom Left' ? position.bottom_left : p == 'Top Left' ? position.top_left : p == 'Top' ? position.top_center : p == 'Right' ? position.middle_right : p == 'Bottom' ? position.bottom_center : p == 'Left' ? position.middle_left : na
f_tablestringdirsym(trend) =>
trend == 1 ? '▲ Strong' : trend == 2 ? '▲ Neutral' : trend == 3 ? '▲ Weak' : trend == -1 ? '▼ Strong' : trend == -2 ? '▼ Neutral' : trend == -3 ? '▼ Weak' : '■ Consolidation'
f_tablestringcolor(trend, c_up, c_down, c_consolidation) =>
trend > 0 ? c_up : trend < 0 ? c_down : c_consolidation
f_tablestringcolordir(trend, c_up, c_down) =>
trend > 0 ? c_up : c_down
f_tablecloudtrend(l1, l2) =>
l1 > l2 ? 1 : -1
f_tabletrendsum(sum, count) =>
sum == count ? 1 : sum == -count ? -1 : 0
f_tablestrengthconditions(pos, uptrend) =>
uptrend ? pos == 1 ? 1 : pos == 0 ? 2 : 3 : pos == -1 ? -1 : pos == 0 ? -2 : -3
//Presets Calculation
= f_presets(i_tablepresets)
//Presets Conditions
i_conversion = donchian(i_conversion_len)
i_base = donchian(i_base_len)
i_lead1 = math.avg(i_conversion, i_base)
i_lead2 = donchian(i_lagging_len)
i_cloud_top2 = math.max(i_lead1, i_lead2)
i_cloud_bot2 = math.min(i_lead1, i_lead2)
//Constant Array Variable
tablearrindex = array.new_int(0)
//Signals Conditions Function
f_tableconditions(enabled, signal) =>
if enabled
array.push(tablearrindex, signal)
//Calculation
i_lead1_current = i_lead1
i_lead2_current = i_lead2
i_cloud_top = math.max(i_lead1_current, i_lead2_current)
i_cloud_bot = math.min(i_lead1_current, i_lead2_current)
table_base_position = i_base > i_cloud_top ? 1 : i_base < i_cloud_bot ? -1 : 0
table_base_breakout = close > i_base ? f_tablestrengthconditions(table_base_position, true) : f_tablestrengthconditions(table_base_position, false)
table_cloud2_trend = f_tablecloudtrend(i_conversion, i_base)
table_cloud2_top = math.max(i_base, i_conversion)
table_cloud2_bot = math.min(i_base, i_conversion)
table_cloud2_position = table_cloud2_bot > i_cloud_top ? 1 : table_cloud2_top < i_cloud_bot ? -1 : 0
table_cloud2_cross = table_cloud2_trend == 1 ? f_tablestrengthconditions(table_cloud2_position, true) : f_tablestrengthconditions(table_cloud2_position, false)
table_lagging_lead1 = i_lead1_current
table_lagging_lead2 = i_lead2_current
table_lagging_cloud_top = math.max(table_lagging_lead1, table_lagging_lead2)
table_lagging_cloud_bot = math.min(table_lagging_lead1, table_lagging_lead2)
table_lagging_high = high
table_lagging_low = low
table_lagging_trend = close > table_lagging_high ? 1 : close < table_lagging_low ? -1 : 0
table_lagging_position = close > i_cloud_top ? 1 : close < i_cloud_bot ? -1 : 0
table_lagging_cross = table_lagging_trend == 1 ? f_tablestrengthconditions(table_lagging_position, true) : table_lagging_trend == -1 ? f_tablestrengthconditions(table_lagging_position, false) : 0
table_cloud_breakout = close > i_cloud_top ? 1 : close < i_cloud_bot ? -1 : 0
table_cloud_trend = f_tablecloudtrend(i_lead1, i_lead2)
table_lead_cross = table_cloud_trend == 1 ? f_tablestrengthconditions(table_cloud_breakout, true) : f_tablestrengthconditions(table_cloud_breakout, false)
//Conditions Functions
f_tableconditions(i_tablekjpc, table_base_breakout)
f_tableconditions(i_tabletkpc, table_cloud2_cross)
f_tableconditions(i_tablechpc, table_lagging_cross)
f_tableconditions(i_tablekumobr, table_cloud_breakout)
f_tableconditions(i_tablekumotw, table_lead_cross)
//Conditions
table_signal_max = array.max(tablearrindex)
table_signal_min = array.min(tablearrindex)
table_signal = table_signal_min > 0 ? table_signal_max : table_signal_max < 0 ? table_signal_min : 0
table_changed = table_signal != table_signal
table_downtrend = table_changed and table_signal == -1
table_uptrend = table_changed and table_signal == 1
table_consolidation = table_changed and table_signal == 0
table_consolidation_downtrend = table_consolidation and table_signal == -1
table_consolidation_uptrend = table_consolidation and table_signal == 1
//Colors String Function
f_tablecolors(t) =>
t == 1 ? itablestrongbullcol : t == 2 ? itableneutralbullcol : t == 3 ? itablebullcol : t == -1 ? itablestrongbearcol : t == -2 ? itableneutralbearcol : t == -3 ? itablebearcol : itableconsocol
//String to Variable
i_panel_c_signal_text = f_tablecolors(table_signal)
//Table Text Size String Function
tabletxtwi = i_tabletxtsize == 'Tiny' ? size.tiny : i_tabletxtsize == 'Small' ? size.small : i_tabletxtsize == 'Normal' ? size.normal : i_tabletxtsize == 'Large' ? size.large : size.normal
//Plotting
var table i_panel = na
insertRow(i, text_1, trend, col) =>
table.cell(i_panel, 0, i, text_1, text_color=col, text_halign=text.align_right, text_size=tabletxtwi)
table.cell(i_panel, 1, i, f_tablestringdirsym(trend), text_color=f_tablecolors(trend), text_halign=text.align_left, text_size=tabletxtwi)
i + 1
if i_showtable and array.size(tablearrindex) > 0
i_panel := table.new(position=f_tablestringpos(i_tableloc), columns=2, rows=20, bgcolor=i_tablebgcol, border_width=0)
i = 0
if i_tabletkpc
i := insertRow(i, 'Tenkan-Sen Price Cross', table_cloud2_cross, i_tabletxtcol)
i
if i_tablekjpc
i := insertRow(i, 'Kijun-Sen Price Cross', table_base_breakout, i_tabletxtcol)
i
if i_tablechpc
i := insertRow(i, 'Chikou Span Price Cross', table_lagging_cross, i_tabletxtcol)
i
if i_tablekumobr
i := insertRow(i, 'Kumo Breakout', table_cloud_breakout, i_tabletxtcol)
i
if i_tablekumotw
i := insertRow(i, 'Kumo Twist', table_lead_cross, i_tabletxtcol)
i
table.cell(i_panel, 0, i, 'Status', bgcolor=i_tablebgcol, text_color=i_panel_c_signal_text, text_halign=text.align_right, text_size=tabletxtwi)
table.cell(i_panel, 1, i, f_tablestringdirsym(table_signal), bgcolor=i_tablebgcol, text_color=i_panel_c_signal_text, text_halign=text.align_left, text_size=tabletxtwi)
//◀─── Support/Resistance Lines Variables Declaration ───►
var int numberofline = i_maxline
var float upperphzone = na
var float upperplzone = na
var float lowerphzone = na
var float lowerplzone = na
var line upperphzonearr = array.new_line(0, na)
var line upperplzonearr = array.new_line(0, na)
var line lowerphzonearr = array.new_line(0, na)
var line lowerplzonearr = array.new_line(0, na)
var line upperphzoneline = na
var line upperplzoneline = na
var line lowerphzoneline = na
var line lowerplzoneline = na
var bool upperzonetestedarr = array.new_bool(0, false)
var bool lowerzonetestedarr = array.new_bool(0, false)
var bool upperzonetested = false
var bool lowerzonetested = false
var bool nobool = true
var bool showprice = true
var color upperzonecolor = i_rescol
var color lowerzonecolor = i_supcol
var label labelpharr = array.new_label(0, na)
var label labelplarr = array.new_label(0, na)
var label labelph = na
var label labelpl = na
//Resistance Lines Calculation
if i_showsr and shortcr
upperphzone := high_
upperplzone := close_ < open_ ? close_ : open_
upperplzoneline := i_layout == 'Zone' ? line.new(bar_index_, upperplzone, bar_index, upperplzone, width=i_linewidth) : na
upperphzoneline := nobool ? line.new(bar_index_, upperphzone, bar_index, upperphzone, width=i_linewidth) : line.new(bar_index_, (upperphzone + upperplzone) / 2, bar_index, (upperphzone + upperplzone) / 2, width=i_linewidth)
labelph := showprice ? label.new(bar_index_, nobool ? upperphzone : (upperphzone + upperplzone) / 2, text=str.tostring(math.round_to_mintick(bar_index - bar_index_)), textcolor=upperzonecolor, style=label.style_none) : na
if array.size(upperphzonearr) > numberofline
line.delete(array.shift(upperphzonearr))
line.delete(array.shift(upperplzonearr))
array.shift(upperzonetestedarr)
label.delete(array.shift(labelpharr))
array.push(upperphzonearr, upperphzoneline)
array.push(upperplzonearr, upperplzoneline)
array.push(upperzonetestedarr, i_extend ? true : false)
array.push(labelpharr, labelph)
if array.size(upperplzonearr) > 0
for i = 0 to array.size(upperplzonearr) - 1 by 1
line tempupperline = array.get(upperphzonearr, i)
line templowerline = array.get(upperplzonearr, i)
label linepricelabel = array.get(labelpharr, i)
bool tested = array.get(upperzonetestedarr, i)
line.set_style(tempupperline, f_i_linestyle(i_linestyle))
line.set_style(templowerline, f_i_linestyle(i_linestyle))
line.set_color(tempupperline, color.from_gradient(i, 1, numberofline, fzonecolor(upperzonecolor, 00), fzonecolor(upperzonecolor, 00)))
line.set_color(templowerline, color.from_gradient(i, 1, numberofline, fzonecolor(upperzonecolor, 00), fzonecolor(upperzonecolor, 00)))
label.set_textcolor(linepricelabel, color.from_gradient(i, 1, numberofline, fzonecolor(upperzonecolor, 00), upperzonecolor))
label.set_text(linepricelabel, str.tostring(math.round_to_mintick(line.get_y1(tempupperline))))
label.set_text(linepricelabel, ' Resistance - ' + str.tostring(math.round_to_mintick(line.get_y1(tempupperline))))
label.set_x(linepricelabel, bar_index)
crossed = high > line.get_y1(tempupperline)
if crossed and not tested
array.set(upperzonetestedarr, i, true)
label.delete(linepricelabel)
else if i_extend ? tested : not tested
line.set_x2(tempupperline, bar_index)
array.set(upperphzonearr, i, tempupperline)
line.set_x2(templowerline, bar_index)
array.set(upperplzonearr, i, templowerline)
//Support Lines Calculation
if i_showsr and longcr
lowerplzone := low_
lowerphzone := close_ > open_ ? open_ : close_
lowerphzoneline := i_layout == 'Zone' ? line.new(bar_index_, lowerphzone, bar_index, lowerphzone, width=i_linewidth) : na
lowerplzoneline := nobool ? line.new(bar_index_, lowerplzone, bar_index, lowerplzone, width=i_linewidth) : line.new(bar_index_, (lowerphzone + lowerplzone) / 2, bar_index, (lowerphzone + lowerplzone) / 2, width=i_linewidth)
labelpl := showprice ? label.new(bar_index_, nobool ? lowerplzone : (lowerphzone + lowerplzone) / 2, text=str.tostring(math.round_to_mintick(bar_index - bar_index_)), textcolor=lowerzonecolor, style=label.style_none) : na
if array.size(lowerphzonearr) > numberofline
line.delete(array.shift(lowerphzonearr))
line.delete(array.shift(lowerplzonearr))
array.shift(lowerzonetestedarr)
label.delete(array.shift(labelplarr))
array.push(lowerphzonearr, lowerphzoneline)
array.push(lowerplzonearr, lowerplzoneline)
array.push(lowerzonetestedarr, i_extend ? true : false)
array.push(labelplarr, labelpl)
if array.size(lowerplzonearr) > 0
for i = 0 to array.size(lowerplzonearr) - 1 by 1
line tempupperline = array.get(lowerphzonearr, i)
line templowerline = array.get(lowerplzonearr, i)
label linepricelabel = array.get(labelplarr, i)
bool tested = array.get(lowerzonetestedarr, i)
line.set_style(tempupperline, f_i_linestyle(i_linestyle))
line.set_style(templowerline, f_i_linestyle(i_linestyle))
line.set_color(tempupperline, color.from_gradient(i, 1, numberofline, fzonecolor(lowerzonecolor, 00), fzonecolor(lowerzonecolor, 00)))
line.set_color(templowerline, color.from_gradient(i, 1, numberofline, fzonecolor(lowerzonecolor, 00), fzonecolor(lowerzonecolor, 00)))
label.set_textcolor(linepricelabel, color.from_gradient(i, 1, numberofline, fzonecolor(lowerzonecolor, 00), lowerzonecolor))
label.set_text(linepricelabel, str.tostring(math.round_to_mintick(line.get_y1(templowerline))))
label.set_text(linepricelabel, ' Support - ' + str.tostring(math.round_to_mintick(line.get_y1(templowerline))))
label.set_x(linepricelabel, bar_index)
crossed = low < line.get_y1(templowerline)
if crossed and not tested
array.set(lowerzonetestedarr, i, true)
label.delete(linepricelabel)
else if i_extend ? tested : not tested
line.set_x2(tempupperline, bar_index)
array.set(lowerphzonearr, i, tempupperline)
line.set_x2(templowerline, bar_index)
array.set(lowerplzonearr, i, templowerline)
//◀─── Psychological Levels ───►
//Constant Variable
var incr = syminfo.type == 'cfd' ? syminfo.mintick * 5000 : syminfo.type == 'crypto' ? syminfo.mintick * 5000 : syminfo.mintick * 500
//Calculation
if i_psylevels and barstate.islast
for counter = 0 to i_linescounter - 1 by 1
incrup = math.ceil(close / incr) * incr + counter * incr
incrdown = math.floor(close / incr) * incr - counter * incr
//Plotting
line.new(bar_index, incrup, bar_index - 1, incrup, xloc=xloc.bar_index, extend=extend.both, color=i_psylinescol, width=1, style=line.style_solid)
line.new(bar_index, incrdown, bar_index - 1, incrdown, xloc=xloc.bar_index, extend=extend.both, color=i_psylinescol, width=1, style=line.style_solid)
//◀─── Alerts ───►
if sell ? high + atrxy : na
alert('Sell Condition! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(sell ? high + atrxy : na, 'Sell Condition!', 'Sell Condition!')
if buy ? low - atrxy : na
alert('Buy Condition! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(buy ? low - atrxy : na, 'Buy Condition!', 'Buy Condition!')
if shortcr ? (high) + atrxy : na
alert('Sell Continuity/Reversal! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(shortcr ? (high) + atrxy : na, 'Sell Continuity/Reversal!', 'Sell Continuity/Reversal!')
if longcr ? (low) - atrxy : na
alert('Buy Continuity/Reversal! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(longcr ? (high) + atrxy : na, 'Buy Continuity/Reversal!', 'Buy Continuity/Reversal!')
if i_showtable and table_downtrend
alert('Panel : Bearish Trend! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(i_showtable and table_downtrend, 'Panel : Bearish Trend!', 'Panel : Bearish Trend!')
if i_showtable and table_uptrend
alert('Panel : Bullish Trend! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(i_showtable and table_uptrend, 'Panel : Bullish Trend!', 'Panel : Bullish Trend!')
if i_showtable and table_consolidation
alert('Panel : Trend Consolidation! At ' + str.tostring(math.round_to_mintick(close)), alert.freq_once_per_bar)
alertcondition(i_showtable and table_consolidation, 'Panel : Trend Consolidation!', 'Panel : Trend Consolidation!')
S/R + FVG + 3EMA + Consolidation IndicatorApex Trader Toolkit: S/R, FVG, EMAs & Consolidation
I used AI and combined 4 of my favorite trading view indicators: 3 EMA's, Consolidation detectors, FVG sessions and automatic support and resistant bands and i made it into one super indicator, the result is amazing. I will be updating this script with more powerful indicators in the future.
TRY THIS OUT AND SHARE IDEAS AND FEEDBACK IN COMMENTS.
This comprehensive indicator brings together essential trading tools into a single, customizable view, empowering you to make informed decisions with ease. The Apex Trader Toolkit combines Support and Resistance levels, Session Fair Value Gaps (FVG), Exponential Moving Averages (EMAs), and Consolidation Zone detection. Each component can be independently toggled on or off to suit your specific trading style and chart preferences.
Key Features:
Support and Resistance Levels:
Identifies potential areas of price reversals using pivot points.
Adjustable lookback periods for fine-tuning sensitivity.
Visual cues adapt dynamically based on price action (color-coded for above/below price).
Option to use close price or high/low for pivot calculations.
"Quick" S/R levels for shorter-term analysis.
Fair Value Gaps (FVG) with Session Ranges:
Highlights imbalances in price action, indicating potential future price movement.
Bullish and bearish FVG detection.
Automatic mitigation tracking.
Daily session range markers (high and low).
3-EMA Ribbon:
Plots three customizable Exponential Moving Averages (EMAs) to visualize trend direction and potential dynamic support/resistance.
Adjustable EMA lengths.
Consolidation Zone Detection:
Identifies periods of sideways price action, highlighting potential breakout or continuation opportunities.
Adjustable minimum zone length and ATR-based range calculation.
Option to limit the historical display of consolidation zones for clarity.
Customization:
Each feature of the Apex Trader Toolkit is fully customizable, allowing you to:
Enable or disable individual components via global toggle switches.
Adjust lookback periods, color schemes, and other parameters.
Tailor the indicator to your specific trading strategy and market conditions.
How to Use:
The Apex Trader Toolkit provides a multifaceted approach to market analysis. Use it to:
Identify potential entry and exit points based on Support and Resistance levels.
Anticipate future price movement using Fair Value Gap detection.
Determine trend direction and dynamic support/resistance with the 3-EMA ribbon.
Spot potential breakout opportunities with Consolidation Zone highlighting.
Disclaimer:
This indicator is for informational and educational purposes only. Trading involves risk, and past performance is not indicative of future results. Always conduct thorough research and consult with a qualified financial advisor before making any investment decisions.
EMA 200 with AlertsЭтот индикатор рассчитывает и отображает экспоненциальную скользящую среднюю (EMA) с периодом 200. Он предназначен для выявления долгосрочных трендов и используется в различных стратегиях технического анализа.
Дополнительно индикатор содержит систему уведомлений, которая отправляет сигнал при первом закреплении цены выше EMA 200 после нисходящего тренда.
Функции и особенности:
• EMA 200 — рассчитывается автоматически и отображается в виде чёрной линии на графике.
• Алерт при закреплении выше EMA 200 — уведомление срабатывает один раз, когда цена впервые закрывается выше EMA 200 после нахождения ниже неё.
• Фильтрация повторных сигналов — если цена остаётся выше EMA 200, уведомления не приходят, чтобы избежать спама.
• Повторный сигнал после разворота — если цена опустится ниже EMA 200, а затем снова закрепится выше, алерт сработает повторно.
• Работает на любом таймфрейме — индикатор автоматически адаптируется к выбранному пользователем ТФ.
Как использовать:
1 Добавьте индикатор на график.
2 Настройте таймфрейм, на котором хотите отслеживать сигналы.
3 Создайте алерт с условием "Закрепление выше EMA 200" и выберите "На закрытии бара".
4 Получайте уведомление только тогда, когда цена закрепляется выше EMA 200 после нисходящего тренда.
Применение:
• Используется в стратегиях следования за трендом.
• Позволяет определять переход цены в фазу восходящего тренда.
• Подходит для внутридневной и среднесрочной торговли.
Этот индикатор упрощает процесс выявления долгосрочного тренда и помогает избежать лишних сигналов, концентрируясь только на значимых разворотах цены.
Ultimate Scalping Strategy - Enhanced VisualsUltra-Clean Scalping Strategy + Enhanced RSI Box
This is a high-performance scalping strategy designed for 1-minute to 5-minute charts, with a focus on maximizing profitability and reducing false signals. It combines a series of advanced technical indicators to provide clean, actionable buy and sell signals for quick and efficient trading.
Key Features:
EMA Setup (Fast, Medium, Slow): Utilizes multiple EMAs to track the trend and identify optimal entry points.
RSI (Relative Strength Index): Includes an enhanced RSI box that visually displays the current RSI, with color-coding indicating overbought or oversold conditions.
MACD (Moving Average Convergence Divergence): Integrates the MACD for additional trend confirmation and helps filter out weaker signals.
Volume Filter: Filters trades based on volume spikes, ensuring that trades are supported by increased market activity.
Clean and Simple UI: The strategy provides clear buy and sell signals, along with a floating RSI box for quick reference.
Optimized for Scalping: Perfect for quick, short-term trades, maximizing profits while minimizing false signals.
Trade Logic:
Long Signal (Buy): Generated when the fast EMA crosses above the medium EMA, the price is above the slow EMA, RSI is under the overbought level, MACD is bullish, and volume spikes.
Short Signal (Sell): Generated when the fast EMA crosses below the medium EMA, the price is below the slow EMA, RSI is above the oversold level, MACD is bearish, and volume spikes.
Alerts: Set alerts for both buy and sell conditions to never miss a high-probability trade.
hoang tu Trend Indicatorthực nghiệm ngày 7/3/2025
hãy thử kiểm tra mua khi giá trị kiểm tra từ 0 lên 7%, mua tốt nhất quanh giá trị 10%
MACD Support & FTR Signal//@version=5
indicator("MACD Support & FTR Signal", overlay=true)
// تنظیمات مکدی
= ta.macd(close, 12, 26, 9)
// شرط کراس نزولی مکدی
bearishCross = ta.crossover(signalLine, macdLine)
// منطقه اشباع فروش برای هیستوگرام
histOversold = hist < -0.02 // مقدار -0.02 را میتوان تغییر داد
// تعیین سطح حمایت قوی
supportLevel = ta.lowest(low, 50) // کمترین قیمت 50 کندل اخیر
priceSupported = low <= supportLevel * 1.01 // بررسی نزدیکی قیمت به حمایت
// شرط کلی برای سیگنال خرید
buySignal = bearishCross and histOversold and priceSupported
// رسم سیگنال خرید روی چارت
plotshape(buySignal, location=location.belowbar, color=color.green, style=shape.labelup, size=size.small, title="Support Buy")
// شناسایی سطح شکست معتبر
breakoutHigh = ta.highest(high, 50)
breakoutLow = ta.lowest(low, 50)
breakoutOccurred = high > ta.highest(high , 50) or low < ta.lowest(low , 50)
// بررسی اینکه قیمت بعد از شکست برنگشته باشد
priceNotReturned = ta.barssince(high >= breakoutHigh) > 20 or ta.barssince(low <= breakoutLow) > 20
// شرط صدور سیگنال FTR
ftrSignal = breakoutOccurred and priceNotReturned
// رسم سیگنال FTR روی چارت
plotshape(ftrSignal, location=location.abovebar, color=color.yellow, style=shape.labeldown, size=size.small, title="FTR Signal")
// نمایش اطلاعات مکدی
hline(0, "Zero Line", color=color.gray)
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.red, title="Signal Line")
plot(hist, color=color.purple, style=plot.style_histogram, title="Histogram")
Daily High/Low by Enes🔥 Features:
✅ Daily high & low as continuous lines extending to the right
✅ Automatic daily updates
✅ Labels ("Daily High" & "Daily Low") directly on the chart
EMA 10/20/30/50/100/200 - @sozuxIntroducing the EMA Multi Indicator by @sozux – a comprehensive tool that displays the 10, 20, 30, 50, 100, and 200 period Exponential Moving Averages simultaneously. This indicator is designed to help traders quickly visualize both short-term and long-term trends on one chart. Whether you're analyzing potential support and resistance levels or looking to identify trend reversals, this tool provides a clear, consolidated view of market dynamics. Its multi-EMA overlay simplifies decision-making by highlighting key levels that are crucial for effective technical analysis. Enjoy a streamlined, powerful approach to market analysis with the EMA Multi Indicator.
Relative Strength Comparison//@version=5
indicator("Relative Strength Comparison", overlay=false)
// User Inputs
numSymbol = input.symbol("NSE:TCS", "Numerator Symbol") // Numerator security
denSymbol = input.symbol("NSE:INFY", "Denominator Symbol") // Denominator security
// Fetch security prices
numPrice = request.security(numSymbol, timeframe.period, close)
denPrice = request.security(denSymbol, timeframe.period, close)
// Calculate Relative Strength (RS)
relativeStrength = numPrice / denPrice
// Plot Relative Strength Line
plot(relativeStrength, title="Relative Strength Line", color=color.blue, linewidth=2)
Ultimate Scalping Strategy - Enhancedltra-Clean Scalping Strategy + Enhanced RSI Box
This is a high-performance scalping strategy designed for 1-minute to 5-minute charts, with a focus on maximizing profitability and reducing false signals. It combines a series of advanced technical indicators to provide clean, actionable buy and sell signals for quick and efficient trading.
Key Features:
EMA Setup (Fast, Medium, Slow): Utilizes multiple EMAs to track the trend and identify optimal entry points.
RSI (Relative Strength Index): Includes an enhanced RSI box that visually displays the current RSI, with color-coding indicating overbought or oversold conditions.
MACD (Moving Average Convergence Divergence): Integrates the MACD for additional trend confirmation and helps filter out weaker signals.
Volume Filter: Filters trades based on volume spikes, ensuring that trades are supported by increased market activity.
Clean and Simple UI: The strategy provides clear buy and sell signals, along with a floating RSI box for quick reference.
Optimized for Scalping: Perfect for quick, short-term trades, maximizing profits while minimizing false signals.
Trade Logic:
Long Signal (Buy): Generated when the fast EMA crosses above the medium EMA, the price is above the slow EMA, RSI is under the overbought level, MACD is bullish, and volume spikes.
Short Signal (Sell): Generated when the fast EMA crosses below the medium EMA, the price is below the slow EMA, RSI is above the oversold level, MACD is bearish, and volume spikes.
Alerts: Set alerts for both buy and sell conditions to never miss a high-probability trade.
New York Session at 15:30 UTC+1 (Berlin)Verwendungszweck des Indikators:
📌 New York Session Opening:
Die Linie markiert den Beginn der New Yorker Handelssitzung (15:30 Uhr deutscher Zeit).
Diese Uhrzeit ist für Trader wichtig, da hohe Liquidität und Volatilität auftreten.
📌 Markierung eines wichtigen Marktzeitpunkts:
Viele Trader nutzen 15:30 Uhr als Einstiegspunkt oder zur Analyse von Preisbewegungen.
Die vertikale Linie hilft, historische Muster oder Preisreaktionen zum Session-Start zu identifizieren.
📌 Flexibilität und Anpassung:
Nutzer können die Linienfarbe und den Stil (durchgezogen oder gestrichelt) anpassen.
Funktioniert auf allen Timeframes und bleibt als visuelle Orientierung erhalten.