Ichimoku Strict exit indicatorIndicator for ichimoku with exit
entry - when all cond meet
exit on base line
圖表形態
Session Dominator — Asia • London • New York Precision ZonesRule the global market sessions.
Session Dominator is a precision-engineered indicator built for traders who want total clarity across Asia, London, and New York sessions.
It automatically plots:
🔷 Dynamic Session Boxes — visually map institutional killzones in real time
⚙️ Session Mean Line — track equilibrium and liquidity shifts
📊 EMA-50 Confluence — align directional bias and intraday trend
🎯 BSL / SSL Levels — reveal active liquidity sweeps and reversals
💡 Bias Engine — evaluates structure and locks the session bias automatically
Toggle between Asia / London / New York / Overlap / Custom modes to dominate any timezone.
Designed with minimalist visuals, high precision, and ICT-based logic — this tool helps you anticipate where liquidity will be taken before it happens.
✳️ For XAUUSD traders, scalpers, and ICT-style analysts seeking sniper-level clarity.
MOHANRAJ RAMALINGAM SCALPING TODAYin sideways market trading is impossible. that days we shall take practice between index and option candle movement. this strategy help some profits. take practice and take profit
My Smart Volume Profile – Fixed
Title: 🔹 My Smart Volume Profile – Fixed
Description:
Lightweight custom Volume Profile showing POC, VAH, and VAL levels from recent bars. Highlights the value area, marks price touches, and supports optional alerts.
Developer Note:
Created with precision and simplicity by Magnergy
KRX RS OverlayKRX RS Overlay (Manual, Pine v6) (한국어 설명 아래에)
What it does
Plots a Relative Strength (RS) line of the current symbol versus a selected Korean market index on the price chart (overlay). RS is computed as Close(symbol) / Close(benchmark) and rebased to 100 N bars ago for easy comparison. An SMA of RS is included for signal smoothing.
Benchmarks (manual selection only)
• KOSPI (KRX:KOSPI) — default
• KOSDAQ (KRX:KOSDAQ)
• KOSPI200 (KRX:KOSPI200)
• KOSDAQ150 (KRX:KOSDAQ150)
Inputs
• Benchmark: choose one of the four indices above (default: KOSPI)
• Rebase N bars ago to 100: sets the normalization point (e.g., 252 ≈ 1 trading year on daily)
• RS SMA length: smoothing period for the RS line
• Show 100 base line: toggle the reference line at 100
How to read
• RS rising → the symbol is outperforming the selected index.
• RS above RS-SMA and sloping up → strengthening leadership vs. the benchmark.
• RS crossing above RS-SMA → momentum-style confirmation (an alert is provided).
Tips
• Works on any timeframe; the benchmark is requested on the same timeframe.
• If the RS line scale conflicts with price, place the indicator on the Left scale (Chart Settings → Scales) or set the series to use the left axis.
Notes
• This script is manual only (no auto index detection).
• Educational use; not financial advice.
⸻
KRX RS 오버레이 (수동, Pine v6)
기능
현재 종목을 선택한 한국 지수와 비교한 상대강도(RS) 라인을 가격 차트 위(오버레이)에 표시합니다. RS는 종목 종가 / 지수 종가로 계산하며, 비교를 쉽게 하기 위해 N봉 전 = 100으로 리베이스합니다. 신호 완화를 위해 RS의 SMA도 함께 제공합니다.
벤치마크(수동 선택만 지원)
• KOSPI (KRX:KOSPI) — 기본값
• KOSDAQ (KRX:KOSDAQ)
• KOSPI200 (KRX:KOSPI200)
• KOSDAQ150 (KRX:KOSDAQ150)
입력값
• Benchmark: 위 4개 지수 중 선택(기본: KOSPI)
• Rebase N bars ago to 100: 리베이스 기준(일봉 252 ≈ 1년)
• RS SMA length: RS 스무딩 기간
• Show 100 base line: 100 기준선 표시 여부
해석 가이드
• RS 상승 → 선택 지수 대비 초과성과.
• RS가 RS-SMA 위 & 우상향 → 벤치마크 대비 리더십 강화.
• RS가 RS-SMA 상향 돌파 → 모멘텀 확인(알림 제공).
팁
• 모든 타임프레임에서 동작하며, 지수도 동일 타임프레임으로 요청됩니다.
• 가격 축과 스케일이 겹치면 왼쪽 스케일로 표시하도록 설정하세요(차트 설정 → Scales).
유의사항
• 자동 지수 판별 기능은 포함하지 않았습니다(수동 전용).
VCP ScreenerThis screener:
• Detect tight price contraction using ATR
• Check for volume contraction
• Confirm trend strength using moving averages
• Flag stocks near recent resistance
Trading Session Analyzer - Best Trading Hours📊 OVERALL DESIGN & PURPOSE
This indicator identifies optimal trading hours based on:
Market session overlaps (when multiple markets are open)
Volume and volatility conditions
Trend strength (ADX)
Range-bound vs trending market detection
Target Use Case: Intraday traders looking to trade during high-liquidity periods with clear directional moves.
RTH Gap Counter (H4) jjha sajifbas bidfiugqfo sjshasdh ghbdsn xjve , yfv ty ggtht,hfnbcm nelf s vb. , pfyjddj yt [fqykzbcm xtrcjv
Simple Market Structure Highs & Lows🟩 Simple Market Structure Highs & Lows
This indicator identifies basic swing highs and lows based on simple two-candle patterns, giving traders a clean visual view of short-term market structure shifts.
🔹 Logic
A Swing High (H) is marked when an up candle is followed by a down candle.
→ The high of the up candle (the first one) is plotted as a green triangle above the bar.
A Swing Low (L) is marked when a down candle is followed by an up candle.
→ The low of the down candle (the first one) is plotted as a red triangle below the bar.
🔹 Purpose
This tool helps visualize basic market turning points — useful for:
Spotting local tops and bottoms
Analyzing market structure changes
Identifying potential entry/exit zones
Building the foundation for BOS/CHoCH strategies
🔹 Notes
Works on any timeframe or asset.
No repainting — signals appear after the confirming candle closes.
Simple and lightweight — ideal for traders who prefer clean structure visualization.
ab 3 candle setup range This script identifies a 3-candle range breakout pattern. It looks for two consecutive inside candles following a base candle and triggers a buy or sell signal when price breaks the base candle’s high or low, confirming bullish or bearish momentum.
Simple Market Structure Highs & Lows🟩 Simple Market Structure Highs & Lows
This indicator identifies basic swing highs and lows based on simple two-candle patterns, giving traders a clean visual view of short-term market structure shifts.
🔹 Logic
A Swing High (H) is marked when an up candle is followed by a down candle.
→ The high of the up candle (the first one) is plotted as a green triangle above the bar.
A Swing Low (L) is marked when a down candle is followed by an up candle.
→ The low of the down candle (the first one) is plotted as a red triangle below the bar.
🔹 Purpose
This tool helps visualize basic market turning points — useful for:
Spotting local tops and bottoms
Analyzing market structure changes
Identifying potential entry/exit zones
Building the foundation for BOS/CHoCH strategies
🔹 Notes
Works on any timeframe or asset.
No repainting — signals appear after the confirming candle closes.
Simple and lightweight — ideal for traders who prefer clean structure visualization.
Price Movement Alert with Previous Close as ReferenceFunctionality of the Indicator
The "Price Movement Alarm with Previous Day Close as Reference" indicator is a tool that helps you monitor significant price levels based on the previous day's closing price. The indicator calculates both decline and rise thresholds in specified percentages to generate potential trade alerts. The lines on the chart represent these thresholds, and the corresponding labels show the exact percentage.
Usage Instructions:
Previous Day's Close: The indicator uses the previous trading day's close as the reference point.
Setting Decline and Rise Percentages: You can adjust the alarm levels for declines (e.g., 0.5%, 1.0%, 1.5%, 2.0%, 2.5%, 3.0%) and rises (e.g., 0.5%, 1.0%, 1.5%, 2.0%, 2.5%, 3.0%).
Lines and Labels: The indicator draws lines on the chart and displays labels that indicate the percentage of price movement.
Market Analysis: Analyze the price movements to make potential trading decisions.
Market in Equilibrium:
A market is in equilibrium when price movements remain within a narrow range (e.g., 0.5% to 1%). During this phase, volatility is low, and there are no significant price changes.
Market not in Equilibrium:
A market is not in equilibrium when price movements fall outside the narrow range (e.g., above 1%). During this phase, larger price movements can occur, often triggered by news or economic events.
TLP Swing Chart V2// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// Sửa đổi trên code gốc của © meomeo105
// © meomeo105
//@version=5
indicator('TLP Swing Chart V2', shorttitle='TLP Swing V2', overlay=true, max_lines_count=500)
//-----Input-------
customTF = input.timeframe(defval="",title = "Show Other TimeFrame")
showTLP = input.bool(false, 'Show TLP', inline = "TLP1")
colorTLP = input.color(color.aqua, '', inline = "TLP1")
showSTLP = input.bool(true, 'Show TLP Swing', inline = "Swing1")
colorSTLP = input.color(color.aqua, '', inline = "Swing1")
showLabel = input.bool(true, 'Show Label TimeFrame')
lineSTLP = input.string(title="",options= ,defval="(─)", inline = "Swing1")
lineStyleSTLP = lineSTLP == "(┈)" ? line.style_dotted : lineSTLP == "(╌)" ? line.style_dashed : line.style_solid
//IOSB
IOSB = "TLPInOutSideBarSetting"
ISB = input(true,group =IOSB, title="showISB")
colorISB = input.color(color.rgb(250, 171, 0), inline = "ISB")
OSB = input(true,group =IOSB, title="showOSB")
colorOSB = input.color(color.rgb(56, 219, 255), inline = "OSB")
ZoneColor = input(defval = color.new(color.orange, 90),group =IOSB, title = "Background Color")
BorderColor = input(defval = color.new(color.orange, 100),group =IOSB, title = "Border Color")
/////////////////
var aCZ = array.new_float(0)
float highest = high
float lowest = low
if (array.size(aCZ) > 0)
highest := array.get(aCZ, 0)
lowest := array.get(aCZ, 1)
insideBarCondtion = low >= lowest and low <= highest and high >= lowest and high <= highest
if ( insideBarCondtion == true )
array.push(aCZ, high )
array.push(aCZ, low )
if( array.size(aCZ) >= 2 and insideBarCondtion == false )
float maxCZ = array.max(aCZ)
float minCZ = array.min(aCZ)
box.new(bar_index - (array.size(aCZ) / 2) - 1, maxCZ, bar_index - 1, minCZ, bgcolor = ZoneColor, border_color = BorderColor)
array.clear(aCZ)
//////////////////////////Global//////////////////////////
var arrayLineTemp = array.new_line()
// Funtion
f_resInMinutes() =>
_resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60. :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 1440. :
timeframe.isweekly ? 10080. :
timeframe.ismonthly ? 43800. : na)
// Converts a resolution expressed in minutes into a string usable by "security()"
f_resFromMinutes(_minutes) =>
_minutes < 1 ? str.tostring(math.round(_minutes*60)) + "S" :
_minutes < 60 ? str.tostring(math.round(_minutes)) + "m" :
_minutes < 1440 ? str.tostring(math.round(_minutes/60)) + "H" :
_minutes < 10080 ? str.tostring(math.round(math.min(_minutes / 1440, 7))) + "D" :
_minutes < 43800 ? str.tostring(math.round(math.min(_minutes / 10080, 4))) + "W" :
str.tostring(math.round(math.min(_minutes / 43800, 12))) + "M"
f_tfRes(_res,_exp) =>
request.security(syminfo.tickerid,_res,_exp,lookahead=barmerge.lookahead_on)
var label labelError = label.new(bar_index, high, text = "", color = #00000000, textcolor = color.white,textalign = text.align_left)
sendError(_mmessage) =>
label.set_xy(labelError, bar_index + 3, close )
label.set_text(labelError, _mmessage)
var arrayLineChoCh = array.new_line()
var label labelTF = label.new(time, close, text = "",color = color.new(showSTLP ? colorSTLP : colorTLP,95), textcolor = showSTLP ? colorSTLP : colorTLP,xloc = xloc.bar_time, textalign = text.align_left)
//////////////////////////TLP//////////////////////////
var arrayXTLP = array.new_int(5,time)
var arrayYTLP = array.new_float(5,close)
var arrayLineTLP = array.new_line()
int drawLineTLP = 0
_high = high
_low = low
_close = close
_open = open
if(customTF != timeframe.period)
_high := f_tfRes(customTF,high)
_low := f_tfRes(customTF,low)
_close := f_tfRes(customTF,close)
_open := f_tfRes(customTF,open)
highPrev = _high
lowPrev = _low
// drawLineTLP => 2:Tiếp tục 1:Đảo chiều; // Outsidebar 2:Tiếp tục 3:Tiếp tục và Đảo chiều 4 : Đảo chiều 2 lần
drawLineTLP := 0
if(_high > highPrev and _low > lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
drawLineTLP := 2
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 1
else if(_high < highPrev and _low < lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 1
else
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
drawLineTLP := 2
else if(_high >= highPrev and _low < lowPrev or _high > highPrev and _low <= lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(_high >= array.get(arrayYTLP,0) and array.get(arrayYTLP,1) < _low )
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
drawLineTLP := 2
else if(_high >= array.get(arrayYTLP,0) and array.get(arrayYTLP,1) > _low )
if(_close < _open)
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 3
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 4
else if(array.get(arrayYTLP,0) < array.get(arrayYTLP,1))
if(_low <= array.get(arrayYTLP,0) and _high < array.get(arrayYTLP,1))
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
drawLineTLP := 2
else if(_low <= array.get(arrayYTLP,0) and _high > array.get(arrayYTLP,1))
if(_close > _open)
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 3
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 4
else if((_high <= highPrev and _low >= lowPrev ))
highPrev := highPrev
lowPrev := lowPrev
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()) and drawLineTLP == 0)
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(array.get(arrayYTLP,0) <= high)
array.set(arrayXTLP, 0, time)
drawLineTLP := 2
else
if(array.get(arrayYTLP,0) >= low)
array.set(arrayXTLP, 0, time)
drawLineTLP := 2
if((showSTLP or showTLP) and f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineTLP == 2)
if(array.size(arrayLineTLP) >0)
line.set_xy2(array.get(arrayLineTLP,0),array.get(arrayXTLP,0),array.get(arrayYTLP,0))
else
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 1)
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 3)
if(array.size(arrayLineTLP) >0)
line.set_xy2(array.get(arrayLineTLP,0),array.get(arrayXTLP,1),array.get(arrayYTLP,1))
else
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,2),array.get(arrayYTLP,2),array.get(arrayXTLP,1),array.get(arrayYTLP,1), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 4)
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,2),array.get(arrayYTLP,2),array.get(arrayXTLP,1),array.get(arrayYTLP,1), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
//////////////////////////Swing TLP//////////////////////////
var arrayXSTLP = array.new_int(5,time)
var arrayYSTLP = array.new_float(5,close)
var arrayLineSTLP = array.new_line()
int drawLineSTLP = 0
int drawLineSTLP1 = 0
if(showSTLP)
if(math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1)) < math.min(array.get(arrayYTLP,0),array.get(arrayYTLP,1)) or math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1)) > math.max(array.get(arrayYTLP,0),array.get(arrayYTLP,1)))
//Khởi tạo bắt đầu
drawLineSTLP1 := 5
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,1))
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
// drawLineSTLP kiểm tra điểm 1 => 13:Tiếp tục có sóng hồi // 12|19(reDraw):Tiếp tục không có sóng hồi // 14:Đảo chiều
if(array.get(arrayXTLP,0) == array.get(arrayXTLP,1))
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,2) and array.get(arrayYSTLP,0) != array.get(arrayYTLP,1) and ((array.get(arrayYTLP,1) > array.get(arrayYTLP,2) and array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1)) or (array.get(arrayYTLP,1) < array.get(arrayYTLP,2) and array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))))
drawLineSTLP1 := 12
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,1))
else if(array.get(arrayXSTLP,0) <= array.get(arrayXTLP,2))
if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) < array.get(arrayYSTLP,1)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) > array.get(arrayYSTLP,1)))
drawLineSTLP1 := 14
array.unshift(arrayXSTLP,array.get(arrayXTLP,1))
array.unshift(arrayYSTLP,array.get(arrayYTLP,1))
else if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) > array.get(arrayYSTLP,0)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) < array.get(arrayYSTLP,0)))
drawLineSTLP1 := 13
_max = math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_min = math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_max_idx = 0
_min_idx = 0
for i = 2 to array.size(arrayXTLP)
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,i))
break
if(_min > array.get(arrayYTLP,i))
_min := array.get(arrayYTLP,i)
_min_idx := array.get(arrayXTLP,i)
if(_max < array.get(arrayYTLP,i))
_max := array.get(arrayYTLP,i)
_max_idx := array.get(arrayXTLP,i)
if(array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_min_idx)
array.unshift(arrayYSTLP,_min)
else if(array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_max_idx)
array.unshift(arrayYSTLP,_max)
array.unshift(arrayXSTLP,array.get(arrayXTLP,1))
array.unshift(arrayYSTLP,array.get(arrayYTLP,1))
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()))
if(array.get(arrayYSTLP,0) == array.get(arrayYTLP,1) and array.get(arrayXSTLP,0) != array.get(arrayXTLP,1))
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
drawLineSTLP1 := 19
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineSTLP1 == 12 or drawLineSTLP1 == 19)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 14)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 13)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 15)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
// drawLineSTLP kiểm tra điểm 0 => 3:Tiếp tục có sóng hồi // 2|9(reDraw):Tiếp tục không có sóng hồi // 4:Đảo chiều
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,1) and array.get(arrayYSTLP,0) != array.get(arrayYTLP,0) and ((array.get(arrayYTLP,0) > array.get(arrayYTLP,1) and array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1)) or (array.get(arrayYTLP,0) < array.get(arrayYTLP,1) and array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))))
drawLineSTLP := 2
array.set(arrayXSTLP, 0, array.get(arrayXTLP,0))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,0))
else if(array.get(arrayXSTLP,0) <= array.get(arrayXTLP,1))
if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) < array.get(arrayYSTLP,1)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) > array.get(arrayYSTLP,1)))
drawLineSTLP := 4
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
else if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) > array.get(arrayYSTLP,0)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) < array.get(arrayYSTLP,0)))
drawLineSTLP := 3
_max = math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_min = math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_max_idx = 0
_min_idx = 0
for i = 1 to array.size(arrayXTLP)
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,i))
break
if(_min > array.get(arrayYTLP,i))
_min := array.get(arrayYTLP,i)
_min_idx := array.get(arrayXTLP,i)
if(_max < array.get(arrayYTLP,i))
_max := array.get(arrayYTLP,i)
_max_idx := array.get(arrayXTLP,i)
if(array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_min_idx)
array.unshift(arrayYSTLP,_min)
else if(array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_max_idx)
array.unshift(arrayYSTLP,_max)
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()))
if(array.get(arrayYSTLP,0) == array.get(arrayYTLP,0) and array.get(arrayXSTLP,0) != array.get(arrayXTLP,0))
array.set(arrayXSTLP, 0, array.get(arrayXTLP,0))
drawLineSTLP := 9
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineSTLP == 2 or drawLineSTLP == 9)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 4)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 3)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 5)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
///////////////////////Other//////////////////////////////////
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(showSTLP)
if(showLabel and (barstate.islast or barstate.islastconfirmedhistory))
texLabel = f_resInMinutes() == f_tfRes(customTF,f_resInMinutes()) ? f_resFromMinutes(f_resInMinutes()) : f_resFromMinutes(f_tfRes(customTF,f_resInMinutes()))
label.set_xy(labelTF,array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
label.set_text(labelTF,texLabel)
label.set_style(labelTF,array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) ? label.style_label_upper_right : label.style_label_lower_right)
if(not showTLP)
arrayLineTemp := array.copy(arrayLineTLP)
for itemArray in arrayLineTemp
if(line.get_x1(itemArray) < array.get(arrayXSTLP,0))
line.delete(itemArray)
array.remove(arrayLineTLP,array.indexof(arrayLineTLP, itemArray))
//Inside Bars - Outside Bars
insideBar() => ISB and high <= high and low >= low ? 1 : 0
outsideBar() => OSB and (high > high and low < low ) ? 1 : 0
//Inside and Outside Bars
barcolor(insideBar() ? color.new(colorISB,0) : na )
barcolor(outsideBar() ? color.new(colorOSB,0) : na )
AG Pro Dynamic ChannelsAG Pro Dynamic Channels V2
Discover a new lens through which to view market structure with the AG Pro Dynamic Channels V2. This advanced indicator moves beyond simple trendlines, automatically identifying, classifying, and drawing eight distinct types of support and resistance channels directly on your chart.
Built on a sophisticated pivot-point detection engine, this script intelligently distinguishes between Major and Minor price structures, as well as Internal and External channels. This provides a comprehensive and multi-dimensional map of the market's flow, helping you identify trend continuations, corrections, and potential reversals.
The indicator is complete with a powerful, fully customizable alert system designed to notify you of the two most critical events: channel breakouts and price reactions.
Key Features
Fully Automatic Channels: The script automatically analyzes price action to find pivot highs and lows, using them to construct relevant channels without any manual drawing required.
8-Channel Classification: Gain deep market insight by viewing eight distinct channel types:
Major External (Up/Down)
Major Internal (Up/Down)
Minor External (Up/Down)
Minor Internal (Up/Down)
Advanced Pivot Engine: The core logic classifies pivots into categories like Higher Highs (MHH/mHH), Lower Lows (MLL/mLL), Higher Lows (MHL/mHL), and Lower Highs (MLH/mLH) to determine the precise start and end points for each channel.
Deep Customization: Take full control of your chart's appearance. You can individually toggle the visibility, color, line style (solid, dashed, dotted), and line width for all eight channel types.
Chart Clarity: A "Delete Previous" option is available for each channel type, allowing you to keep your chart clean and focused on only the most current and relevant market structures.
Comprehensive Alert System
Never miss a key price interaction. The AG Pro Dynamic Channels V2 features a robust, built-in alert module.
Dual-Alert Conditions: Get notifications for two distinct events:
Break Alert: Triggers when price confirms a close outside of a channel, signaling a potential breakout.
React Alert: Triggers when price touches or interacts with a channel line before closing back inside, signaling a test or rejection.
16 Unique Alerts: You have full control to enable or disable "Break" and "React" alerts for all 8 channel types individually, giving you 16 unique alert conditions to monitor.
Professional Alert Messages: The embedded alert sender provides detailed messages that include the asset, timeframe, and the specific event, such as "Break Major External Up Channel" or "React Minor Internal Down Channel".
Alert Configuration: Easily set your global Alert Name, Message Frequency (e.g., Once Per Bar, Once Per Bar Close), and Alert Time Zone from the script's settings.
How to Use
Trend Identification: Use the Major External Channels (drawn from MHH and MLL pivots) to identify the primary, long-term trend direction.
Pullback & Entry Zones: Use the Internal Channels (drawn from MHL and MLH pivots) to spot corrections and potential entry zones within an established trend.
Breakout Trading: Set Break Alerts on Major channels to be notified of significant, structure-shifting moves.
Short-Term & Counter-Trend: Utilize the Minor Channels to identify shorter-term price swings and potential reversal points.
Price Above PDH - Complete Multi-Confirmation Alert
Cashapp $jmoskyhigh
Initial Breakout: Must have ALL confirmations to even start counting
During Hold Period: If ANY confirmation fails at ANY bar, the counter RESETS to zero
Must Re-qualify: If confirmations fail, must cross PDH again with all confirmations to restart
Alert Only Fires: When ALL confirmations are continuously met for the ENTIRE hold period
3. Visual Feedback:
Green background: Above PDH + ALL confirmations present
Red background: Above PDH but MISSING one or more confirmations
Red X above bar: Shows when a confirmation is lost during breakout (counter resets)
Green triangle with "✓ ALL": Alert triggered after full confirmation period
4. Example Scenario:
Scenario 1 - SUCCESS:
Bar 1: Price crosses PDH, Volume spike, MA bullish, Above VWAP → Counter = 1
Bar 2: Still above PDH, ALL confirmations still met → Counter = 2
Bar 3: Still above PDH, ALL confirmations still met → Counter = 3
Bar 4: Still above PDH, ALL confirmations still met → Counter = 4
Bar 5: Still above PDH, ALL confirmations still met → Counter = 5 → ALERT!
Scenario 2 - FAILURE (resets):
Bar 1: Price crosses PDH, Volume spike, MA bullish, Above VWAP → Counter = 1
Bar 2: Still above PDH, ALL confirmations still met → Counter = 2
Bar 3: Still above PDH, but volume drops below threshold → RESET Counter = 0
Bar 4: Still above PDH, ALL confirmations back → Counter = 1 (starts over)
5. Info Panel:
Shows which specific confirmations are failing
"OFF" displayed for disabled confirmations
Big "ALL CONFIRMED" row shows overall status
Warning message if confirmations are lost during breakout
This ensures you only get alerts when the setup is truly strong with ALL confirmations maintained throughout the entire hold period! 🎯
BB Simple B-Xtrender Long### Overview
I currently us this on a 1 week timeframe to spot trend shifts in the market.
It focuses exclusively on long positions (buying assets expecting price increases) and does not overlay on the main price chart—instead, it appears in a separate pane. The strategy allocates the full available equity to each trade and accounts for commissions as a percentage. It uses a custom indicator called the "B-Xtrender" to generate entry and exit signals for long trades, based on momentum-like calculations involving exponential moving averages (EMAs) and the relative strength index (RSI). The indicator is computed on a user-specified timeframe, and the strategy includes alert conditions for key events.
### Inputs Section
The script begins with user-configurable inputs that allow customization without editing the code directly. These include:
- Three integer values for short-term lengths: The first (default 5) and second (default 20) are used in EMA calculations to create a difference that forms the basis of the indicator. The third (default 15) sets the length for the RSI applied to that difference.
- A timeframe input (default "30" for 30 minutes) that determines the resolution for fetching data used in the indicator.
- A float value for the exit level (default 5, with a minimum of 0 and step of 0.1), which acts as a threshold for one of the exit conditions—specifically, when the indicator crosses below this level.
These inputs make the strategy adaptable to different assets or timeframes by adjusting the sensitivity of the indicator and exit rules.
### Indicator Section
The core of the script is the calculation of the "ShortTermXtrender" indicator. It fetches data from the specified timeframe using the asset's ticker symbol and computes an RSI on the difference between two EMAs of the closing prices (using the first and second short lengths), then subtracts 50 to center it around zero. This results in an oscillator that highlights short-term momentum shifts.
The histogram is colored dynamically:
- Green shades for positive values: Brighter green if the current value is higher than the previous (indicating strengthening upward momentum), and darker green otherwise.
- Red shades for negative or zero values: Brighter red if the current value is higher than the previous (less negative, but still downward), and darker red if it's decreasing further.
The indicator is plotted as columns for visual clarity, titled "B-Xtrender TF1" (referring to the first timeframe). A dashed gray horizontal line at zero serves as a centerline to easily distinguish positive (bullish) from negative (bearish) territories.
### Conditions Section
This part defines the logic for entering and exiting long trades, broken into entry and exit rules.
For long entries:
- One condition checks if the indicator is increasing (current value greater than the previous).
- Another optional condition detects a crossover above zero while also increasing, which can be removed if not desired.
- The final entry signal combines these: It triggers on either the crossover (if included) or the increasing value, promoting entries during upward momentum.
For long exits:
- A "red" state is defined as the indicator being at or below zero.
- A decreasing trend over two bars is checked by comparing the current to the previous, and the previous to the one before that.
- One exit triggers on this red state combined with the two-bar decrease.
- Another exit occurs when the indicator crosses below the user-defined exit level.
- The overall exit combines these two, ensuring positions close on weakening momentum or threshold breaches, but only if a long position is active.
### Strategy Execution Section
Here, the script applies the conditions to actual trading actions:
- On a long entry signal, it enters a long position labeled "Long," using the full strategy parameters for sizing and direction.
- On a long exit signal (and only if holding a positive position size), it closes the "Long" position. The comment for the close order specifies the reason: either crossing below the exit level (including the level value) or due to the red histogram with a two-bar decline.
This setup ensures automated trade management based solely on the indicator's behavior.
### Alerts Section
The script sets up three alert conditions that can notify users via TradingView's alert system:
- One for the crossover-based long entry, with a message indicating the indicator crossed above zero and is rising, signaling a long opportunity.
- Another for the increasing-value long entry, noting the indicator's rise on the specified timeframe as a long signal.
- A third for the red histogram with two-bar decline exit, warning of the condition to exit a long position.
These alerts are independent of the strategy execution and can be used for manual trading or monitoring even if the automated strategy isn't running.
Eagles CompassFree script
Helps detect specific body/wick ratios on chart for 1HR,2HR,4HR timeframes
Designed to help you detect large squeezes, bounces, and other moves
Ideally use in conjunction with an RSI to filter for false positives
Standard Daily VWAPVwap strategy based on mainly usd pairs for scalping it starts at the start of everyday and ends at the end of everyday and it is a line thats colour can be changed so u can design it acc to u it is best for scalping and taking small trades
Combined Advanced Trading BlueprintStacked EMAs, some SMA, VWAP, Smart Money Concept stuff all wrapped into one
ombhai028sboa public scholl ierigiwuhreti ieyrgleirgleiruglehfblyerfeibreyrbveyryrgyregeiyrgerygeirygeyrgyge
EMA & ORB/PM LevelsScript that combines EMA and opening range and Premarket high and low levels all in one so you can save using three indicators and just use this one.






















