NY First 4H Range Breakout Strategy (1PM Close)Strategy builds the high and low of the first four hours of the New York session (9:00 AM–1:00 PM ET), locks that range after the 1:00 PM candle closes, and then trades breakouts based strictly on candle closes (wicks ignored).
The strategy allows multiple breakouts per day, entering long when price closes above the NY range and short when it closes below, with configurable position sizing and risk-reward targets; stops can be set at the opposite side of the range or dynamically calculated.
It works both for historical back testing in the Strategy Tester and for live trading/alerts, making it suitable for intraday markets on lower timeframes such as 5- to 15-minute charts.
Grafik Desenleri
Liquidity Trap Strategy - ATR OptimizedLiquidity Trap Strategy – Optimized Version
1. Overview
The Liquidity Trap Strategy is a high-probability price action trading system designed to exploit “trapped buyers or sellers” around key levels from the previous trading day.
Markets: Works on any market (Forex, Crypto, Futures, Indices, Stocks)
Timeframes: Designed for 15-minute (15m) and 1-hour (1H) charts
Trading Style: “Hunter” style — trades may not happen every day, but setups are high-probability
Trade Frequency: Only first trade per day is taken for simplicity and high quality
2. Key Components
a) Daily Levels
Previous Day High (PDH) and Previous Day Low (PDL) are automatically calculated using the prior day’s bar.
These are drawn as anchored horizontal lines, extending to the current day.
PDH/PDL act as key support/resistance zones — areas where liquidity is often trapped.
b) Trap Concept
The strategy is based on the “liquidity trap” principle:
Buyer Trap (Short Entry):
Price breaks above the previous day high (PDH) → buyers think price will continue higher.
Price reverses immediately below PDH, trapping aggressive buyers above the key level.
This creates selling pressure, giving an opportunity to enter short.
Seller Trap (Long Entry):
Price breaks below the previous day low (PDL) → sellers think price will continue lower.
Price reverses immediately above PDL, trapping aggressive sellers below the key level.
This creates buying pressure, giving an opportunity to enter long.
The key idea: trapped traders cause the market to move in the opposite direction of the breakout, creating high-probability moves.
c) Trade Execution Logic
Buyer Trap / Short Entry:
Condition: high > PDH AND close < PDH AND no trade taken yet today
Entry: Short at the close of the trap candle
Stop Loss: ATR-based above the trap candle high to avoid minor wick stops
Take Profit: 2:1 Risk-to-Reward ratio
Seller Trap / Long Entry:
Condition: low < PDL AND close > PDL AND no trade taken yet today
Entry: Long at the close of the trap candle
Stop Loss: ATR-based below the trap candle low
Take Profit: 2:1 Risk-to-Reward ratio
Only the first trap trade of the day is allowed to avoid overtrading.
d) Risk Management
Stop-Loss (SL):
ATR-based to account for market volatility
Ensures the trade survives minor wick sweeps without being stopped out prematurely
Take-Profit (TP):
Fixed 2:1 R:R relative to SL
Ensures each winning trade outweighs potential losses
Trade Frequency:
Only first trade per day is allowed, making it highly selective and reducing noise
3. Visual Features
PDH/PDL Lines: Anchored to previous day, extend into current day, color-coded:
PDH → Green
PDL → Red
Trade Labels: Placed on the trap candle:
Short → Red label “Short”
Long → Green label “Long”
The visual markers make it easy to identify exactly where the trap occurred and the trade was triggered.
4. How the Strategy Works – Step by Step
Example for Short (Buyer Trap):
Market opens, PDH/PDL from yesterday are drawn.
Price spikes above PDH → some buyers enter expecting breakout continuation.
Price immediately closes back below PDH, trapping buyers.
The strategy enters short at the close of the reversal candle.
SL: placed above the trap candle using ATR to give room
TP: calculated as 2x the risk (distance from entry to SL)
Trade executes — first trade of the day. Any further trap signals today are ignored.
Example for Long (Seller Trap):
Price drops below PDL → some sellers enter.
Price immediately closes back above PDL, trapping sellers.
Strategy enters long at the close of the reversal candle.
SL: below trap candle using ATR
TP: 2:1 R:R
Trade executes — only first trade of the day.
5. Why This Strategy Works
Exploits liquidity zones: Markets often hunt stops above PDH or below PDL.
High-probability reversals: Trapped traders create strong counter moves.
ATR SL: avoids being stopped by minor market noise or wick spikes.
Selective trading: Only first trade per day → reduces overtrading and noise.
Clear visual markers: Makes manual observation and confirmation easy.
6. Key Tips for Traders
Best on high-volume instruments like Forex majors, indices, or crypto pairs with decent liquidity.
Works well on 15m and 1H charts — 15m allows quicker signals, 1H filters noise.
Avoid trading around major news releases — traps can behave differently during high volatility events.
Always backtest and use the ATR SL — never reduce SL too much, otherwise stops will trigger before the real move.
✅ Summary:
The Liquidity Trap Strategy identifies trapped buyers/sellers using previous day highs/lows.
It uses ATR-adapted stops and 2:1 R:R TP.
Only first trade per day is executed, reducing false signals.
Anchored PDH/PDL lines and labels make trade opportunities clear.
This system is low-frequency, high-probability, focusing on trading smart rather than frequently.
jaems_Combo: StochRSI + MACD + ADX [QuantDev]//@version=6
strategy("jaems_Combo: StochRSI + MACD + ADX ", overlay=false, initial_capital=10000, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.05, slippage=1)
// ==========================================
// 1. 사용자 입력 (User Inputs)
// ==========================================
//
grp_time = "Backtest Period"
useDateFilter = input.bool(true, "기간 필터 적용", group=grp_time)
startDate = input.time(timestamp("2023-01-01 00:00"), "시작일", group=grp_time)
endDate = input.time(timestamp("2099-12-31 23:59"), "종료일", group=grp_time)
inDateRange = not useDateFilter or (time >= startDate and time <= endDate)
//
grp_stoch = "1. Stochastic RSI Settings"
stoch_len = input.int(14, "RSI Length", group=grp_stoch)
stoch_k = input.int(3, "K", group=grp_stoch)
stoch_d = input.int(3, "D", group=grp_stoch)
rsi_len = input.int(14, "Stochastic Length", group=grp_stoch)
//
grp_macd = "2. MACD Settings (Normalized)"
macd_fast = input.int(12, "Fast Length", group=grp_macd)
macd_slow = input.int(26, "Slow Length", group=grp_macd)
macd_sig = input.int(9, "Signal Length", group=grp_macd)
macd_norm_len = input.int(100, "Normalization Lookback", group=grp_macd)
//
grp_adx = "3. ADX Settings"
adx_len = input.int(14, "ADX Smoothing", group=grp_adx)
di_len = input.int(14, "DI Length", group=grp_adx)
adx_thresh = input.int(25, "ADX Threshold", group=grp_adx)
//
grp_risk = "4. Risk Management"
stopLossPct = input.float(2.0, "손절매 (Stop Loss %)", step=0.1, group=grp_risk) / 100
takeProfitPct = input.float(4.0, "익절매 (Take Profit %)", step=0.1, group=grp_risk) / 100
// - 신규 추가 (Alert Configuration)
grp_alert = "5. Alert Configuration"
msg_long_entry = input.string("Long Entry Triggered", "Long 진입 메시지", group=grp_alert)
msg_short_entry = input.string("Short Entry Triggered", "Short 진입 메시지", group=grp_alert)
msg_long_exit = input.string("Long Position Closed", "Long 청산 메시지", group=grp_alert)
msg_short_exit = input.string("Short Position Closed", "Short 청산 메시지", group=grp_alert)
// ==========================================
// 2. 데이터 처리 및 지표 계산
// ==========================================
// Stoch RSI
rsi_val = ta.rsi(close, rsi_len)
k = ta.sma(ta.stoch(rsi_val, rsi_val, rsi_val, stoch_len), stoch_k)
d = ta.sma(k, stoch_d)
// ADX
= ta.dmi(di_len, adx_len)
// Normalized MACD (0~100 Scale)
= ta.macd(close, macd_fast, macd_slow, macd_sig)
highest_macd = ta.highest(macd_line, macd_norm_len)
lowest_macd = ta.lowest(macd_line, macd_norm_len)
// 분모가 0이 되는 예외 처리
denom = (highest_macd - lowest_macd)
norm_macd = denom != 0 ? (macd_line - lowest_macd) / denom * 100 : 50
norm_signal = denom != 0 ? (macd_signal - lowest_macd) / denom * 100 : 50
// ==========================================
// 3. 시각화 (Dark Mode Optimized Colors)
// ==========================================
color gridColor = color.new(#787B86, 50)
hline(0, "Bottom", color=gridColor)
hline(50, "Middle", color=gridColor, linestyle=hline.style_dotted)
hline(100, "Top", color=gridColor)
plot(k, "Stoch K", color=color.new(#00E5FF, 0), linewidth=1) // Neon Cyan
plot(d, "Stoch D", color=color.new(#EA00FF, 0), linewidth=1) // Neon Magenta
plot(adx, "ADX", color=color.new(#FFEB3B, 0), linewidth=2)
hline(adx_thresh, "ADX Threshold", color=color.new(#FFEB3B, 50), linestyle=hline.style_dashed)
plot(norm_macd, "Norm MACD", color=color.new(#76FF03, 60), style=plot.style_area)
plot(norm_signal, "Norm Signal", color=color.new(#FF1744, 20), linewidth=1)
// ==========================================
// 4. 전략 로직 (Strategy Logic) - 요청하신 내용으로 전면 수정
// ==========================================
// 조건: K가 D보다 크고(AND) K가 Norm Signal보다 큰 상태
bool is_bullish = (k > d) and (k > norm_signal)
// 조건: K가 D보다 작고(AND) K가 Norm Signal보다 작은 상태
bool is_bearish = (k < d) and (k < norm_signal)
// 진입 신호: "이전 봉에는 아니었는데, 지금 봉에서 두 조건을 동시에 만족했을 때" (돌파 순간)
longCondition = is_bullish and not is_bullish
shortCondition = is_bearish and not is_bearish
// 주문 실행 (Confirmed Bar Only) + Alert Message 연결
if inDateRange and barstate.isconfirmed
if longCondition
strategy.entry("Long", strategy.long, alert_message=msg_long_entry)
if shortCondition
strategy.entry("Short", strategy.short, alert_message=msg_short_entry)
// ==========================================
// 5. 청산 및 신호 강조 (Alert Message 추가)
// ==========================================
if strategy.position_size > 0
strategy.exit("Long Exit", "Long", stop=strategy.position_avg_price * (1 - stopLossPct), limit=strategy.position_avg_price * (1 + takeProfitPct), alert_message=msg_long_exit)
if strategy.position_size < 0
strategy.exit("Short Exit", "Short", stop=strategy.position_avg_price * (1 + stopLossPct), limit=strategy.position_avg_price * (1 - takeProfitPct), alert_message=msg_short_exit)
// 배경 신호
bgcolor(longCondition ? color.new(#76FF03, 90) : na, title="Long Signal BG")
bgcolor(shortCondition ? color.new(#FF1744, 90) : na, title="Short Signal BG")
james S/R Trend Pro v6//@version=6
strategy("jaems_MACD+RSI ", shorttitle="jaems_MACD+RSI ", overlay=false, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05, calc_on_every_tick=false)
// =============================================================================
// 1. 설정 (Inputs)
// =============================================================================
group_macd = "📊 MACD 설정"
fastLen = input.int(12, "Fast Length", group=group_macd)
slowLen = input.int(26, "Slow Length", group=group_macd)
sigLen = input.int(9, "Signal Smoothing", group=group_macd)
src = input.source(close, "Source", group=group_macd)
group_col = "🎨 시각화 색상"
col_up = input.color(color.new(#00E676, 0), "상승 (Neon Green)", group=group_col)
col_dn = input.color(color.new(#FF1744, 0), "하락 (Red)", group=group_col)
col_sig = input.color(color.new(#FFEA00, 0), "Signal 기본색", group=group_col)
// =============================================================================
// 2. 계산 (Calculations)
// =============================================================================
fastMA = ta.ema(src, fastLen)
slowMA = ta.ema(src, slowLen)
macd = fastMA - slowMA
signal = ta.ema(macd, sigLen)
hist = macd - signal
// 교차 확인 (Crossovers)
bool crossUp = ta.crossover(macd, signal)
bool crossDn = ta.crossunder(macd, signal)
// 추세 상태 확인
bool isBullish = macd >= signal
// =============================================================================
// 3. 전략 실행 (Execution)
// =============================================================================
if crossUp
strategy.entry("Long", strategy.long)
if crossDn
strategy.entry("Short", strategy.short)
// =============================================================================
// 4. 시각화 (Visualization) - 수정된 부분
// =============================================================================
// 4.1 MACD 라인 색상 동적 변경
color macdDynamicColor = isBullish ? col_up : col_dn
// 4.2 라인 그리기
plot(macd, title="MACD Line", color=macdDynamicColor, linewidth=2)
plot(signal, title="Signal Line", color=col_sig, linewidth=1)
// 4.3 교차점 도트 (Thick Dots) - 괄호 오류 방지를 위해 명시적 변수 할당
float dotLevelUp = crossUp ? signal : na
float dotLevelDn = crossDn ? signal : na
plot(dotLevelUp, title="Golden Cross Dot", style=plot.style_circles, color=col_up, linewidth=5)
plot(dotLevelDn, title="Dead Cross Dot", style=plot.style_circles, color=col_dn, linewidth=5)
// 4.4 히스토그램 색상 (오류 수정: 중첩 삼항연산자 제거 -> if-else 변환)
color histColor = na
if isBullish
// 상승 추세일 때: 히스토그램이 직전보다 커지면 진한색, 작아지면 연한색
if hist < hist
histColor := col_up
else
histColor := color.new(col_up, 50)
else
// 하락 추세일 때: 히스토그램이 직전보다 커지면(덜 음수면) 연한색, 작아지면 진한색
if hist < hist
histColor := color.new(col_dn, 50)
else
histColor := col_dn
plot(hist, title="Histogram", style=plot.style_columns, color=histColor)
// 4.5 기준선
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
james S/R Trend Pro v6//@version=6
strategy("james S/R Trend Pro v6", overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.05,
slippage=1)
// --- 사용자 입력 (Inputs) ---
group_date = "1. 백테스트 기간"
start_date = input.time(timestamp("2024-01-01 00:00:00"), "시작일", group=group_date)
end_date = input.time(timestamp("2026-12-31 23:59:59"), "종료일", group=group_date)
is_within_date = time >= start_date and time <= end_date
group_main = "2. 지표 설정 (S/R & Trend)"
lookback_sr = input.int(15, "지지/저항 탐색 기간", minval=5, group=group_main)
atr_period = input.int(14, "ATR 기간", group=group_main)
atr_mult = input.float(3.5, "추세선 민감도", step=0.1, group=group_main)
group_color = "3. 다크모드 색상 설정"
trend_up_color = input.color(color.rgb(200, 200, 200), "상승 추세선 (밝은 회색)", group=group_color)
trend_down_color = input.color(color.rgb(255, 255, 255), "하락 추세선 (흰색)", group=group_color)
res_color = input.color(#ff1100, "저항선 (네온 레드)", group=group_color)
sup_color = input.color(#00e1ff, "지지선 (네온 사이언)", group=group_color)
// --- 데이터 처리 (Calculations) ---
// 1. 추세선 (검은색 배경용 고대비 설정)
= ta.supertrend(atr_mult, atr_period)
// 2. 지지/저항선 (피벗 기반)
ph = ta.pivothigh(high, lookback_sr, lookback_sr)
pl = ta.pivotlow(low, lookback_sr, lookback_sr)
var float res_line = na
var float sup_line = na
if not na(ph)
res_line := high
if not na(pl)
sup_line := low
// --- 전략 로직 (Condition) ---
long_condition = direction < 0 and ta.crossover(close, sup_line)
short_condition = direction > 0 and ta.crossunder(close, res_line)
// --- 주문 실행 (Execution) ---
if is_within_date
if long_condition
strategy.entry("Long", strategy.long, comment="BUY")
if short_condition
strategy.entry("Short", strategy.short, comment="SHORT")
// 청산 로직
if strategy.position_size > 0
strategy.exit("TP-L", "Long", limit=res_line, qty_percent=50, comment="분할익절")
if ta.crossunder(close, trend_line)
strategy.close("Long", comment="추세이탈")
if strategy.position_size < 0
strategy.exit("TP-S", "Short", limit=sup_line, qty_percent=50, comment="분할익절")
if ta.crossover(close, trend_line)
strategy.close("Short", comment="추세이탈")
// --- 시각화 (Visualization - 다크 모드 최적화) ---
// 1. 추세선: 검은 배경에서 잘 보이도록 하얀색/회색 계열 사용
plot(trend_line, color=direction < 0 ? trend_up_color : trend_down_color, linewidth=2, title="Trend Line")
// 2. 지지/저항선: 네온 컬러로 시인성 극대화
plot(res_line, color=color.new(res_color, 0), style=plot.style_linebr, linewidth=2, title="Resistance")
plot(sup_line, color=color.new(sup_color, 0), style=plot.style_linebr, linewidth=2, title="Support")
// 3. 진입 시그널 라벨
plotshape(long_condition, style=shape.triangleup, location=location.belowbar, color=sup_color, size=size.small, title="Buy Label")
plotshape(short_condition, style=shape.triangledown, location=location.abovebar, color=res_color, size=size.small, title="Short Label")
// 4. 추세 배경색 (매우 옅게 설정하여 캔들을 방해하지 않음)
fill_color = direction < 0 ? color.new(sup_color, 90) : color.new(res_color, 90)
fill(plot(trend_line), plot(close), color=fill_color, title="Trend Fill")
TJR asia session sweep//@version=5
strategy("TJR asia session sweep", "TJR Asia Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Input settings
show_asian = input.bool(true, "Show Asian Session", group="Visual Settings")
show_london = input.bool(true, "Show London Session", group="Visual Settings")
show_swing_points = input.bool(true, "Show Asian Swing Points", group="Visual Settings")
show_market_structure = input.bool(true, "Show Market Structure", group="Visual Settings")
show_bos = input.bool(true, "Show Break of Structure", group="Visual Settings")
// Session Time Settings
asian_start_hour_input = input.int(22, "Asian Session Start Hour", minval=0, maxval=23, group="Session Times")
asian_end_hour_input = input.int(3, "Asian Session End Hour", minval=0, maxval=23, group="Session Times")
london_start_hour_input = input.int(3, "London Session Start Hour", minval=0, maxval=23, group="Session Times")
london_end_hour_input = input.int(8, "London Session End Hour", minval=0, maxval=23, group="Session Times")
session_timezone = input.string("America/New_York", "Session Timezone", options= , group="Session Times")
// Risk Management Settings
use_atr_sl = input.bool(false, "Use ATR Multiplier for Stop Loss", group="Risk Management")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="Risk Management")
atr_multiplier = input.float(2.0, "ATR Multiplier for Stop Loss", minval=0.5, maxval=10.0, group="Risk Management")
force_london_close = input.bool(true, "Force Close at London Session End", group="Risk Management")
cutoff_minutes = input.int(60, "Minutes Before Session End to Stop New Trades", minval=0, maxval=300, group="Risk Management")
// Position Sizing Settings
position_sizing_method = input.string("USD Risk", "Position Sizing Method", options= , group="Position Sizing")
usd_risk_per_trade = input.float(100.0, "USD Risk Per Trade", minval=1.0, maxval=10000.0, group="Position Sizing")
fixed_contracts = input.float(1.0, "Fixed Number of Contracts", minval=0.01, maxval=1000.0, step=0.01, group="Position Sizing")
// Color settings
asian_color = input.color(color.red, "Asian Session Color")
london_color = input.color(color.blue, "London Session Color")
swing_high_color = input.color(color.orange, "Swing High Color")
swing_low_color = input.color(color.lime, "Swing Low Color")
bullish_structure_color = input.color(color.green, "Bullish Structure Color")
bearish_structure_color = input.color(color.red, "Bearish Structure Color")
bos_color = input.color(color.orange, "Break of Structure Color")
// Line settings
line_width = input.int(2, "Line Width", minval=1, maxval=5)
// ATR calculation for stop loss
atr = ta.atr(atr_length)
// Position size calculation function
calculate_position_size(entry_price, stop_loss_price) =>
var float position_size = na
if position_sizing_method == "Fixed Contracts"
position_size := fixed_contracts
else // USD Risk method
stop_distance = math.abs(entry_price - stop_loss_price)
if stop_distance > 0
// Calculate position size based on USD risk per trade
// For forex: position_size = risk_amount / (stop_distance * point_value)
// For most forex pairs, point value = 1 (since we're dealing with price differences directly)
position_size := usd_risk_per_trade / stop_distance
else
position_size := fixed_contracts // Fallback to fixed contracts if stop distance is 0
position_size
// Session time definitions (using input variables)
asian_start_hour = asian_start_hour_input
asian_end_hour = asian_end_hour_input
london_start_hour = london_start_hour_input
london_end_hour = london_end_hour_input
// Get current hour using selected timezone
current_hour = hour(time, session_timezone)
// Previous hour for transition detection
prev_hour = hour(time , session_timezone)
// Session transition detection
asian_start = current_hour == asian_start_hour and prev_hour != asian_start_hour
asian_end = current_hour == asian_end_hour and prev_hour != asian_end_hour
london_start = current_hour == london_start_hour and prev_hour != london_start_hour
london_end = current_hour == london_end_hour and prev_hour != london_end_hour
// Session activity detection
asian_active = (current_hour >= asian_start_hour) or (current_hour < asian_end_hour)
london_active = (current_hour >= london_start_hour) and (current_hour < london_end_hour)
// Session boxes - keep previous sessions visible
var box asian_session_box = na
var box london_session_box = na
// Create Asian session box
if show_asian and asian_start
// Create new box at session start (previous box remains visible)
asian_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=asian_color, bgcolor=color.new(asian_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate session highs and lows for consistency
asian_session_length = asian_active and not na(asian_session_box) ? bar_index - box.get_left(asian_session_box) + 1 : 1
current_asian_high = ta.highest(high, asian_session_length)
current_asian_low = ta.lowest(low, asian_session_length)
// Update Asian session box continuously during session
if show_asian and asian_active and not na(asian_session_box)
box.set_right(asian_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(asian_session_box, current_asian_high)
box.set_bottom(asian_session_box, current_asian_low)
// Create London session box
if show_london and london_start
// Create new box at session start (previous box remains visible)
london_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=london_color, bgcolor=color.new(london_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate London session highs and lows for consistency
london_session_length = london_active and not na(london_session_box) ? bar_index - box.get_left(london_session_box) + 1 : 1
current_london_high = ta.highest(high, london_session_length)
current_london_low = ta.lowest(low, london_session_length)
// Update London session box continuously during session
if show_london and london_active and not na(london_session_box)
box.set_right(london_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(london_session_box, current_london_high)
box.set_bottom(london_session_box, current_london_low)
// Asian Session Swing Points Detection
var float asian_session_high = na
var float asian_session_low = na
var int asian_high_bar = na
var int asian_low_bar = na
// Asian Session Absolute High/Low for TP levels
var float asian_absolute_high = na
var float asian_absolute_low = na
var line asian_high_line = na
var line asian_low_line = na
var label asian_high_label = na
var label asian_low_label = na
var bool high_broken = false
var bool low_broken = false
// London Session High/Low tracking for stop loss
var float london_session_high = na
var float london_session_low = na
// Market structure tracking variables
var string breakout_direction = na // "bullish" or "bearish"
var float last_hh_level = na // Last Higher High level
var float last_hl_level = na // Last Higher Low level
var float last_ll_level = na // Last Lower Low level
var float last_lh_level = na // Last Lower High level
var int structure_count = 0
var string last_structure_type = na // "HH", "HL", "LL", "LH"
// Legacy variables for compatibility
var float last_swing_high = na
var float last_swing_low = na
var int last_high_bar = na
var int last_low_bar = na
// Market structure state tracking
var float pending_high = na
var float pending_low = na
var int pending_high_bar = na
var int pending_low_bar = na
var bool waiting_for_confirmation = false
// Break of Structure tracking variables
var float most_recent_hl = na
var float most_recent_lh = na
var int most_recent_hl_bar = na
var int most_recent_lh_bar = na
var bool bos_detected = false
// Trading variables
var bool trade_taken = false
// Trade visualization boxes (based on Casper strategy approach)
var box current_profit_box = na
var box current_sl_box = na
// Update swing points during Asian session
if asian_active and show_swing_points
// Always track absolute high/low for both TP levels and breakout detection
if na(asian_absolute_high) or high > asian_absolute_high
asian_absolute_high := high
if na(asian_absolute_low) or low < asian_absolute_low
asian_absolute_low := low
// Use absolute high/low for breakout levels (simplified logic)
if na(asian_session_high) or high > asian_session_high
asian_session_high := high
asian_high_bar := bar_index
if na(asian_session_low) or low < asian_session_low
asian_session_low := low
asian_low_bar := bar_index
// Track London session high/low for stop loss levels
if london_active
if na(london_session_high) or high > london_session_high
london_session_high := high
if na(london_session_low) or low < london_session_low
london_session_low := low
// Draw initial lines when Asian session ends
if asian_end and show_swing_points
if not na(asian_session_high) and not na(asian_high_bar)
// Draw extending line for high
asian_high_line := line.new(asian_high_bar, asian_session_high, bar_index + 200, asian_session_high,
color=swing_high_color, width=2, style=line.style_dashed, extend=extend.right)
asian_high_label := label.new(bar_index + 5, asian_session_high, "Asian High: " + str.tostring(asian_session_high, "#.####"), style=label.style_label_left, color=swing_high_color, textcolor=color.white, size=size.small)
if not na(asian_session_low) and not na(asian_low_bar)
// Draw extending line for low
asian_low_line := line.new(asian_low_bar, asian_session_low, bar_index + 200, asian_session_low,
color=swing_low_color, width=2, style=line.style_dashed, extend=extend.right)
asian_low_label := label.new(bar_index + 5, asian_session_low, "Asian Low: " + str.tostring(asian_session_low, "#.####"), style=label.style_label_left, color=swing_low_color, textcolor=color.white, size=size.small)
// Reset break flags for new session
high_broken := false
low_broken := false
// Check for breakouts during London session
if london_active and show_swing_points and not na(asian_session_high) and not na(asian_session_low)
// Check if Asian high is broken
if not high_broken and not low_broken and high > asian_session_high
high_broken := true
// Update high line to end at break point
if not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
// Remove the low line (first break wins)
if not na(asian_low_line)
line.delete(asian_low_line)
if not na(asian_low_label)
label.delete(asian_low_label)
// Add break marker
label.new(bar_index, asian_session_high * 1.001, "HIGH BREAK!",
style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bullish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_high_bar := bar_index
structure_count := 0
// Check if Asian low is broken
if not low_broken and not high_broken and low < asian_session_low
low_broken := true
// Update low line to end at break point
if not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Remove the high line (first break wins)
if not na(asian_high_line)
line.delete(asian_high_line)
if not na(asian_high_label)
label.delete(asian_high_label)
// Add break marker
label.new(bar_index, asian_session_low * 0.999, "LOW BREAK!",
style=label.style_label_up, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bearish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_low_bar := bar_index
structure_count := 0
// Stop extending lines when London session ends (if not already broken)
if london_end and show_swing_points
if not high_broken and not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
if not low_broken and not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Force close all trades at London session end (if enabled)
if london_end and force_london_close
if strategy.position_size != 0
// Extend boxes immediately before session close to prevent timing issues
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
strategy.close_all(comment="London Close")
trade_taken := false // Reset trade flag for next session
// Market structure detection after breakout (only during London session and before first BoS)
if show_market_structure and not na(breakout_direction) and london_active and not bos_detected
// Bullish structure tracking (HH, HL alternating)
if breakout_direction == "bullish"
// Check for Higher High pattern: Bullish candle followed by bearish candle
pattern_high = math.max(high , high)
prev_hh = na(last_hh_level) ? last_swing_high : last_hh_level
// HH Detection: Only if we expect HH next (no last structure or last was HL)
if (na(last_structure_type) or last_structure_type == "HL") and close > open and close < open and pattern_high > prev_hh and close > prev_hh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_hh = true
if is_too_close and structure_count > 0 and pattern_high <= last_hh_level
should_create_hh := false
if should_create_hh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "HH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hh_level := pattern_high
last_swing_high := pattern_high
last_high_bar := bar_index
last_structure_type := "HH"
// HL Detection: Only if we expect HL next (last was HH)
pattern_low = math.min(low , low)
prev_hl = na(last_hl_level) ? last_swing_low : last_hl_level
if last_structure_type == "HH" and close < open and close > open and pattern_low > prev_hl and close > prev_hl
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_hl = true
if is_too_close and pattern_low <= last_hl_level
should_create_hl := false
if should_create_hl
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "HL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hl_level := pattern_low
most_recent_hl := pattern_low // Update most recent HL for BoS detection
most_recent_hl_bar := bar_index - 1 // Store HL bar position
last_low_bar := bar_index
last_structure_type := "HL"
// Bearish structure tracking (LL, LH alternating)
if breakout_direction == "bearish"
// Check for Lower Low pattern: Bearish candle followed by bullish candle
pattern_low = math.min(low , low)
prev_ll = na(last_ll_level) ? last_swing_low : last_ll_level
// LL Detection: Only if we expect LL next (no last structure or last was LH)
if (na(last_structure_type) or last_structure_type == "LH") and close < open and close > open and pattern_low < prev_ll and close < prev_ll
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_ll = true
if is_too_close and structure_count > 0 and pattern_low >= last_ll_level
should_create_ll := false
if should_create_ll
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "LL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_ll_level := pattern_low
last_swing_low := pattern_low
last_low_bar := bar_index
last_structure_type := "LL"
// LH Detection: Only if we expect LH next (last was LL)
pattern_high = math.max(high , high)
prev_lh = na(last_lh_level) ? last_swing_high : last_lh_level
if last_structure_type == "LL" and close > open and close < open and pattern_high < prev_lh and close < prev_lh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_lh = true
if is_too_close and pattern_high >= last_lh_level
should_create_lh := false
if should_create_lh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "LH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_lh_level := pattern_high
most_recent_lh := pattern_high // Update most recent LH for BoS detection
most_recent_lh_bar := bar_index - 1 // Store LH bar position
last_high_bar := bar_index
last_structure_type := "LH"
// Check if we're within the cutoff period before London session end
current_minute = minute(time, session_timezone)
london_end_time_minutes = london_end_hour * 60 // Convert London end hour to minutes
current_time_minutes = current_hour * 60 + current_minute // Current time in minutes
// Calculate minutes remaining in London session
london_session_minutes_remaining = london_end_time_minutes - current_time_minutes
// Handle day rollover case (e.g., if london_end is 8:00 (480 min) and current is 23:30 (1410 min))
if london_session_minutes_remaining < 0
london_session_minutes_remaining := london_session_minutes_remaining + (24 * 60) // Add 24 hours in minutes
// Only allow trades if more than cutoff_minutes remaining in London session
allow_new_trades = london_session_minutes_remaining > cutoff_minutes
// Break of Structure (BoS) Detection and Trading Logic - Only first BoS per London session and outside cutoff period
if show_bos and london_active and show_market_structure and not bos_detected and not trade_taken and allow_new_trades
// Bullish BoS: Price closes below the most recent HL (after bullish breakout) - SELL SIGNAL
if breakout_direction == "bullish" and not na(most_recent_hl) and not na(most_recent_hl_bar)
// Check minimum distance requirement (at least 4 candles between BoS and HL)
if close < most_recent_hl and (bar_index - most_recent_hl_bar) >= 4
// Draw dotted line from HL position to BoS point
line.new(most_recent_hl_bar, most_recent_hl, bar_index, most_recent_hl,
color=bos_color, width=2, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_hl_bar + bar_index) / 2)
// Draw BoS label below the line for HL break
label.new(center_bar, most_recent_hl - (most_recent_hl * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// SELL ENTRY
if not na(london_session_high) and not na(asian_absolute_low)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close + (atr * atr_multiplier) : london_session_high
take_profit_level = asian_absolute_low
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("SELL", strategy.short, qty=position_size, comment="BoS Sell")
strategy.exit("SELL EXIT", "SELL", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=take_profit_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=stop_loss_level,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Bearish BoS: Price closes above the most recent LH (after bearish breakout) - BUY SIGNAL
if breakout_direction == "bearish" and not na(most_recent_lh) and not na(most_recent_lh_bar)
// Check minimum distance requirement (at least 4 candles between BoS and LH)
if close > most_recent_lh and (bar_index - most_recent_lh_bar) >= 4
// Draw dotted line from LH position to BoS point
line.new(most_recent_lh_bar, most_recent_lh, bar_index, most_recent_lh,
color=bos_color, width=1, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_lh_bar + bar_index) / 2)
// Draw BoS label above the line for LH break
label.new(center_bar, most_recent_lh + (most_recent_lh * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// BUY ENTRY
if not na(london_session_low) and not na(asian_absolute_high)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close - (atr * atr_multiplier) : london_session_low
take_profit_level = asian_absolute_high
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("BUY", strategy.long, qty=position_size, comment="BoS Buy")
strategy.exit("BUY EXIT", "BUY", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=take_profit_level,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=stop_loss_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Position close detection for extending boxes (based on Casper strategy)
if barstate.isconfirmed and strategy.position_size == 0 and strategy.position_size != 0
// Extend trade visualization boxes to exact exit point when position closes
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
// Backup safety check - extend boxes if position is closed but boxes still active
if not na(current_profit_box) and strategy.position_size == 0
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na
if not na(current_sl_box) and strategy.position_size == 0
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na
// Reset everything when new Asian session starts
if asian_start and show_swing_points
asian_session_high := na
asian_session_low := na
asian_high_bar := na
asian_low_bar := na
// Reset absolute levels
asian_absolute_high := na
asian_absolute_low := na
asian_high_line := na
asian_low_line := na
asian_high_label := na
asian_low_label := na
high_broken := false
low_broken := false
// Reset London session levels
london_session_high := na
london_session_low := na
// Reset market structure tracking
breakout_direction := na
last_hh_level := na
last_hl_level := na
last_ll_level := na
last_lh_level := na
last_swing_high := na
last_swing_low := na
last_high_bar := na
last_low_bar := na
structure_count := 0
last_structure_type := na
pending_high := na
pending_low := na
pending_high_bar := na
pending_low_bar := na
waiting_for_confirmation := false
// Reset BoS tracking
most_recent_hl := na
most_recent_lh := na
most_recent_hl_bar := na
most_recent_lh_bar := na
bos_detected := false
// Reset trading
trade_taken := false
// Reset current trade boxes
current_profit_box := na
current_sl_box := na
// Debug info (optional)
show_debug = input.bool(false, "Show Debug Info")
if show_debug
var table debug_table = table.new(position.top_right, 2, 3, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Current Hour:", text_color=color.black)
table.cell(debug_table, 1, 0, str.tostring(current_hour), text_color=color.black)
table.cell(debug_table, 0, 1, "Asian Active:", text_color=color.black)
table.cell(debug_table, 1, 1, str.tostring((current_hour >= asian_start_hour) or (current_hour < asian_end_hour)), text_color=color.black)
table.cell(debug_table, 0, 2, "London Active:", text_color=color.black)
table.cell(debug_table, 1, 2, str.tostring((current_hour >= london_start_hour) and (current_hour < london_end_hour)), text_color=color.black)
GOLD TERTIUM estrategiaThis indicator is a visual tool for TradingView designed to help you read trend structure using EMAs and highlight potential long and short entries on the MGC 1‑minute chart, while filtering pullbacks and avoiding trades when the 200 EMA is flat.
It calculates five EMAs (32, 50, 110, 200, 250) and plots them in different colors so you can clearly see the moving‑average stack and overall direction. The main trend is defined by the 200 EMA: bullish when price and the fast EMAs (32 and 50) are above it with a positive slope, and bearish when they are below it with a negative slope; if the 200 EMA is almost flat, signals are blocked to reduce trading in choppy markets.
ICT Entry V2 [TS_Indie]📌 Description – ICT Entry V2
The market structure, liquidity, FVG, and iFVG mechanisms remain the same as in Version 1.
However, the price action for order entries is different, with the positions of the FVG and iFVG swapped.
Pending orders and stop loss are placed at the iFVG.
⚙️ Core Logic & Working Mechanism
I won’t explain FVG in detail, as most traders are already familiar with it.
Let’s focus on the mechanism of iFVG instead.
The concept of iFVG is based on a supply-to-demand flip and a demand-to-supply flip within an FVG zone.
For an iFVG to be confirmed, the candle close must break through the FVG.
A wick alone does not count as a valid iFVG confirmation.
The confirmation of market structure swings uses a pivot length mechanism combined with price action.
It validates a swing by detecting a structure break formed by candles making new highs or new lows.
📈 Buy Setup
1.Liquidity sweep on the demand side, with price closing above the liquidity level.
2.A demand zone is formed as iFVG and FVG, where FVG is located above iFVG.
3.The gap between the upper box of iFVG and the lower box of FVG must be within the defined Min and Max range.
4.Market Structure must be in a Bullish trend.
5.Place a Pending Order at the upper box of iFVG and set Stop Loss at the lower box of iFVG (Entry and Stop Loss can be adjusted using Entry Zone and ATR-based Stop Loss).
📉 Sell Setup
1.Liquidity sweep on the supply side, with price closing below the liquidity level.
2.A supply zone is formed as iFVG and FVG, where FVG is located below iFVG.
3.The gap between the lower box of iFVG and the upper box of FVG must be within the defined Min and Max range.
4.Market Structure must be in a Bearish trend.
5.Place a Pending Order at the lower box of iFVG and set Stop Loss at the upper box of iFVG (Entry and Stop Loss can be adjusted using Entry Zone and ATR-based Stop Loss).
⚙️ Liquidity Sweep Conditions
➯ When a liquidity sweep occurs on the demand side, the system will start looking for Buy Setup conditions.
➯ When a liquidity sweep occurs on the supply side, the system will immediately switch to looking for Sell Setup conditions.
➯ The system will always prioritize the most recent liquidity sweep and search for setups based on that direction.
➯ The liquidity sweep condition will be invalidated when price closes back below (for demand sweep) or above (for supply sweep) the most recently swept liquidity level.
⭐ Pending Order Cancellation Conditions
A Pending Order will be canceled under the following conditions:
1.A new Price Action signal appears on either the Buy or Sell side.
2.When Time Session is enabled, the Pending Order is canceled once price exits the selected session.
🕹 Order Management Rule
When there is an active open position, the indicator restricts the creation of new Pending Orders to prevent overlapping positions.
⚠️ Disclaimer
This indicator is designed for educational and research purposes only. It does not guarantee profits and should not be considered financial advice. Trading in financial markets involves significant risk, including the potential loss of capital.
🥂 Community Sharing
If you find parameter settings that work well or produce strong statistical results, feel free to share them with the community so we can improve and develop this indicator together.
SMC Liquidity Grab ProSMC LIquidity GRab Pro is an high probability strategy for the Smart Money Concept (SMC).
It looks for liquidity sweeps also known as stop hunts, where large financial institutions move the price beyond significant levels in order to trigger market orders and then reverse the price quickly.
Features
1. Liquidity Sweeps : It follows the previous 4 hour high/low liquidity in order to pinpoint stop runs.
2. Liquidity grab confirmation: Trade setup where price momentarily breaks through the liquidity level but then ends up again inside the range suggests that there’s been a false breakout.
3.Structure-Based Risk Management: Stop losses are placed beyond the latest swing high/low pivot, instead of basing it on a pip value.
- Live Performance Dashboard - Allows you to display real-time data such as net profit, win rate, and active trade on your chart.
-Customizable Risk-to-Reward- Traders can set risk/reward ratio as per their requirement. Default value is 2.0 RR. Graph Timeframe: This strategy is used on 5-minute or 15-minute charts.
Chart Timeframe: Apply the strategy to 5-minute or 15-minute charts.
HTF Configuration: Set the higher timeframe above your execution chart e.g., 240 minutes for 4-hours.
Fine-Tuning: Adjust the swing lookback parameter to adapt stop-loss placement according to market volatility.
My Swift-like Algo ALIMOJANIDSwift Algo Chart is a trend-following trading indicator designed to provide clear bias, precise entries, and visual risk management.
It combines EMA trend direction, pullback-based signals, market structure (HH/HL/LH/LL), and ATR-based Stop Loss & Take Profit levels to help traders make disciplined decisions.
🔑 Key Features
Trend Regime Detection
Identifies LONG, SHORT, or NO TRADE conditions using Fast & Slow EMAs.
Pullback Entry Signals
Signals appear only in the direction of the active trend, with optional RSI confirmation.
ATR-Based Risk Levels
Automatically plots SL, TP1, and TP2, including exact price values on the chart.
Preview Levels
Shows projected SL/TP levels when a trend is active, even before an entry.
Market Structure Visualization
Marks HH / HL / LH / LL, draws structure lines, and highlights BOS and CHOCH.
Clean & Non-Repainting Logic
Uses confirmed pivots and closed candles for stability.
Strategy-Compatible
Can be used for discretionary trading or full strategy backtesting.
🧠 Best Used For
Crypto, Forex, Indices
15m to 4H timeframes
Traders who want structure + trend + risk clarity in one tool
My Swift-like Algo J.ALIMOJANIDSwift Algo Chart — Trend, Structure & ATR Risk
Swift Algo Chart is a trend-following trading indicator designed to provide clear bias, precise entries, and visual risk management.
It combines EMA trend direction, pullback-based signals, market structure (HH/HL/LH/LL), and ATR-based Stop Loss & Take Profit levels to help traders make disciplined decisions.
🔑 Key Features
Trend Regime Detection
Identifies LONG, SHORT, or NO TRADE conditions using Fast & Slow EMAs.
Pullback Entry Signals
Signals appear only in the direction of the active trend, with optional RSI confirmation.
ATR-Based Risk Levels
Automatically plots SL, TP1, and TP2, including exact price values on the chart.
Preview Levels
Shows projected SL/TP levels when a trend is active, even before an entry.
Market Structure Visualization
Marks HH / HL / LH / LL, draws structure lines, and highlights BOS and CHOCH.
Clean & Non-Repainting Logic
Uses confirmed pivots and closed candles for stability.
Strategy-Compatible
Can be used for discretionary trading or full strategy backtesting.
🧠 Best Used For
Crypto, Forex, Indices
15m to 4H timeframes
Traders who want structure + trend + risk clarity in one tool
My Swiftlike Algo Backtest ATR SL/TP HH/HL/LH/LL BOS/CHOCHSwift-Like Algo is a trend-following strategy that trades pullbacks using EMA trend direction, market structure (HH/HL/LH/LL), and ATR-based risk management.
It enters only in the direction of the trend, with automatic Stop-Loss, TP1, and TP2, and supports full strategy backtesting.
Best used on 15m–4H timeframes for crypto, forex, and indices.
⚠️ For educational and testing purposes only.
EMA 8/20 CrossoverModeled with 10k buying power
risking 5% account value per trade
take profit when 8 day EMA crosses below 20 day EMA
take long position when 8 day EMA crosses above 20 day EMA
HARSI RSI Shadow SHORT Strategy M1HARSI – Heikin Ashi RSI Shadow Indicator
HARSI (Heikin Ashi RSI Shadow) is a momentum-based oscillator that combines the concept of Heikin Ashi smoothing with the Relative Strength Index (RSI) to reduce market noise and highlight short-term trend strength.
Instead of plotting traditional price candles, HARSI transforms RSI values into a zero-centered oscillator (RSI − 50), allowing traders to clearly identify bullish and bearish momentum around the median line. The smoothing mechanism inspired by Heikin Ashi candles helps filter out false signals, making the indicator especially effective on lower timeframes such as M1.
The RSI Shadow reacts quickly to momentum shifts while maintaining smooth transitions, which makes it suitable for scalping and intraday trading. Key threshold levels (such as ±20 and ±30) can be used to detect momentum expansion, exhaustion, and potential continuation setups.
mua HARSI RSI Shadow Strategy M1 (Fixed)HARSI – Heikin Ashi RSI Shadow Indicator
HARSI (Heikin Ashi RSI Shadow) is a momentum-based oscillator that combines the concept of Heikin Ashi smoothing with the Relative Strength Index (RSI) to reduce market noise and highlight short-term trend strength.
Instead of plotting traditional price candles, HARSI transforms RSI values into a zero-centered oscillator (RSI − 50), allowing traders to clearly identify bullish and bearish momentum around the median line. The smoothing mechanism inspired by Heikin Ashi candles helps filter out false signals, making the indicator especially effective on lower timeframes such as M1.
The RSI Shadow reacts quickly to momentum shifts while maintaining smooth transitions, which makes it suitable for scalping and intraday trading. Key threshold levels (such as ±20 and ±30) can be used to detect momentum expansion, exhaustion, and potential continuation setups.
HARSI works best in liquid markets and can be used as a standalone momentum indicator or combined with trend filters such as moving averages or VWAP for higher-probability trades.
Key Features:
Zero-centered RSI oscillator (RSI − 50)
Heikin Ashi–style smoothing to reduce noise
Clear momentum-based entry signals
Optimized for lower timeframes (M1 scalping)
Suitable for both Spot and Futures trading
Old Indicator Multi-Component Decision StrategyStrategy to test signals based on rsi and few other technicals
ABCD Harmonic Pattern Strategy (Bull + Bear) This script is a strategy implementation of the classic ABCD Harmonic Pattern, designed for market structure analysis, backtesting, and educational research.
The ABCD pattern is one of the foundational harmonic price patterns in technical analysis. Its Fibonacci ratio relationships were formalized and standardized within harmonic trading theory by Scott M. Carney, whose work helped define modern harmonic pattern rules.
This strategy is conceptually inspired by educational ABCD pattern logic shared by the TradingView author theEccentricTrader.
The code, structure, execution logic, filters, and risk management have been independently developed, reconstructed, and extended into a complete TradingView strategy.
What this strategy does
Detects bullish and bearish ABCD harmonic patterns based on price structure and Fibonacci ratios.
Reconstructs ABCD market structure logic for both directions instead of using a simple visual inversion.
Draws the ABCD legs, structure labels (A, B, C, D), and projection levels directly on the chart.
Generates long and short trade entries using confirmed ABCD structures.
Includes optional confluence filters, such as:
Higher-timeframe EMA trend filter
RSI strength filter
ATR volatility filter
Volume confirmation
Candle body confirmation
Minimum bounce distance from point D
Provides built-in risk management, including:
Configurable Stop Loss
Configurable Take Profit
Optional trailing stop
Designed for backtesting, parameter optimization, and analytical research.
Why this strategy is different
This script is not a simple indicator conversion nor a basic bullish/bearish mirror.
The ABCD pattern logic has been recreated at the structural level to better reflect how bullish and bearish market formations behave in real price action.
Key differences
Reconstructed bullish and bearish structures
Bullish and bearish ABCD patterns are independently defined using market structure logic, not just inverted visually.
Each direction has its own pivot relationships and validation rules to produce a more faithful representation of the ABCD pattern.
Structure-aware pattern validation
Pattern confirmation is based on price swings, structure continuity, and Fibonacci alignment, helping reduce distorted or forced patterns.
Strategy-based execution
Unlike indicator-only ABCD tools that only visualize patterns, this script uses strategy.entry and strategy.exit, enabling full backtesting and performance analysis.
Confluence-driven entries
Trade entries can require multiple confirmation layers beyond the pattern itself, helping reduce low-quality signals and overtrading.
Integrated risk management
Stop Loss, Take Profit, and optional trailing logic are applied consistently for both long and short positions.
Non-repainting design
Pattern detection and entries rely on confirmed bars (barstate.isconfirmed) and higher-timeframe data with lookahead_off, ensuring signals do not repaint historically.
Improved and controlled visualization
Pattern drawings, projections, and entry markers are managed with strict object limits to comply with TradingView performance and publishing requirements.
How to use
Add the strategy to a chart and select a symbol and timeframe.
Enable or disable filters under “Entry Filters (Confluence)”.
Configure Stop Loss, Take Profit, and trailing behavior under “TP/SL”.
Use pattern drawings and entry markers as visual and analytical confirmation, not as standalone trade signals.
Important notes
This script is provided for educational and research purposes only.
It does not provide financial or investment advice.
No profitability or performance is implied or guaranteed.
Past performance does not indicate future results.
Always test across multiple markets and timeframes and apply proper risk management.
Credits
ABCD Harmonic Pattern: Harmonic trading principles as formalized by Scott M. Carney.
Conceptual inspiration: Educational ABCD pattern logic shared by @theEccentricTrader on TradingView.
Pattern reconstruction, strategy logic, and risk management: Independent development.
Bullish Engulfing at Daily Support (Pivot Low) - R Target (v6)1. What this strategy really is (in human terms)
This strategy is not about predicting the market.
It’s about waiting for proof that buyers are stepping in at a price where they already should.
Think of it like this:
“I only buy when price falls into a known ‘floor’ and buyers visibly take control.”
That’s it.
Everything in the script enforces that idea.
2. The two ingredients (nothing else)
Ingredient #1: Daily Support (the location)
Support is an area where price previously fell and then reversed upward.
In the script:
Support is defined as the most recent confirmed daily swing low
A swing low means:
Price went down
Stopped
Then went up enough to prove that buyers defended that level
This matters because:
You’re not guessing where support might be
You’re using a level where buyers already proved themselves
“At support” doesn’t mean exact
Markets don’t bounce off perfect lines.
So the script allows a small zone (the “support tolerance”):
Example: 0.5% tolerance
If support is at 100
Anywhere between ~99.5–100.5 counts
This prevents missing good trades just because price was off by a few ticks.
Ingredient #2: Bullish Engulfing Candle (the trigger)
This is the confirmation.
A bullish engulfing candle means:
Sellers were in control
Buyers stepped in hard enough to fully overpower them
The bullish candle’s body “swallows” the previous candle
Psychologically, it says:
“Sellers tried, failed, and buyers just took control.”
That’s why this candle works only at support.
A bullish engulfing in the middle of nowhere means nothing.
3. Why daily timeframe matters
The daily chart:
Filters out noise
Reflects decisions made by institutions, not random scalpers
Produces fewer but higher-quality signals
That’s why:
The script uses daily data
You typically get very few trades per month
Most days: no trade
That “boredom” is the edge.
4. When a trade is taken (exact conditions)
A trade happens only if ALL are true:
Price drops into a recent daily support zone
A bullish engulfing candle forms on the daily chart
Risk is clearly defined (entry, stop, target)
If any one is missing → no trade
5. How risk is controlled (this is crucial)
The stop loss (where you admit you’re wrong)
The stop is placed:
Below the support level
Or below the low of the engulfing candle
With a small ATR buffer so normal noise doesn’t stop you out
Meaning:
“If price breaks below this area, buyers were wrong. I’m out.”
No hoping. No moving stops. No exceptions.
Position sizing (why this strategy survives losing streaks)
Each trade risks a fixed % of your account (default 1%).
So:
Big stop = smaller position
Small stop = larger position
This keeps every trade equal in risk, not equal in size.
That’s professional behavior.
6. The take-profit logic (why 2.8R matters)
Instead of guessing targets:
The strategy uses a multiple of risk (R)
Example:
Risk = $1
Target = $2.80
You can lose many times and still come out ahead.
This is why:
Win rate ≈ 60% is more than enough
Even 40–45% could still work if discipline is perfect
7. Why patience is the real edge (not the pattern)
The bullish engulfing is common.
Bullish engulfing at daily support is rare.
Most people fail because they:
Trade engulfings everywhere
Ignore location
Lower standards when bored
Add “just one more indicator”
Your edge is:
Saying no 95% of the time
Taking only trades that look obvious after they work
8. How to use this strategy effectively (rules to follow)
Rule 1: Only take “clean” setups
Skip trades when:
Support is messy or unclear
Price is chopping sideways
The engulfing candle is tiny
The market is news-chaotic (earnings, FOMC, etc.)
If you have to convince yourself, skip it.
Rule 2: One trade at a time
This strategy works best when:
You’re not stacked in multiple correlated trades
You treat each setup like it matters
Quality > quantity.
Rule 3: Journal screenshots, not just numbers
After each trade, save:
Daily chart screenshot
Support level marked
Entry / stop / target
After 50–100 trades, patterns jump out:
Best tolerance %
Best stop buffer
Markets that behave well vs poorly
That’s how the original trader refined it.
Rule 4: Expect boredom and drawdowns
You will have:
Weeks with zero trades
Clusters of losses
Long flat periods
That’s normal.
If you “fix” it by adding more trades:
You destroy the edge.
9. Who this strategy is perfect for
This fits you if:
You don’t want screen addiction
You prefer process over excitement
You’re okay being wrong often
You want something you can execute for years
It is not for:
Scalpers
Indicator collectors
People who need action every day
10. The mindset shift (the real lesson of that story)
The money didn’t come from bullish engulfings.
It came from:
Defining one repeatable behavior
Removing everything else
Trusting math + patience
Doing nothing most of the time
If you want, next we can:
Walk through real example trades bar-by-bar
Optimize settings for a specific market you trade
Add filters that increase quality without adding complexity
Multi KI Agenten Strategie (Final V2)What's included in the Pine Script (Technical Analysis)
These features are mathematically implemented in the script and function as "agent logic":
• Trend Following: Integrated via EMAs (50, 100, 200).
• Volume Analysis: An agent checks for institutional volume spikes.
• Supply & Demand: Zones are calculated based on price extremes.
• RSI & Fibonacci: Both are built in as decision criteria for the agents.
• Controlling AI: The "veto logic" in the code acts as a controlling instance, blocking signals if the risk is too high or divergences exist.
• Alerts: The "LONG" and "SHORT" alerts are only triggered after approval by the controlling mechanism.






















