Dark Pool Estimate Signal TrackerDark Pool Estimate Signal — Detect Potential Institutional Activity
Overview
The Dark Pool Signal v1.6 indicator is designed to detect unusual trading activity near VWAP zones, which can be associated with institutional dark pool transactions. By combining volume spikes, VWAP proximity, and optional trend filters, it provides clear visual cues of potential hidden accumulation or distribution zones.
Disclaimer: This script is for informational and educational purposes only. It does not constitute financial advice. All trading involves risk. Past performance is not indicative of future results.
🔍 Core Logic
This indicator identifies potential off-exchange activity by analyzing three key factors:
Unusual Volume Spikes: Highlights bars where the current volume significantly exceeds its moving average by a user-defined multiplier.
VWAP Proximity: Triggers when the price stays within a volatility-adjusted range (ATR-based) of the VWAP, a common characteristic of algorithmic execution.
Trend Confirmation: An optional EMA filter helps align signals with the broader market direction.
Accumulation Detection: Counts repeated signals within a lookback period to identify persistent institutional buying or selling pressure.
The result is a set of visual and alert signals indicating possible institutional footprints.
🧩 Features
Dynamic VWAP Range (ATR-based): Automatically adjusts VWAP proximity sensitivity based on current market volatility.
Multi-tiered Signal Strength: Differentiates between Normal, Strong, and Accumulated signals to visualize the intensity of activity.
Non-Repainting Confirmation: Signals are confirmed only on bar close to ensure they do not repaint.
Language Support: Dual-language display (English / Korean).
Customizable Visualization: Easily adjust label size, color transparency, offset, and the duration of highlighted zones.
Smart Alert System (v1.6): Provides comprehensive alert() and alertcondition() calls for real-time push notifications.
Recommended Timeframe Notice (v1.6): Displays a small on-chart note suggesting optimal timeframes for analysis.
🕒 Recommended Timeframes
Type Recommended Use Description
1-Hour (default) Primary Analysis Offers a good balance between signal clarity and noise reduction. Ideal for most equities and ETFs.
30-Minute Short-term Confirmation Useful for intraday analysis and refining entry/exit points.
Daily Macro View Helps identify long-term institutional positioning and potential trend reversal zones.
< 15-Minute Experimental May generate excessive noise due to market micro-volatility. Not recommended for primary analysis.
💡 Tip: Combine 1H detection with Daily chart confirmation for a more robust, dual-layer view of institutional flow.
📊 Visualization
Purple Diamonds: Strong or Normal Buy signals
Red Diamonds: Strong or Normal Sell signals
Translucent Boxes: Highlight the estimated duration of dark pool activity.
Optional Labels: Display volume, VWAP delta, and signal strength for detailed analysis.
All visual components can be toggled on or off in the settings.
⚙️ Alert System
Create alerts for each specific signal type directly from the chart's alert menu or your script settings.
⚡ Strong Buy/Sell
📡 Accumulated Buy/Sell
⬆️ Normal Buy/Sell
➖ Neutral Activity (Volume spike near VWAP without clear direction)
Set alert frequency to Once Per Bar Close for confirmed, non-repainting signals.
🧭 How to Use
Add the indicator to your chart.
Select your preferred language and timeframe.
Customize visualization and alert settings to your preference.
Observe how the combination of volume + VWAP + trend reveals potential accumulation or distribution zones.
Use alerts to monitor for significant institutional activity in real-time.
🧠 Important Notes
This indicator is non-repainting. Signals are confirmed at the close of each bar.
It is intended for analytical and educational use, not as a direct trading system.
It works across equities, ETFs, and crypto, but volume data reliability can vary by exchange. Always confirm signals with your own strategy and risk management.
Indicateurs et stratégies
VCP + TTM Squeeze Breakout Detection ToolThis open-source script combines two powerful concepts into a single breakout detection tool:
1. **VCP (Volatility Contraction Pattern)**
Based on Mark Minervini’s principle of structured volatility contraction.
The script identifies low ATR environments combined with a strong trend filter using EMA 50, EMA 100, and EMA 200.
A pivot high is fixed using a rolling high from the last X candles.
2. **TTM Squeeze (inspired by Beardy_Fred's Pro version)**
This module compares Bollinger Bands to Keltner Channels.
When the Bollinger Bands fit inside the Keltner Channels, it signals volatility compression.
The script classifies the squeeze intensity into four stages using colored dots:
- **Green:** No squeeze
- **Black:** Light compression
- **Red:** Medium compression
- **Orange:** Strong compression
A linear momentum oscillator adds directional confirmation by plotting aqua bars above price if momentum is positive.
---
### **Signal Logic**
- **Yellow Dots (Setup Potential)**
Appear when VCP criteria are met **and** either momentum is bearish or the squeeze is still active (non-green).
- **Green Dots (Breakout Active)**
Appear only when:
- Price breaks above pivot high
- EMA filter is valid
- Squeeze has resolved (green)
- Volume is higher than the previous bar
- Momentum is positive
Breakout status is removed once volume AND true range drop below their respective short-term averages.
---
### **Visual Elements**
- 3 EMA Lines: EMA 50 (blue), EMA 100 (orange), EMA 200 (red)
- Pivot line (red), based on recent high
- Colored squeeze state (dots at zero line)
- Yellow dots (pre-breakout tension)
- Green dots (confirmed breakout)
- Aqua bars above price (momentum strength)
---
**Note:**
This script is for educational purposes only and does not constitute financial advice.
No alerts included yet. No external dependencies. No embedded advertising.
---
**License**
Portions of the TTM Squeeze code are derived from “Beardy Squeeze Pro” and are used under the terms of the Mozilla Public License 2.0.
www.mozilla.org
Delta Volume Signals by Claudio [hapharmonic]Modifications:
Percentages without decimals.
I replaced the 'Current Volume' row with two boxes: "Δ Vol" and its value, which changes color depending on the direction of the bearish/bullish candle.
Signals can change color in the settings.
Box spacing so the table doesn't constantly change size.
To be modified:
The Net Volume sign shouldn't change to negative when the candle is red.
If anyone does this, let me know...
claudio.ventola@hotmail.com
Best regards!
Close Price & (% Change / Volume)this places the ratio of change with volume to give us idea if the price is moving or not with volume. If ratio is more more means percent change is high than volumne if ratio is less then % change is less than volume
Volume with RVATVolume with relative volume at time to clearly highlight volume spikes and break outs
Dual Ichimoku CloudDual timeframe Ichimoku cloud (1x - Lower Timeframe & 5x - Higher timeframe). Higher timeframe trend can be identified in the same chart.
All Key Levels CompleteHave lines created for Yesterday Close, Prior Day High, Prior Day -1 Close, Prior Day Low, Prior Day -1 Low, Premarket High and Premarket Low.
Previous Day Close (PDC)pdc price just watch how it reacts it will say if bearish or bullish on day or can get a good entry took a while to make who likes it
Jasons Bullish Reversal DetectorThis bullish reversal detector is designed to spot higher-quality turning points instead of shallow bounces. At its core, it looks for candles closing above the 20-period SMA, a MACD bullish crossover, and RSI strength above 50. On top of that, it layers in “depth” filters: price must reclaim and retest a long-term baseline (like the 200-period VWMA), momentum should confirm with RSI and +DI leading, short-term EMAs need to slope upward, and conditions like overheated ATR or strong downside ADX will block false signals. When all of these align, the script flags a depth-confirmed bullish reversal, aiming to highlight spots where structure, momentum, and volatility all support a sustainable shift upward.
BTC Institutional Playbook Smart Liquidity + SqueezeBTC Institutional Playbook — Smart Liquidity + Squeeze + VWAP (v6, ADX fix)
A2B TRADING BY TREVOR WILLIAMS
A powerful visual tool combining ultra-smoothed Heikin-Ashi candles, a dynamic Z-Score deviation system, and a gradient-trending Moving Average (MA) with optional volatility-based shadow zones for enhanced trend detection and risk awareness.
ML+MA+ATRretardretardretardretardretardretardretardretardretardretardretardretardretardretardretardretardretardretardretardretard never believe this
ADX y DI + ATRADR + DI
Every time ADR cross 25, print an ATR value label
Every time ADR +25 and DI+ cross DI-, print an ATR value label
Every time ADR +25 and DI- cross DI+, print an ATR value label
I use ATR for my SL.
Session Top Bars — Equities Sessions (Asia / London / US) — MelbA minimal, non-obstructive session overlay that draws thin top bars for the Asia, London, and US equity sessions on any chart and timeframe. Designed to stay out of the way while giving instant session context—perfect for crypto, indices, futures, and stocks.
Default sessions (AEDT / Australia-Melbourne):
Asia: 10:00 → 17:45
London: 18:00 → 23:30
US: 23:00 → 07:00
(Weekends on by default for crypto; turn off for equities.)
Why it’s different
Top-only bands (no heavy background shading) so price action stays readable.
Asset-agnostic: works on any symbol/candlestick.
Adaptive top placement: hugs the top of the visible price area without distorting autoscale.
Session labels appear once at each session start, right on the strip (optional).
Inputs
Timezone: choose your clock (default Australia/Melbourne).
Show weekends: on for crypto, off for stocks.
Intraday-only: hide the overlay on 1D+ if you prefer.
Session windows: edit HHMM-HHMM for Asia / UK / US.
Colors & thickness: tweak gap from top, band thickness, and label size.
Tips
If the strip feels a touch low/high on your layout, nudge Gap below chart top or Band thickness.
To reduce small shifts when new extremes print, increase Recent range length (bars).
Use cases
Quickly spot which session drove a move.
Align entries/exits to cash session volatility (e.g., NYSE open).
Compare behavior across assets with a unified session view.
Notes
Times reflect equity session focus in AEDT by default; adjust to your needs.
For FX-style windows, just edit the session inputs.
Credits
Built from community feedback for a clean, professional session overlay.
Customizable MA 10/20/50/100/200Customizable EMA/SMA indicator. Select EMA (default) or SMA and support up to 5 timeframes.
Volume Delta Volume Signals by Claudio [hapharmonic]// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © hapharmonic
//@version=6
FV = format.volume
FP = format.percent
indicator('Volume Delta Volume Signals by Claudio ', format = FV, max_bars_back = 4999, max_labels_count = 500)
//------------------------------------------
// Settings |
//------------------------------------------
bool usecandle = input.bool(true, title = 'Volume on Candles',display=display.none)
color C_Up = input.color(#12cef8, title = 'Volume Buy', inline = ' ', group = 'Style')
color C_Down = input.color(#fe3f00, title = 'Volume Sell', inline = ' ', group = 'Style')
// ✅ Nueva entrada para colores de señales
color buySignalColor = input.color(color.new(color.green, 0), "Buy Signal Color", group = "Signals")
color sellSignalColor = input.color(color.new(color.red, 0), "Sell Signal Color", group = "Signals")
string P_ = input.string(position.top_right,"Position",options = ,
group = "Style",display=display.none)
string sL = input.string(size.small , 'Size Label', options = , group = 'Style',display=display.none)
string sT = input.string(size.normal, 'Size Table', options = , group = 'Style',display=display.none)
bool Label = input.bool(false, inline = 'l')
History = input.bool(true, inline = 'l')
// Inputs for EMA lengths and volume confirmation
bool MAV = input.bool(true, title = 'EMA', group = 'EMA')
string volumeOption = input.string('Use Volume Confirmation', title = 'Volume Option', options = , group = 'EMA',display=display.none)
bool useVolumeConfirmation = volumeOption == 'none' ? false : true
int emaFastLength = input(12, title = 'Fast EMA Length', group = 'EMA',display=display.none)
int emaSlowLength = input(26, title = 'Slow EMA Length', group = 'EMA',display=display.none)
int volumeConfirmationLength = input(6, title = 'Volume Confirmation Length', group = 'EMA',display=display.none)
string alert_freq = input.string(alert.freq_once_per_bar_close, title="Alert Frequency",
options= ,group = "EMA",
tooltip="If you choose once_per_bar, you will receive immediate notifications (but this may cause interference or indicator repainting).
However, if you choose once_per_bar_close, it will wait for the candle to confirm the signal before notifying.",display=display.none)
//------------------------------------------
// UDT_identifier |
//------------------------------------------
type OHLCV
float O = open
float H = high
float L = low
float C = close
float V = volume
type VolumeData
float buyVol
float sellVol
float pcBuy
float pcSell
bool isBuyGreater
float higherVol
float lowerVol
color higherCol
color lowerCol
//------------------------------------------
// Calculate volumes and percentages |
//------------------------------------------
calcVolumes(OHLCV ohlcv) =>
var VolumeData data = VolumeData.new()
data.buyVol := ohlcv.V * (ohlcv.C - ohlcv.L) / (ohlcv.H - ohlcv.L)
data.sellVol := ohlcv.V - data.buyVol
data.pcBuy := data.buyVol / ohlcv.V * 100
data.pcSell := 100 - data.pcBuy
data.isBuyGreater := data.buyVol > data.sellVol
data.higherVol := data.isBuyGreater ? data.buyVol : data.sellVol
data.lowerVol := data.isBuyGreater ? data.sellVol : data.buyVol
data.higherCol := data.isBuyGreater ? C_Up : C_Down
data.lowerCol := data.isBuyGreater ? C_Down : C_Up
data
//------------------------------------------
// Get volume data |
//------------------------------------------
ohlcv = OHLCV.new()
volData = calcVolumes(ohlcv)
// Plot volumes and create labels
plot(ohlcv.V, color=color.new(volData.higherCol, 90), style=plot.style_columns, title='Total',display = display.all - display.status_line)
plot(ohlcv.V, color=volData.higherCol, style=plot.style_stepline_diamond, title='Total2', linewidth = 2,display = display.pane)
plot(volData.higherVol, color=volData.higherCol, style=plot.style_columns, title='Higher Volume', display = display.all - display.status_line)
plot(volData.lowerVol , color=volData.lowerCol , style=plot.style_columns, title='Lower Volume',display = display.all - display.status_line)
S(D,F)=>str.tostring(D,F)
volStr = S(math.sign(ta.change(ohlcv.C)) * ohlcv.V, FV)
buyVolStr = S(volData.buyVol , FV )
sellVolStr = S(volData.sellVol , FV )
// ✅ MODIFICACIÓN: Porcentaje sin decimales
buyPercentStr = str.tostring(math.round(volData.pcBuy)) + " %"
sellPercentStr = str.tostring(math.round(volData.pcSell)) + " %"
totalbuyPercentC_ = volData.buyVol / (volData.buyVol + volData.sellVol) * 100
sup = not na(ohlcv.V)
if sup
TC = text.align_center
CW = color.white
var table tb = table.new(P_, 6, 6, bgcolor = na, frame_width = 2, frame_color = chart.fg_color, border_width = 1, border_color = CW)
tb.cell(0, 0, text = 'Volume Candles', text_color = #FFBF00, bgcolor = #0E2841, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 0, 5, 0)
tb.cell(0, 1, text = 'Current Volume', text_color = CW, bgcolor = #0B3040, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 1, 1, 1)
tb.cell(0, 2, text = 'Buy', text_color = #000000, bgcolor = #92D050, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 2, text = 'Sell', text_color = #000000, bgcolor = #FF0000, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(0, 3, text = buyVolStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 3, text = sellVolStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(0, 5, text = 'Net: ' + volStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 5, 1, 5)
tb.cell(0, 4, text = buyPercentStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 4, text = sellPercentStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
cellCount = 20
filledCells = 0
for r = 5 to 1 by 1
for c = 2 to 5 by 1
if filledCells < cellCount * (totalbuyPercentC_ / 100)
tb.cell(c, r, text = '', bgcolor = C_Up)
else
tb.cell(c, r, text = '', bgcolor = C_Down)
filledCells := filledCells + 1
filledCells
if Label
sp = ' '
l = label.new(bar_index, ohlcv.V,
text=str.format('Net: {0} Buy: {1} ({2}) Sell: {3} ({4}) {5}/\ {5}l {5}l',
volStr, buyVolStr, buyPercentStr, sellVolStr, sellPercentStr, sp),
style=label.style_none, textcolor=volData.higherCol, size=sL, textalign=text.align_left)
if not History
(l ).delete()
//------------------------------------------
// Draw volume levels on the candlesticks |
//------------------------------------------
float base = na,float value = na
bool uc = usecandle and sup
if volData.isBuyGreater
base := math.min(ohlcv.O, ohlcv.C)
value := base + math.abs(ohlcv.O - ohlcv.C) * (volData.pcBuy / 100)
else
base := math.max(ohlcv.O, ohlcv.C)
value := base - math.abs(ohlcv.O - ohlcv.C) * (volData.pcSell / 100)
barcolor(sup ? color.new(na, na) : ohlcv.C < ohlcv.O ? color.red : color.green,display = usecandle? display.all:display.none)
UseC = uc ? volData.higherCol:color.new(na, na)
plotcandle(uc?base:na, uc?base:na, uc?value:na, uc?value:na,
title='Body', color=UseC, bordercolor=na, wickcolor=UseC,
display = usecandle ? display.all - display.status_line : display.none, force_overlay=true,editable=false)
plotcandle(uc?ohlcv.O:na, uc?ohlcv.H:na, uc?ohlcv.L:na, uc?ohlcv.C:na,
title='Fill', color=color.new(UseC,80), bordercolor=UseC, wickcolor=UseC,
display = usecandle ? display.all - display.status_line : display.none, force_overlay=true,editable=false)
//------------------------------------------------------------
// Plot the EMA and filter out the noise with volume control. |
//------------------------------------------------------------
float emaFast = ta.ema(ohlcv.C, emaFastLength)
float emaSlow = ta.ema(ohlcv.C, emaSlowLength)
bool signal = emaFast > emaSlow
color c_signal = signal ? C_Up : C_Down
float volumeMA = ta.sma(ohlcv.V, volumeConfirmationLength)
bool crossover = ta.crossover(emaFast, emaSlow)
bool crossunder = ta.crossunder(emaFast, emaSlow)
isVolumeConfirmed(source, length, ma) =>
math.sum(source > ma ? source : 0, length) >= math.sum(source < ma ? source : 0, length)
bool ISV = isVolumeConfirmed(ohlcv.V, volumeConfirmationLength, volumeMA)
bool crossoverConfirmed = crossover and (not useVolumeConfirmation or ISV)
bool crossunderConfirmed = crossunder and (not useVolumeConfirmation or ISV)
PF = MAV ? emaFast : na
PS = MAV ? emaSlow : na
p1 = plot(PF, color = c_signal, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 80), linewidth = 10, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 90), linewidth = 20, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 95), linewidth = 30, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 98), linewidth = 45, editable = false, force_overlay = true, display = display.pane)
p2 = plot(PS, color = c_signal, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 80), linewidth = 10, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 90), linewidth = 20, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 95), linewidth = 30, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 98), linewidth = 45, editable = false, force_overlay = true, display = display.pane)
fill(p1, p2, top_value=crossover ? emaFast : emaSlow,
bottom_value =crossover ? emaSlow : emaFast,
top_color =color.new(c_signal, 80),
bottom_color =color.new(c_signal, 95)
)
// ✅ Usar colores configurables para señales
plotshape(crossoverConfirmed and MAV, style=shape.triangleup , location=location.belowbar, color=buySignalColor , size=size.small, force_overlay=true,display =display.pane)
plotshape(crossunderConfirmed and MAV, style=shape.triangledown, location=location.abovebar, color=sellSignalColor, size=size.small, force_overlay=true,display =display.pane)
string msg = '--------- '+"Buy volume ="+buyVolStr+" Buy Percent = "+buyPercentStr+" Sell volume = "+sellVolStr+" Sell Percent = "+sellPercentStr+" Net = "+volStr+' ---------'
if crossoverConfirmed
alert("Price (" + str.tostring(close) + ") Crossed over MA " + msg, alert_freq)
if crossunderConfirmed
alert("Price (" + str.tostring(close) + ") Crossed under MA " + msg, alert_freq)
Smartalgo gn1Smart Algo gives you clear entry & exit signals using advanced price action logic. Built for traders who want consistency and speed.
Smart Algogn2 [ChartPrime]Smart Algo gives you clear entry & exit signals using advanced price action logic. Built for traders who want consistency and speed.
> The B symbols are the entry points
> Previous swing high/low is the SL
> Keep 1:2 OR 1:1.5 Risk-Reward
🔵IST-SESSIONS📌 IST-SESSIONS – TradingView Indicator
The IST-SESSIONS indicator clearly marks all major trading sessions throughout the day according to your specified schedule, helping traders visualize market activity and plan intraday strategies. It highlights session times and breaks for optimal clarity:
Morning Session: 10:15 – 12:00
Midday Break: 12:00 – 12:30
Day Session: 12:30 – 16:15
Afternoon Break: 16:15 – 16:45
Evening Session: 16:45 – 19:00
Evening Break: 19:00 – 20:00
Night Session: 20:00 – 23:00
✔️ Visualizes multiple trading sessions and breaks
✔️ Helps traders track market activity during specific hours
✔️ Perfect for intraday strategies and session-based analysis
✔️ Makes planning entries and exits easier across different market phases
How to use:
Apply the indicator to your chart.
Sessions and breaks are automatically highlighted according to the schedule.
Use the visual cues to optimize your trading strategy for each session.
🔵Blue Mark📌 Blue Mark – TradingView Indicator
The Blue Mark indicator highlights extreme price points across multiple timeframes (15m, 5m, 1m), helping intraday traders identify liquidity zones and areas of institutional interest. It is designed for traders who want to spot high-probability entry and exit points based on market structure and volume concentration.
✔️ Marks extreme highs and lows on 15m, 5m, and 1m charts
✔️ Ideal for intraday trading and short-term strategies
✔️ Helps detect liquidity zones where institutional orders are likely concentrated
✔️ Supports tactical entries and exits aligned with market structure
How to use:
Apply the indicator to your chart.
Observe the marked extreme points on different timeframes.
Use these levels to plan entries, exits, or confirm areas of institutional interest.
AL-SAT (Dönüş Odaklı: EMA+RSI+MACD)AL-SAT (Reversal Focused: EMA+RSI+MACD) combines three indicators to catch trend reversals.
- EMA50/200 crossovers define the main trend.
- RSI (14) confirms oversold/overbought reversals.
- MACD crossovers confirm momentum shifts.
Signals are generated at crossover points and remain valid until the opposite signal appears.
Best used on 1D or 4H timeframes. Works well for spotting early trend reversals, but may produce noise in sideways markets.
secret strategy [Smartalgo ]Smart Algo gives you clear entry & exit signals using advanced price action logic. Built for traders who want consistency and speed.
> The B symbols are the entry points
> Previous swing high/low is the SL
> Keep 1:2 OR 1:1.5 Risk-Reward
📊Trading Rules📌 Trading Rules – TradingView Indicator
The Trading Rules indicator is a practical tool for disciplined traders. It allows you to create a custom checklist of up to 25 trading rules, which you can tick off as each condition is met. Once all rules are checked, the indicator signals that it’s safe to enter a trade according to your strategy.
✔️ Helps maintain discipline and follow your trading plan
✔️ Fully customizable: add up to 25 rules
✔️ Visual checklist directly on your chart for quick reference
✔️ Reduces impulsive trades and promotes consistent trading behavior
How to use:
Add your trading rules to the checklist.
Tick each rule as it is satisfied.
Once all rules are checked, execute trades confidently following your strategy.