Gold Futures Prop-Firm Strategy (GC) 1-18-2026Overview
This is a long-only, session-based, multi-regime trading strategy designed specifically for Gold futures (GC / GC1!) on intraday timeframes (typically 5–15 minutes).
The strategy aims to capture high-probability moves during the New York and Asian sessions while avoiding major economic news events and enforcing strict daily risk limits — making it suitable for prop firm challenges (e.g. FTMO, FundedNext, Apex, etc.) that require consistent profitability, limited drawdown, and disciplined risk management.
Core Philosophy
Trade longs only (shorts were removed after analysis showed they were consistently unprofitable)
Different logic depending on session and market regime (trending vs ranging)
Heavy filtering using trend strength (ADX), volume confirmation, EMA alignment, Bollinger Bands, and RSI
Strict position sizing, daily loss cap, per-session trade limits, and news blackout periods
Trailing stop mechanism to let winners run while protecting against reversals
Trading Sessions & Time Windows (Eastern Time)
NY Session: 08:30 – 15:00 ET
NY AM (trend/breakout zone): 08:30 – 11:30 ET
NY PM (mean-reversion zone): 11:30 – 15:00 ET
Asia Session (mean-reversion zone): 18:00 – 02:00 ET
News blackouts: short windows around high-impact releases (CPI/NFP, ISM/Fed, FOMC)
Entry Logic (Long Only)
NY AM – Trend Following & Breakouts (strongest trend filter)
ADX > 30 (strong trend)
Price above 200 EMA (bull regime)
Fast EMA (21) crosses above Slow EMA (55) or breakout above 20-bar high
Volume spike (> 1.4 × 20-period SMA)
Max 2 trades per NY session per day
NY PM & Asia – Mean Reversion
ADX ≤ 30 (ranging market)
Price below lower Bollinger Band (20, 2.0)
RSI < 25 (deep oversold)
No volume filter required here
Max 2 trades per Asia session per day
Risk Management Rules
Position size: Fixed 1–2 contracts (user selectable)
Initial stop: 1.7 × ATR(14) below entry (tightened from original)
Trailing stop:
Activates after price moves +1.0 × ATR in profit
Trails by 1.0 × ATR (locked-in profits aggressively)
Daily loss limit: -$600 (stops all trading for the day once hit)
No trading during defined news windows
Pyramiding disabled (only one position at a time)
No short entries (removed after backtest analysis)
Indicators Used
EMA 21 / 55 / 200 (trend direction & filter)
ATR(14) × 0.85 (volatility base)
ADX(14) threshold 30 (strong trend confirmation)
Bollinger Bands (20, 2.0) for mean-reversion entries
RSI(14) with oversold < 25
Volume spike filter (1.4× SMA) for trend/breakout entries
20-bar highest high / lowest low for breakout detection
Visual Elements on Chart
Fast (blue), Slow (orange), and Filter (red) EMAs
Bollinger Bands (gray, semi-transparent fill)
Background coloring:
Red tint during news blackout periods
Purple tint when daily loss limit is hit
Intended Use Case
Prop trading firm evaluation accounts
Conservative intraday gold trading
Focus on high-quality long setups in trending (NY AM) and mean-reverting (Asia/PM) environments
Goal: positive expectancy with controlled drawdown, suitable for passing drawdown and profit targets
Wskaźniki i strategie
BTCUSD 1D Trend Strategy [Gemini]1Dchart
100% of equity per trade
0.1% commission
1 tick slippage
please convert this indicator to a trading strategy as you see fit
find attached the date of the chart and the indicator on BTCUSD 1D chart so you can make a better decision when to buy and sell
avoid forward looking and repainting at all costs.
Don't add tables to the chart
don't ever use line breaks in function calls:
long only
2018-2069
1D chart
100% of
Axis-Pro System | Trend Structure + Fibonacci Pullbacks Axis-Pro System is a comprehensive Trend Following strategy designed to trade high-probability pullbacks. Unlike indicators that merely chase price, this system patiently waits for market structure alignment before seeking an entry.
The system is built on the premise of "Quality over Quantity", utilizing volatility and structure filters to avoid choppy markets (ranges) and false breakouts.
🧠 Strategy Logic
The system makes decisions based on a strict 4-step hierarchy:
Higher Timeframe (HTF) Bias:
Analyzes the trend on a higher timeframe to ensure we are trading in the direction of the dominant flow.
Structure & BOS (Break of Structure):
Identifies clear impulses that break previous highs or lows. Once a BOS is confirmed, the system "arms" the trade and waits.
Fibonacci Zone Pullback:
It does not chase the breakout. Instead, it waits for a pullback into the "Discount Zone" (Golden Zone, configurable between 0.382 and 0.618) to improve the Risk/Reward ratio.
Validation & Trigger:
Uses an ATR expansion check to filter out low-volatility periods.
Requires candle confirmation and alignment with fast EMAs before pulling the trigger.
🛡️ Risk Management
The system incorporates advanced position management using a split execution model (50/50):
Dynamic Stop Loss: Automatically calculated using an ATR multiplier or the recent Swing High/Low (whichever offers better protection).
TP1 (Take Profit 1): Closes 50% of the position at a fixed R-multiple (e.g., 1.5R) to lock in profit and moves the Stop Loss to Break-Even.
TP2 (Runner): The remaining 50% is left to run for higher targets (e.g., 3.0R) or until the trend bends, maximizing gains during strong moves.
Trailing Stop: Optional feature to trail price with a fast EMA once the first target is hit.
⚙️ Settings & Features
The script is highly customizable for different assets (Crypto, Forex, Indices):
Date Range Filter: Includes a date selector to perform precise Backtesting on specific periods (e.g., testing specifically during a Bear Market vs. Bull Market).
Auto Trendlines: Automatically draws relevant trendlines for visual support.
Quality Filters: Options to toggle the EMA 200 filter and breakout buffers.
⚠️ Disclaimer
This strategy is a tool for analysis and backtesting purposes. Past performance does not guarantee future results. It is highly recommended to test the strategy on a Demo account first and adjust parameters according to the volatility of the specific asset being traded. Always use responsible risk management.
MFI/RSI Divergence Lower하단 지표 구성 및 활용법
MFI (Aqua Line): 거래량이 가중된 자금 흐름입니다. 지지선 근처에서 이 선이 저점을 높이면(다이버전스) 강력한 매수 신호입니다.
RSI (Yellow Line): 가격의 상대적 강도입니다. MFI와 함께 움직임을 비교하여 보조적으로 활용합니다.
리페인팅 방지 핵심: offset=-lb_r 설정을 통해, 지표가 확정되는 시점(피벗 완성 시점)에 정확히 신호가 표시되도록 구현했습니다. 이는 과거 백테스트 결과와 실시간 매매 결과가 일치하도록 보장합니다.
실전 응용
지지/저항 필터: 이 지표 단독으로 사용하기보다, 차트 상의 주요 지지선에 가격이 위치했을 때 발생하는 BULL DIV 신호만 골라 매수하면 승률이 극대화됩니다.
손절/익절 최적화: 현재 1.5% 손절, 3% 익절로 설정되어 있습니다. 종목의 변동성(ATR)에 따라 group_risk에서 수치를 조정하며 최적의 수익 곡선을 찾아보십시오.
//@version=6
strategy("Hybrid MFI/RSI Divergence Lower",
overlay=false, // 하단 지표 설정을 위해 false
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
commission_type=strategy.commission.percent,
commission_value=0.05,
slippage=1)
// --- ---
group_date = "1. 백테스트 기간"
start_time = input.time(timestamp("2024-01-01 00:00:00"), "시작일", group=group_date)
end_time = input.time(timestamp("2026-12-31 23:59:59"), "종료일", group=group_date)
within_window() => time >= start_time and time <= end_time
group_osc = "2. 오실레이터 설정"
mfi_len = input.int(14, "MFI 기간", group=group_osc)
rsi_len = input.int(14, "RSI 기간", group=group_osc)
ob_level = input.int(80, "과매수 기준", group=group_osc)
os_level = input.int(20, "과매도 기준", group=group_osc)
group_div = "3. 다이버전스 감도"
lb_l = input.int(5, "피벗 왼쪽 범위", group=group_div)
lb_r = input.int(5, "피벗 오른쪽 범위", group=group_div)
group_risk = "4. 리스크 관리"
tp_pct = input.float(3.0, "익절 (%)", step=0.1, group=group_risk) / 100
sl_pct = input.float(1.5, "손절 (%)", step=0.1, group=group_risk) / 100
// --- ---
mfi_val = ta.mfi(close, mfi_len)
rsi_val = ta.rsi(close, rsi_len)
avg_val = (mfi_val + rsi_val) / 2 // MFI와 RSI의 평균값으로 부드러운 흐름 파악
// --- ---
// 저점 피벗 탐지 (MFI 기준)
pl = ta.pivotlow(mfi_val, lb_l, lb_r)
ph = ta.pivothigh(mfi_val, lb_l, lb_r)
// Bullish Divergence (상승 다이버전스)
var float last_pl_mfi = na
var float last_pl_price = na
bool is_bull_div = false
if not na(pl)
last_pl_mfi := mfi_val
last_pl_price := low
// 이전 저점 탐색
float prev_pl_mfi = ta.valuewhen(not na(pl), mfi_val , 1)
float prev_pl_price = ta.valuewhen(not na(pl), low , 1)
if low < prev_pl_price and mfi_val > prev_pl_mfi
is_bull_div := true
// Bearish Divergence (하락 다이버전스)
var float last_ph_mfi = na
var float last_ph_price = na
bool is_bear_div = false
if not na(ph)
last_ph_mfi := mfi_val
last_ph_price := high
float prev_ph_mfi = ta.valuewhen(not na(ph), mfi_val , 1)
float prev_ph_price = ta.valuewhen(not na(ph), high , 1)
if high > prev_ph_price and mfi_val < prev_ph_mfi
is_bear_div := true
// --- ---
if within_window()
if is_bull_div
strategy.entry("Bull", strategy.long, comment="Bull Div")
if is_bear_div
strategy.entry("Bear", strategy.short, comment="Bear Div")
strategy.exit("ExB", "Bull", limit=strategy.position_avg_price * (1 + tp_pct), stop=strategy.position_avg_price * (1 - sl_pct))
strategy.exit("ExS", "Bear", limit=strategy.position_avg_price * (1 - tp_pct), stop=strategy.position_avg_price * (1 + sl_pct))
// --- ---
// 배경 레이아웃
hline(ob_level, "Overbought", color=color.new(color.red, 50), linestyle=hline.style_dashed)
hline(50, "Middle", color=color.new(color.gray, 70))
hline(os_level, "Oversold", color=color.new(color.green, 50), linestyle=hline.style_dashed)
// 메인 지표 플롯
plot(mfi_val, "MFI (Money Flow)", color=color.new(color.aqua, 0), linewidth=2)
plot(rsi_val, "RSI (Momentum)", color=color.new(color.yellow, 50), linewidth=1)
// 다이버전스 발생 시 하단 지표 영역에 선 그리기
plotshape(is_bull_div ? mfi_val : na, "Bull Div Circle", shape.circle, location.absolute, color.green, size=size.tiny, offset=-lb_r)
plotshape(is_bear_div ? mfi_val : na, "Bear Div Circle", shape.circle, location.absolute, color.red, size=size.tiny, offset=-lb_r)
// 과매수/과매도 배경색
fill(hline(ob_level), hline(100), color.new(color.red, 90))
fill(hline(0), hline(os_level), color.new(color.green, 90))
MFI-RSI Convergence Strategy거래량(Volume)과 가격 모멘텀을 동시에 고려하는 **MFI(Money Flow Index)**는 지지선에서의 '진짜 반등'을 포착하는 데 가장 강력한 도구입니다. 여기에 RSI를 결합하여 모멘텀의 강도까지 확인하는 'Hybrid Volume-Momentum Oscillator' 전략을 작성해 드립니다.
하이브리드 지표의 핵심 메커니즘
MFI(Money Flow Index)의 역할:
MFI는 단순히 가격이 낮아졌는가만 보는 것이 아니라, **'낮은 가격에서 거래량이 터졌는가'**를 계산합니다.
지지선에서 MFI가 20 이하로 떨어진다는 것은 "스마트 머니"가 매집을 준비하는 단계이거나, 투매가 정점에 달해 거래량이 실린 반등이 임박했음을 뜻합니다.
RSI와의 컨버전스(Convergence):
RSI는 가격의 속도를 측정합니다. MFI가 과매도인데 RSI가 아직 높다면, 거래량은 들어오지만 가격의 하락 관성이 여전히 강하다는 뜻입니다.
이 코드의 핵심은 mfi_val <= mfi_low와 rsi_val <= rsi_low가 동시에 만족될 때만 진입하는 것입니다. 이는 거래량 유입 + 하락 관성 둔화가 일치하는 고확률 타점입니다.
리페인팅 차단 및 현실적 시뮬레이션:
ta.mfi와 ta.rsi는 기본적으로 현재 봉의 종가를 기준으로 계산되므로 리페인팅이 발생하지 않습니다.
commission_value=0.05를 통해 거래소 수수료를 반영하여, 잦은 매매로 인한 손실 가능성을 미리 확인할 수 있게 설계했습니다.
//@version=6
strategy("MFI-RSI Convergence Strategy",
overlay=false, // 하단 지표 형태 확인을 위해 false 설정 (차트 위 신호는 별도 plotshape 사용)
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
commission_type=strategy.commission.percent,
commission_value=0.05,
slippage=1)
// --- ---
group_date = "1. 백테스트 기간"
start_time = input.time(timestamp("2024-01-01 00:00:00"), "시작일", group=group_date)
end_time = input.time(timestamp("2026-12-31 23:59:59"), "종료일", group=group_date)
within_window() => time >= start_time and time <= end_time
group_mfi = "2. MFI (Volume) 설정"
mfi_length = input.int(14, "MFI 기간", minval=1, group=group_mfi)
mfi_low = input.int(20, "MFI 과매도 (매수세 유입 대기)", group=group_mfi)
mfi_high = input.int(80, "MFI 과매수 (매도세 유입 대기)", group=group_mfi)
group_rsi = "3. RSI (Momentum) 설정"
rsi_length = input.int(14, "RSI 기간", minval=1, group=group_rsi)
rsi_low = input.int(30, "RSI 과매도", group=group_rsi)
rsi_high = input.int(70, "RSI 과매수", group=group_rsi)
group_risk = "4. 리스크 관리"
tp_pct = input.float(3.0, "익절 (%)", step=0.1, group=group_risk) / 100
sl_pct = input.float(1.5, "손절 (%)", step=0.1, group=group_risk) / 100
// --- ---
// MFI (가격 + 거래량 가중)
mfi_val = ta.mfi(close, mfi_length)
// RSI (가격 변동 강도)
rsi_val = ta.rsi(close, rsi_length)
// --- ---
// 매수 조건: MFI와 RSI가 모두 과매도 구간일 때 (강력한 반등 예상 지점)
long_condition = (mfi_val <= mfi_low) and (rsi_val <= rsi_low)
// 매도 조건: MFI와 RSI가 모두 과매수 구간일 때
short_condition = (mfi_val >= mfi_high) and (rsi_val >= rsi_high)
// --- ---
if within_window()
if long_condition
strategy.entry("Long", strategy.long, comment="VLM+MOM Bottom")
if short_condition
strategy.entry("Short", strategy.short, comment="VLM+MOM Top")
// 익절 및 손절 설정
strategy.exit("Ex Long", "Long", limit=strategy.position_avg_price * (1 + tp_pct), stop=strategy.position_avg_price * (1 - sl_pct))
strategy.exit("Ex Short", "Short", limit=strategy.position_avg_price * (1 - tp_pct), stop=strategy.position_avg_price * (1 + sl_pct))
// --- ---
// 배경 가이드라인
hline(mfi_high, "Upper Boundary", color=color.gray, linestyle=hline.style_dashed)
hline(50, "Middle", color=color.new(color.gray, 50))
hline(mfi_low, "Lower Boundary", color=color.gray, linestyle=hline.style_dashed)
// 지표 플롯
plot(mfi_val, "MFI (Volume Flow)", color=color.aqua, linewidth=2)
plot(rsi_val, "RSI (Momentum)", color=color.yellow, linewidth=1)
// 중첩 구간 강조 (Convergence)
fill_color = (mfi_val <= mfi_low and rsi_val <= rsi_low) ? color.new(color.green, 70) :
(mfi_val >= mfi_high and rsi_val >= rsi_high) ? color.new(color.red, 70) : na
bgcolor(fill_color)
// 신호 발생 시 하단에 아이콘 표시
plotshape(long_condition, title="Buy Signal", location=location.bottom, color=color.green, style=shape.triangleup, size=size.small)
plotshape(short_condition, title="Sell Signal", location=location.top, color=color.red, style=shape.triangledown, size=size.small)
RADAR_V67_TESTThis V67 indicator is a comprehensive trend-following strategy designed to filter out market noise and identify high-probability entries in the cryptocurrency market.
The system is built on three major technical pillars:
Hull Moving Average (HMA): Provides superior reactivity to trend reversals compared to standard moving averages.
Supertrend: Acts as a primary trend filter to ensure we only trade in a confirmed bullish environment.
Volume Analysis (POC): The script identifies the Point of Control (POC) to ensure that buy signals occur above institutional congestion zones.
The buy signal (Screener_Signal = 1) is triggered only when the price crosses above the Hull MA while remaining above the Supertrend and the volume POC. This is a robust tool for both swing trading and day trading, focusing on momentum and institutional support.
Le Supertrend : Il sert de filtre de sécurité pour s'assurer que nous sommes dans une dynamique haussière confirmée.
L'analyse du Volume (POC) : Le script identifie le prix où le volume a été le plus important (Point of Control) pour s'assurer que l'achat se fait au-dessus des zones de congestion institutionnelles.
Le signal d'achat (Screener_Signal = 1) est déclenché uniquement lorsque le prix croise la Hull MA à la hausse, tout en restant au-dessus du Supertrend et du POC de volume. C'est un outil robuste pour le swing trading et le day trading.
Big Trend Catcher: Quad-Gate & VCP & ATR trailing Swing TradeThe Strategy Philosophy
This is designed for Daily Charts to capture the large chunks if not all of a primary trend. It focuses on the "VCP" (Volatility Contraction Pattern), combined with high-grade momentum filtering.
1. How VCP (The Quiet Zone) is Calculated
The script identifies "Volatility Contraction" by measuring the Bollinger Band Width (BBW).
* The Math: It calculates the standard BBW: $(Upper Band - Lower Band) / Mid Band$.
* The "Quiet" Threshold: It compares the current width to its own 50-period Simple Moving Average.
* The Signal: When the current width is narrower than the 50-period average, the stock is in a "Quiet Zone" (represented by the blue background). This indicates energy is coiling for a potential breakout.
2. How Rate of Change (ROC) is Calculated
Unlike a standard ROC, this "Wizard" version uses a smoothed momentum filter to reduce whipsaws:
* Raw ROC: First, it calculates the raw percentage change over 15 bars: $100 x (Close / Close(15) - 1).
* Smoothing: This raw value is then smoothed using a 10-period EMA.
* The Gate: The ROC Gate only turns green when this smoothed value is greater or equal to 0, ensuring the stock has genuine upward velocity before you enter.
3. What the Indicators on the Chart Show
* Yellow Line (20 EMA): Your "Tactical Line." It tracks short-term momentum and acts as a trigger for Phoenix re-entries.
* Blue/Gray Line (100 EMA): Your "Regime Filter." It turns Blue when the trend slope is positive and Gray when negative.
* Thin Gray Outer Bands: These are Bollinger Bands set at 3 Standard Deviations from the 100 EMA. They mark extreme "Climax Zones" where price is statistically overextended.
* Stepped Red/Green Line (ATR Stop): The "Iron Floor." It uses a 20-period ATR with a 3.0 multiplier and an HHV (Highest High Value) lookback to ensure the stop only moves up, never down.
* Yellow Crosses (Gate Wait): These small icons appear above the bars when a signal has been detected but one or more "Wizard Gates" (such as the ROC or 100 EMA Slope) are not yet satisfied, signifying the strategy is waiting for full confirmation.
4. How to Trade This Strategy
* Step 1: The Setup: Look for the Blue Background on the daily chart, signifying a Volatility Contraction.
* Step 2: The Entry: An Initial Entry (Lime Triangle) fires when the price breaks out of the Quiet Zone with a volume spike. This volume must be greater than 1.3 times the 20-period Simple Moving Average of volume to confirm significant buying interest. An entry only occurs when all Quad-Gates (ROC, EMA Slope, Price > ATR) are satisfied.
* Step 3: Pyramiding: If the trend gains "Velocity" (price > 10% from entry), the script will signal a second unit to maximize gains during runaway moves.
* Step 4: The Exit: Sell the entire position if the price closes below the ATR Trailing Stop (Trend Death) or if the 100 EMA trend turns down.
5. The Phoenix Re-entry
If you are stopped out but the stock immediately recovers above the 20 EMA within 10 bars, a Phoenix Entry (Orange Triangle) will fire. This allows you to catch "Power Resumptions" where the initial shakeout was a bear trap.
Multiple Daily Breakouts (Close Only)Pine Script 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 backtesting 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.
Update: removed continuous lines between bars
Update: added h/l lines
Update: renamed
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.
Volatility Breakout System [Fixed Risk]
This is a trend-following breakout strategy designed to capture volatility expansion while filtering out low-momentum "chop." It is built on the philosophy that significant price moves are often preceded by a breakout of volatility bands (Keltner Channels) accompanied by Volume and Trend Strength (ADX).
Strategy Logic:
Volatility Breakout: The primary trigger is a candle closing outside the Keltner Channels. This indicates price is moving faster than the average range.
Trend Filter: Trades are only taken in the direction of the 200 EMA.
Momentum Filter (ADX): The ADX filter ensures we only enter when the trend strength is above a specific threshold (Default: 20). This prevents the strategy from buying tops or selling bottoms in ranging markets.
Volume Confirmation: A breakout without volume is often a fake-out. This script requires volume to be higher than the moving average.
Risk Management (Automated):
Stop Loss: Based on ATR (Average True Range) to adapt to current market volatility.
Trailing Stop: Once the trade moves in favor, a trailing stop is activated to lock in profits.
Breakeven: If price moves X% in favor, the Stop Loss is automatically moved to the entry price to protect capital.
Cooldown: Includes a safety mechanism to prevent over-trading immediately after a signal.
Backtesting Notes:
This script is set up with use_bar_magnifier=true. For accurate results, use this on higher timeframes (1H, 4H) or ensure you have a Premium account for intrabar inspection.
Inputs:
You can toggle the "Compounding" feature to test fixed cash vs. % equity growth.
Webhooks are fully configurable for alert automation.
VSA - Absorption - Bookmap
- Backtest on Gold, ES, major forex (liquid instruments where VSA works best).
- Filter with trend (EMA 50/200) or session (London/NY open).
- Combine with your Bookmap: use Pine signal → confirm with absorption/iceberg + delta flip.
- Risk: 0.5–1.5% per trade, 1:3+ R:R.
OFM - ONE Trade Per Day MAXthis is helper to clarify the market trend and supply and demand zones to work with enjoy!
Strategy EMA trend & MACD 5m-15mStrategy using multiple EMAs as a trend & MACD as a signal, using 5m and 15m timeframe, 5m is a main timeframe.
Bar-Close Confirmed SupertrendOverview
This indicator is a Supertrend-style trend follower that confirms direction changes only after a bar closes. Trend flips are determined using the previous bar’s close relative to the bands, which helps avoid intrabar changes during live candles.
How it works
Computes ATR (Average True Range)
Builds upper/lower bands using ATR and a multiplier
Updates trend direction only when a prior candle confirms a break of the band
Confirmation logic (bar-close based)
Trend direction is updated using conditions based on the previous candle, such as:
close > upper → confirm uptrend
close < lower → confirm downtrend
Because signals are confirmed on the prior bar, trend changes and markers are displayed only when confirmation exists.
Signals
Uptrend confirmation: prior candle closes above the upper band → bullish marker
Downtrend confirmation: prior candle closes below the lower band → bearish marker
Inputs
ATR Length (default 10)
ATR Multiplier (default 3.0)
Notes
This script is intended for bar-close workflows. Behavior and responsiveness may differ across markets and timeframes depending on volatility and chosen settings.
Futures Calendar Spread Mean Reversion Strategyfutures calendar spread strategy:
Make sure you type in the correct spread in your chart
3 standard deviations for entry, with a stop at 4 standard deviations, seems to work best
don't select tp at mean
Use with energies and grains futures, anything very seasonal
Caja TavoStrategy based on "The Box" by Z and Scott
This strategy is based on measuring price volatility one hour before the market opens and half an hour after.
The trade is made in the direction that breaks the upper or lower limits.rior o inferior.
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")
jaems_Double BB[Alert]/W-Bottom/Dashboard// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © Kingjmaes
//@version=6
strategy("jaems_Double BB /W-Bottom/Dashboard", shorttitle="jaems_Double BB /W-Bottom/Dashboard", overlay=true, commission_type=strategy.commission.percent, commission_value=0.05, slippage=1, process_orders_on_close=true)
// ==========================================
// 1. 사용자 입력 (Inputs)
// ==========================================
group_date = "📅 백테스트 기간 설정"
startTime = input.time(timestamp("2024-01-01 00:00"), "시작일", group=group_date)
endTime = input.time(timestamp("2099-12-31 23:59"), "종료일", group=group_date)
group_bb = "📊 더블 볼린저 밴드 설정"
bb_len = input.int(20, "길이 (Length)", minval=5, group=group_bb)
bb_mult_inner = input.float(1.0, "내부 밴드 승수 (Inner A)", step=0.1, group=group_bb)
bb_mult_outer = input.float(2.0, "외부 밴드 승수 (Outer B)", step=0.1, group=group_bb)
group_w = "📉 W 바닥 패턴 설정"
pivot_left = input.int(3, "피벗 좌측 봉 수", minval=1, group=group_w)
pivot_right = input.int(1, "피벗 우측 봉 수", minval=1, group=group_w)
group_dash = "🖥️ 대시보드 설정"
show_dash = input.bool(true, "대시보드 표시", group=group_dash)
comp_sym = input.symbol("NASDAQ:NDX", "비교 지수 (GS Trend)", group=group_dash, tooltip="S&P500은 'SP:SPX', 비트코인은 'BINANCE:BTCUSDT' 등을 입력하세요.")
rsi_len = input.int(14, "RSI 길이", group=group_dash)
group_risk = "🛡 리스크 관리"
use_sl_tp = input.bool(true, "손절/익절 사용", group=group_risk)
sl_pct = input.float(2.0, "손절매 (%)", step=0.1, group=group_risk) / 100
tp_pct = input.float(4.0, "익절매 (%)", step=0.1, group=group_risk) / 100
// ==========================================
// 2. 데이터 처리 및 계산 (Calculations)
// ==========================================
// 기간 필터
inDateRange = time >= startTime and time <= endTime
// 더블 볼린저 밴드
basis = ta.sma(close, bb_len)
dev_inner = ta.stdev(close, bb_len) * bb_mult_inner
dev_outer = ta.stdev(close, bb_len) * bb_mult_outer
upper_A = basis + dev_inner
lower_A = basis - dev_inner
upper_B = basis + dev_outer
lower_B = basis - dev_outer
percent_b = (close - lower_B) / (upper_B - lower_B)
// W 바닥형 (W-Bottom) - 리페인팅 방지
pl = ta.pivotlow(low, pivot_left, pivot_right)
var float p1_price = na
var float p1_pb = na
var float p2_price = na
var float p2_pb = na
var bool is_w_setup = false
if not na(pl)
p1_price := p2_price
p1_pb := p2_pb
p2_price := low
p2_pb := percent_b
// 패턴 감지
bool cond_w = (p1_price < lower_B ) and (p2_price > p1_price) and (p2_pb > p1_pb)
is_w_setup := cond_w ? true : false
w_bottom_signal = is_w_setup and close > open and close > lower_A
if w_bottom_signal
is_w_setup := false
// GS 트렌드 (나스닥 상대 강도)
ndx_close = request.security(comp_sym, timeframe.period, close)
rs_ratio = close / ndx_close
rs_sma = ta.sma(rs_ratio, 20)
gs_trend_bull = rs_ratio > rs_sma
// RSI & MACD
rsi_val = ta.rsi(close, rsi_len)
= ta.macd(close, 12, 26, 9)
macd_bull = macd_line > signal_line
// ==========================================
// 3. 전략 로직 (Strategy Logic)
// ==========================================
long_cond = (ta.crossover(close, lower_A) or ta.crossover(close, basis) or w_bottom_signal) and inDateRange and barstate.isconfirmed
short_cond = (ta.crossunder(close, upper_B) or ta.crossunder(close, upper_A) or ta.crossunder(close, basis)) and inDateRange and barstate.isconfirmed
// 진입 실행 및 알람 발송
if long_cond
strategy.entry("Long", strategy.long, comment="Entry Long")
alert("Long Entry Triggered | Price: " + str.tostring(close), alert.freq_once_per_bar_close)
if short_cond
strategy.entry("Short", strategy.short, comment="Entry Short")
alert("Short Entry Triggered | Price: " + str.tostring(close), alert.freq_once_per_bar_close)
// 청산 실행
if use_sl_tp
if strategy.position_size > 0
strategy.exit("Exit Long", "Long", stop=strategy.position_avg_price * (1 - sl_pct), limit=strategy.position_avg_price * (1 + tp_pct), comment_loss="L-SL", comment_profit="L-TP")
if strategy.position_size < 0
strategy.exit("Exit Short", "Short", stop=strategy.position_avg_price * (1 + sl_pct), limit=strategy.position_avg_price * (1 - tp_pct), comment_loss="S-SL", comment_profit="S-TP")
// 별도 알람: W 패턴 감지 시
if w_bottom_signal
alert("W-Bottom Pattern Detected!", alert.freq_once_per_bar_close)
// ==========================================
// 4. 대시보드 시각화 (Dashboard Visualization)
// ==========================================
c_bg_head = color.new(color.black, 20)
c_bg_cell = color.new(color.black, 40)
c_text = color.white
c_bull = color.new(#00E676, 0)
c_bear = color.new(#FF5252, 0)
c_neu = color.new(color.gray, 30)
get_trend_color(is_bull) => is_bull ? c_bull : c_bear
get_pos_text() => strategy.position_size > 0 ? "LONG 🟢" : strategy.position_size < 0 ? "SHORT 🔴" : "FLAT ⚪"
get_pos_color() => strategy.position_size > 0 ? c_bull : strategy.position_size < 0 ? c_bear : c_neu
var table dash = table.new(position.top_right, 2, 7, border_width=1, border_color=color.gray, frame_color=color.gray, frame_width=1)
if show_dash and (barstate.islast or barstate.islastconfirmedhistory)
table.cell(dash, 0, 0, "METRIC", bgcolor=c_bg_head, text_color=c_text, text_size=size.small)
table.cell(dash, 1, 0, "STATUS", bgcolor=c_bg_head, text_color=c_text, text_size=size.small)
table.cell(dash, 0, 1, "GS Trend", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 1, gs_trend_bull ? "Bullish" : "Bearish", bgcolor=c_bg_cell, text_color=get_trend_color(gs_trend_bull), text_size=size.small)
rsi_col = rsi_val > 70 ? c_bear : rsi_val < 30 ? c_bull : c_neu
table.cell(dash, 0, 2, "RSI (14)", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 2, str.tostring(rsi_val, "#.##"), bgcolor=c_bg_cell, text_color=rsi_col, text_size=size.small)
table.cell(dash, 0, 3, "MACD", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 3, macd_bull ? "Bullish" : "Bearish", bgcolor=c_bg_cell, text_color=get_trend_color(macd_bull), text_size=size.small)
w_status = w_bottom_signal ? "DETECTED!" : is_w_setup ? "Setup Ready" : "Waiting"
w_col = w_bottom_signal ? c_bull : is_w_setup ? color.yellow : c_neu
table.cell(dash, 0, 4, "W-Bottoms", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 4, w_status, bgcolor=c_bg_cell, text_color=w_col, text_size=size.small)
table.cell(dash, 0, 5, "Position", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 5, get_pos_text(), bgcolor=c_bg_cell, text_color=get_pos_color(), text_size=size.small)
last_sig = long_cond ? "BUY SIGNAL" : short_cond ? "SELL SIGNAL" : "HOLD"
last_col = long_cond ? c_bull : short_cond ? c_bear : c_neu
table.cell(dash, 0, 6, "Signal", bgcolor=c_bg_cell, text_color=c_text, text_halign=text.align_left, text_size=size.small)
table.cell(dash, 1, 6, last_sig, bgcolor=c_bg_cell, text_color=last_col, text_size=size.small)
// ==========================================
// 5. 시각화 (Visualization)
// ==========================================
p_upper_B = plot(upper_B, "Upper B", color=color.new(color.red, 50))
p_upper_A = plot(upper_A, "Upper A", color=color.new(color.red, 0))
p_basis = plot(basis, "Basis", color=color.gray)
p_lower_A = plot(lower_A, "Lower A", color=color.new(color.green, 0))
p_lower_B = plot(lower_B, "Lower B", color=color.new(color.green, 50))
fill(p_upper_B, p_upper_A, color=color.new(color.red, 90))
fill(p_lower_A, p_lower_B, color=color.new(color.green, 90))
plotshape(long_cond, title="Long", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(short_cond, title="Short", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)






















