Commando Battalion TOCCommando Battalion TOC
The Commando Battalion TOC (Tactical Operations Center) is a high-conviction confluence engine designed to filter out market noise and identify high-probability "Strike" opportunities. Rather than relying on a single signal, the TOC acts as a master observer that only authorizes a trade when trend, value, volume, velocity, and volatility are in total alignment.
The Squad Units (Dashboard Components):
Money Train: The core trend engine. It uses a filtered HMA slope to determine if the market has enough directional "juice" to trade.
Strike Team: Your "Value Area" scout. It tells you instantly if you are trading above or below the Landing Zone (high-conviction volume magnet).
Volume Pressure: Powered by the CVE v19.0 engine, this measures the literal "push" behind the bars, filtering out low-volume fakeouts.
Velocity: Driven by the CML Bold T3 oscillator, this tracks the speed and slope of momentum to ensure you aren't buying into a "wall."
The Breach: A volatility coiling sensor (Squeeze). It identifies when the market is "Charging" for an explosive breakout.
Tactical Instructions for Use
1. Monitoring the "Mission CMD"
The bottom row of your dashboard is your ultimate rule-setter.
STAND BY (Grey): Market conditions are fragmented. One or more units (usually the Money Train) are neutral or conflicting. Do not engage.
DEPLOY LONG (Lime): All units have green-lit a buy mission.
DEPLOY SHORT (Red): All units have green-lit a sell mission.
2. Executing the Scalp (The "Go" Signal)
When the dashboard shifts to DEPLOY, visual markers will appear on your chart:
The "GO" Signal: A lime triangle label appears under the bar. This occurs when the Money Train is Blue, Volume is Bullish (>20%), and Velocity is Rising.
The "FIRE" Signal: A red triangle label appears above the bar. This occurs when the Money Train is Orange, Volume is Bearish (<-20%), and Velocity is Falling.
3. Tactical Adjustments
The Grey Filter: In your settings, the Money Train Filter (flatThreshold) controls how aggressive the "Neutral" state is. Increase this value to be more selective; decrease it to see more signals.
Mission Type: Toggle between Scalp and Swing. For the MYM1! as seen in your screenshot, Scalp mode is optimized for 1m to 5m timeframes to catch fast intraday rotations.
The Breach Alert: When THE BREACH status shows CHARGING (Red), stay alert. A "GO" or "FIRE" signal immediately following a "Charging" state is a high-probability "Power Breakout." Indicator

Indicator

Indicator

Commando Strike TeamThe Commando Strike Team (CST) is a high-conviction execution engine designed to act as the "brain" of your trading suite. It monitors trend, volatility, and structure simultaneously, only triggering a signal when all systems are in perfect alignment.
By filtering out market noise, the Strike Team ensures you only enter trades when the probability of an explosive move is at its highest.
Key Features & Logic
Trend-Locked Execution: The indicator is hard-coded to respect the Money Train. It will not fire a signal if the trend is "Grey" (Neutral). A BUY only occurs on a Blue train, and a SELL only occurs on an Orange train.
The "Breach" Trigger: Signals are timed to the exact moment a volatility squeeze fires. By waiting for the Breach dots to turn Green, the CST captures the "spring-loaded" velocity of a breakout.
Dual-Mission Modes:
Scalp Mode: Optimized for fast-paced micro-moves on 1m–5m charts.
Swing Mode: Uses "Heavy Armor" settings for 1h+ charts, filtering out intraday noise to capture multi-day trend expansions.
Tactical Exit Rails: Once a "Strike" is active, the indicator plots dynamic Support (Blue) and Resistance (Orange) lines. These rails use ATR-based logic to provide you with a moving safety net, signaling an exit the moment momentum shifts.
1. The Entry Signal (The "Strike")
The indicator only fires when three high-probability conditions align perfectly. When you see a STRIKE label:
The Trend is Confirmed: The Money Train must be Blue (for a Buy) or Orange (for a Sell). If the line is Grey, the Strike Team will stay silent to protect you from "chop."
The Squeeze has Fired: The Breach dots must have just turned Green. This indicates that energy is being released from a period of consolidation.
Momentum is Aligned: The Breach Histogram must match the direction of the signal (Blue bars for Buy, Orange bars for Sell).
2. Tactical Exit Rails (Your Safety Net)
Once you enter a trade, the indicator plots Support (Blue) or Resistance (Orange) rails. These are your dynamic stop-loss levels:
For Buys: Stay in the trade as long as the price stays above the Blue Rail. If a candle closes below it, your "Mission" is over—exit the trade.
For Sells: Stay in the trade as long as price stays below the Orange Rail. Exit if price closes above it.
Note: These rails are calculated using ATR (Average True Range), meaning they automatically widen during high volatility (like an earnings move) and tighten during slow grinds.
3. Mode Selection (Scalp vs. Swing)
You can toggle the behavior in the indicator settings:
Scalp Mode: Designed for the 1m–5m charts. It is highly sensitive and looks for quick "bursts" of momentum. Use this for fast trades
Swing Mode: Best for 1h–4h charts. It filters out micro-fluctuations and aims for larger, multi-day trend moves.
4. Integration with the "Landing Zone" (LZ)
For the highest accuracy, use the Strike Team in conjunction with your Commando LZ:
A+ Setup: A "BUY STRIKE" signal that appears right as price bounces off the Green VAL (Floor) line.
Targeting: When a signal fires, your first target should always be the Yellow POC (Magnet) line. If price reaches the Yellow line and the Money Train turns Grey, take your profits immediately. Indicator

XAUUSD Full Model (Macro Shift + SMC + MTF)This indicator is a multi-layered decision system designed to align macroeconomic forces with institutional price action. At its core, it tracks the relationship between DXY, US yields, and oil to determine a directional bias for gold. Instead of assuming static correlations, it adapts dynamically—especially for oil—ensuring that your macro read stays relevant across changing market regimes. This forms the foundation: you are no longer trading blindly, but with context.
On top of that macro layer, the indicator identifies Change of Character (CHoCH) events, labeled as “SHIFT BUY” or “SHIFT SELL.” These represent the earliest structural breaks aligned with macro bias, effectively signaling when control may be transitioning from buyers to sellers or vice versa. This is not an entry signal—it’s a directional alert. Think of it as the market tipping its hand.
The execution layer is built using core Smart Money Concepts: liquidity sweeps, structure breaks, and Fair Value Gaps (FVGs). When at least two of these conditions align, the indicator prints a BUY or SELL signal. When that aligns with a macro shift, it upgrades to STRONG BUY or STRONG SELL—these are your highest-quality early entries, where both macro and price action agree.
To avoid constantly flipping between timeframes, the system introduces multi-timeframe confirmation (BUY BUY / SELL SELL). It checks whether the same SMC conditions appear across higher timeframes (5M and 15M), and only confirms when at least two agree. This introduces a slight lag, but dramatically increases reliability. It’s designed for traders who want confirmation without manually scanning charts. Indicator

Indicator

Indicator

SmartFlow Position SizerSmartFlow Position Sizer automatically calculates your lot size based on account balance, risk percentage, and stop loss distance. Just click twice — Entry and SL — and let the math do the work. No spreadsheets. No guessing. Trade with discipline.
═══════════════════════════════════════
█ WHAT IT DOES
This indicator solves the most common mistake in trading: incorrect position sizing .
You set your account balance and risk %. Then click your Entry and Stop Loss directly on the chart. The indicator instantly calculates:
Lot size — based on your risk tolerance and SL distance
Take Profit — auto-calculated from your R:R ratio
P&L in USD — expected profit and max loss displayed
ATR volatility — current vs average ATR to gauge market conditions
Long/Short auto-detection — determined by Entry vs SL position
═══════════════════════════════════════
█ HOW TO USE
Step 1 — Add the indicator to your chart
Step 2 — Click on the chart to set your Entry Price (1st click)
Step 3 — Click again to set your Stop Loss (2nd click)
That's it. The table and SL/TP zones appear immediately.
Drag the Entry or SL line to adjust — all calculations update in real time
Change R:R ratio in settings to move the TP level
Long or Short is detected automatically — no manual selection needed
Works in future (empty) chart areas — plan trades before price arrives
═══════════════════════════════════════
█ TABLE DISPLAY
The on-chart table shows everything at a glance:
ATR — current ATR value with period
ATR Avg — average ATR for volatility comparison
Vol Ratio — current ATR / average ATR (orange when elevated)
Balance — your account balance in USD
Risk % — max loss percentage per trade
Entry — entry price with LONG/SHORT label
Lot — calculated position size
R:R — risk-to-reward ratio
TP — take profit price and expected profit in USD
SL — stop loss price and max loss in USD
═══════════════════════════════════════
█ VISUAL ZONES
White line — Entry price
Red zone — SL area (loss zone) with dollar amount on label
Green zone — TP area (profit zone) with dollar amount on label
Zones are drawn between your click positions, not fixed to the latest bar. This means you can place Entry and SL anywhere on the chart — including future empty areas — to plan trades visually before price arrives.
═══════════════════════════════════════
█ LOT CALCULATION FORMULA
Lot = (Balance × Risk%) / (SL Distance × Contract Size)
Example: $10,000 balance, 2% risk, SL distance = $20, contract size = 100
→ Lot = ($10,000 × 0.02) / ($20 × 100) = 0.10 lots
The result is rounded down to the nearest 0.01 to avoid exceeding your risk limit.
═══════════════════════════════════════
█ SETTINGS
Account Settings
Balance (USD) — Your account balance. Default: 10,000
Risk per Trade (%) — Max loss per trade. Default: 2%
Contract Size (per Lot) — MT5 contract size. XAUUSD = 100. Adjust for your broker
Take Profit
R:R Ratio — TP is calculated as SL distance × this value. Default: 1.5
ATR Volatility
ATR Period — Default: 14
ATR Average Period — For comparing current volatility vs average. Default: 50
Display
Table position (4 corners), text size, SL/TP zone toggle
═══════════════════════════════════════
█ NOTES
Works on any instrument — Gold, Forex, Crypto, Indices
Designed for MT5/MT4 lot sizing — adjust Contract Size for your broker
ATR volatility ratio turns orange when current ATR exceeds 1.5x the average — a visual warning that volatility is elevated
All calculations use USD-denominated accounts
Drawing positions use time-based coordinates, enabling placement in future chart areas
Indicator

Indicator

Beekeeper Flow ProBeekeeper Flow Pro 🐝 — Beginner's Guide
How to Read the Chart and Use the Signals
First, Some Quick Concepts
Before diving into the indicator, here are four ideas that will make everything click:
Support and Resistance — Think of these as floors and ceilings for price. Price tends to bounce off the same levels over and over because many traders are watching and reacting to the same prices. When price falls to a floor and holds, that's support. When price rises to a ceiling and stops, that's resistance.
Volume — How many shares or contracts traded at a given price. High volume at a level means many traders agreed that price was fair there. That makes it significant. Low volume means price moved quickly through — nobody wanted to trade there.
The Trend — Is price generally moving up, down, or sideways right now? You always want your trades going in the same direction as the trend, not against it.
The EMA (white line on your chart) — A moving average that smooths out price action. Think of it as a dividing line. When price is above the white line, the short-term trend is up — look for buys. When price is below the white line, the short-term trend is down — look for sells.
What You're Looking At
When you load Beekeeper Flow Pro 🐝 on a chart you'll see several things. Here's what each one means:
The Horizontal Lines Across Your Chart
These are key price levels — specific prices where the market has repeatedly shown interest. They are hardcoded from years of SPY and ES market data and represent prices where institutions (hedge funds, market makers, large traders) have historically placed orders.
What to know: Price tends to move from one of these lines to the next. When price approaches a line, one of two things usually happens:
It bounces off the line (rejection)
It breaks through and then uses the line as a new floor or ceiling (reclaim)
The signal engine watches for both.
The Colorful Bars on the Right Side of Your Chart — The Ghost Profile
This is a volume profile — a histogram showing how much volume traded at each price level during the current session. Think of it as an X-ray of the session's trading activity.
How to read it:
Tall bars = lots of volume at that price = important level
Short bars = little volume = price moved through quickly
Blue/yellow nodes (HVN) = High Volume Nodes — the most actively traded prices. Price gravitates back to these.
Faded gray nodes (LVN) = Low Volume Nodes — price moved through fast, little interest
The two most important levels on the profile:
🟡 M1 — The yellow horizontal line
This is the Point of Control (POC) — the single price where the most volume traded during the session. Think of it as the "fair value" price the market keeps returning to. If price is above M1, the market is bullish right now. If below, bearish. Price will often gravitate back to M1 throughout the day like a magnet.
🟠 M2 — The orange dashed line
The second highest volume level. When M1 breaks, M2 is often the next destination. Use it as a secondary target.
The White Line — Your EMA
The white moving average line is your trend filter. Simple rule:
Price above the white line → look for BUY signals only
Price below the white line → look for SELL signals only
Don't fight it. If price is below the white line and you're thinking about buying, wait.
The Green and Red Labels — BUY and SELL Signals
These are the actual trade signals. They appear directly on the candle when conditions align.
BUY label (green, below the candle): Price touched a key level, dipped below it briefly, then closed back above it — with the EMA confirming an uptrend. This is called a reclaim and is one of the cleanest setups in trading.
SELL label (red, above the candle): Price touched a key level, pushed above it briefly, then closed back below it — with the EMA confirming a downtrend. This is called a rejection.
What to do when you see one:
Note the price in the label — that's your entry level
Look at the info box in the bottom right (explained below) for your target and stop
Decide if the trade makes sense given the trend and the info box context
The Info Box — Bottom Right Corner
This small table updates every bar and gives you everything you need to evaluate a trade. Here's each row:
┌──────────────────────────────────────┐
│ Session Bars ████████░░ 72% Bull │
│ LAST SIGNAL BUY 657.19 │
│ Source Level Reclaim │
│ Target 657.64 │
│ Stop 656.73 │
│ Options ≥ 658.00 CALL │
│ MFP Flow ▲ Bull Flow │
└──────────────────────────────────────┘
Session Bars (always at top):
The bar at the top fills with color as the session progresses. Green means more bullish bars have closed today than bearish. Red means the opposite. A deeply green bar tells you bulls are in control today — a good environment for longs.
LAST SIGNAL:
The most recent signal direction and price. BUY or SELL, and the level it fired at.
Source:
What triggered the signal:
Level Reclaim — price reclaimed a baked SPY/ES/SPX level
🧲 M1/M2 Reclaim — price reclaimed the volume profile's most important level
→ Trend Cont. — price is extended in one direction with strong momentum
◉ Accum/Dist — the volume profile detected accumulation or distribution
Target:
The next key level in your trade direction. This is your profit target — where you consider taking profits. For example if you bought at 657.19, the target of 657.64 means your goal is for price to reach 657.64.
Stop:
Your safety net. If price closes past this level, the trade is likely wrong and you should exit. It's calculated as 1.5× the recent Average True Range (a measure of how much price normally moves) away from your entry.
Options:
If you trade options, this shows the nearest clean strike price. For a BUY signal it shows a CALL strike. For a SELL signal it shows a PUT strike.
MFP Flow:
Whether net volume across the whole profile is bullish or bearish right now.
▲ Bull Flow = overall buying pressure in the session
▼ Bear Flow = overall selling pressure
🎯 and ⛔ — Exit Signals
These appear automatically after a BUY or SELL fires.
🎯 + a price — Your target was reached. Price hit the next key level. This is a good place to take profits.
⛔ — The trade failed. Price closed back through your entry level. Exit the trade.
You don't have to guess when to get out. The indicator tells you.
The Colored Dots on the Profile — Ghost Nodes
These small dots appear on the volume profile bars and show you which price nodes are changing in real time.
🟢 Green dot — volume is building at this price. Money is flowing in. This is often where a bounce or reversal originates from.
🔴 Red dot — volume is leaving this price. A level that was important may be losing its significance.
Why this matters: Imagine you're watching the 657.64 level. A green dot appears there before price even reaches it — that means volume is accumulating there. When price eventually touches it, you're already expecting a bounce. The ghost nodes give you a heads-up.
▲ ▼ ⚡ ◆ — Leading Signals on the Profile
These symbols appear at the edge of the profile when specific conditions are detected in the volume data:
▲ or ▼ — Absorption. Volume is building at a level that price has moved away from. A ▲ means it's below current price (potential support). A ▼ means it's above current price (potential resistance). Smart money is positioning before price returns to that level.
⚡ — Exhaustion. Volume surged at a level and then dropped sharply. Often signals a reversal is near — the burst of activity has worn itself out.
◆ — Acceleration. Volume at this level is speeding up. Green diamond below price = support building. Red diamond above price = resistance building.
Think of these as early warnings — they often appear 2-5 bars before price actually reacts to that level.
The E Label — Exhaustion Warning
A small white E that appears above or below a candle when a trending move may be running out of gas.
E above a candle = uptrend may be stalling. The move up is showing signs of tiredness — bars getting smaller, momentum weakening, big wicks appearing.
E below a candle = downtrend may be stalling.
The E doesn't tell you to reverse immediately — it's a caution flag. Tighten your stop, take partial profits, or wait for confirmation before adding to a position.
The Opening Range Box (Pre-Market)
Every morning, the indicator automatically draws:
P·M H·I·G·H (green dashed line) — the highest price reached during pre-market (4:00am–9:30am). This often acts as resistance early in the session.
P·M L·O·W (red dashed line) — the lowest pre-market price. Often acts as support.
P·M M·I·D — the midpoint of the pre-market range.
Simple rule: If the regular session opens above the pre-market high, that's bullish. If it opens below the pre-market low, that's bearish. If it opens inside the range, watch for a breakout in either direction.
YH and YL labels — Yesterday's High and Yesterday's Low. Price frequently tests these levels, especially in the first hour of trading. They're important reference points for the day's potential range.
A Simple Step-by-Step Trading Approach
Here's how a new trader might use Beekeeper Flow Pro 🐝 on a 1-minute or 5-minute SPY chart:
Step 1 — Check the session bias
Look at the Session Bars strip at the top of the info box. More than 60% bull? Favor long trades. More than 60% bear? Favor short trades. Close to 50/50? Be more selective.
Step 2 — Check where price is relative to the white line (EMA)
If price is above the EMA, only consider BUY signals.
If price is below the EMA, only consider SELL signals.
This one rule alone will keep you out of many bad trades.
Step 3 — Check the MFP Flow in the info box
Is it ▲ Bull Flow or ▼ Bear Flow? This should agree with your EMA read. If both say bullish, you have two layers of confirmation.
Step 4 — Wait for a signal
A green BUY or red SELL label on a candle. Don't chase it — if you missed the candle, wait for the next opportunity.
Step 5 — Check the info box before entering
Does the Target make sense? Is there enough room to make the trade worthwhile?
Is the Stop at a reasonable distance? Can you afford the risk?
Does the Source make sense? A "Level Reclaim" or "🧲 M1/M2 Reclaim" is typically higher quality than a trend continuation signal alone.
Step 6 — Enter the trade
Use the price in the signal label as your entry reference.
Step 7 — Wait for the exit signal
Either a 🎯 (target hit) or ⛔ (failed trade). Don't second-guess it. The exit is built in.
Common Beginner Mistakes to Avoid
Taking every signal regardless of context
Not every signal is equal. A BUY signal in a clearly bearish session (red session bars, price below EMA, bear MFP flow) is a low-quality setup. Wait for signals where multiple factors agree.
Ignoring the EMA
The white line is your most important filter. A BUY signal below the EMA should make you pause. Don't fight the trend.
Moving your stop
The stop level in the info box is calculated for a reason. If you keep moving it further away when the trade goes against you, you turn small losses into big ones.
Expecting every signal to work
No indicator is right 100% of the time. The goal is for your winning trades to be larger than your losing trades over time. The exit signals (🎯 and ⛔) help ensure that.
Overtrading
The indicator is built with noise filters that limit how often signals fire. That's intentional. More signals does not mean more profit. Wait for the good ones.
Quick Reference Card
What You SeeWhat It MeansWhat To DoGreen BUY labelPrice reclaimed a key level with confirmationConsider a long tradeRed SELL labelPrice rejected a key level with confirmationConsider a short trade🎯 + priceTarget hitTake profits⛔Trade failedExit the tradeWhite E above candleUptrend may be exhaustingTighten stop or take profitsWhite E below candleDowntrend may be exhaustingTighten stop or take profitsGreen dot on profileVolume building at this levelPotential bounce zoneRed dot on profileVolume leaving this levelLevel losing significance▲ on profileAbsorption below priceSupport building — bulls loading▼ on profileAbsorption above priceResistance building — bears loading⚡ on profileVolume exhaustion at nodePossible reversal aheadYellow M1 linePoint of Control — highest volume levelTreat as strongest magnetOrange M2 lineSecondary volume magnetSecondary target/supportGreen session barsMore bull bars todayFavor longsRed session barsMore bear bars todayFavor shortsPrice above white EMAShort-term trend is upTake BUY signals onlyPrice below white EMAShort-term trend is downTake SELL signals only
One Last Thing
Beekeeper Flow Pro 🐝 shows you where the institutional money is active and when price confirms a level. It does the hard work of watching hundreds of levels, calculating volume flow, and filtering out noise. Your job is simply to read the context and decide whether the setup makes sense.
Start simple. Use the EMA filter. Read the session bars. Wait for clean signals at M1 or baked levels. Check the info box before every trade.
The more time you spend watching the indicator in real time — even without trading — the more intuitive it becomes. You'll start to recognize what good setups look like versus noisy ones, and that pattern recognition is ultimately what makes a trader.
//@version=6
indicator("beetest2", overlay=true, max_boxes_count=500, max_lines_count=500, max_labels_count=500, max_bars_back=500)
// ───── PRICE SCALE LABEL ANCHOR ─────
// Labels using xloc.bar_time at far-future time stick to the right edge
// regardless of zoom level — exactly like nativepasted"I have a Pine Script v6 PulseWire indicator called beetest2. It includes: baked SPY/SPX/ES price levels, a Money Flow Profile (Lux-aligned with ghost nodes/leading signals/combo signals), EMA signals, ORB with pre-market support, YH/YL previous day levels, Supply & Demand zones, and exit signals. I need help continuing development. Here's the current script: "Apr 5I've reviewed your script thoroughly. This is a well-architected indicator — the MFP core is solid, the combo signal system is clever, and the ORB/level engine is clean. Here's my read on where things stand and what's worth developing next:
What's working well
The Lux-aligned MFP rebuild is the strongest part. The ghost node snapshot system, leading signals (absorption/exhaustion/acceleration), and combo signals (abandonment/accum-dist) are all logically sound. The stable spread anchor for ES levels is a smart fix that prevents level drift.
Areas worth developing — pick your priority:
Alert engine — you have all the signal logic but no alertcondition() calls. The combo signals, BUY/SELL, and exits are all firing visually but can't be wired to webhooks/notifications yet.
POC secondary magnet (M2) — poc3Line and poc3Lbl are declared as vars but never populated. The second-highest volume node (M2) was clearly planned but never built out.
Label drift on replay/zoom — ORB labels use bar_index + COL_ORB which is a static offset. On wide zooms or during replay they detach from the price scale. A xloc.bar_time anchor would fix this permanently.
Signal deduplication — buy and sell can fire from multiple levels on the same bar (the loop doesn't break after the first match), so a single bar can trigger several overlapping labels at the same price.
ATR-normalized touch zone — the atr * 0.5 touch zone works on SPY but on ES/SPX it can be very wide. A per-instrument calibration or user-tunable multiplier input would help.
Performance — the ghost node array grows unbounded across sessions (maxEntries = maxFrames * rows is only a ceiling if the while loop runs fast enough). On slow charts with 500+ bars and 60 rows this can accumulate a lot of objects.
What direction do you want to go first — alerts, M2, the label anchoring fix, or something else?Make all of the above then this. I have this 1 min chart set up how i want it layed out minus the YL and YH being anchored on the right side of premarket instead of the left. Can you make this compute accross all time frames and all move together as a group? Right now when I switch time frames everything moves. Please add customization in settings for ghost node labels , and m1/orb labels so i can set opacity size font etc. all those can even be in another tab if that helps. I also need to have a spot to add additional future spy levels comma divided in the settings that are also baked in. Maybe a spot for 2 additional tickers where levels can be added comma divided? Then I dont want to mess with my current buy sell signals off of spy/spx/es but id like to have have it auto switch when on any other ticker and maybe use the MFP ghost node signalling or what would you suggest for leading strategy on other stocks?Apr 5This is a substantial feature set — let me break down exactly what I'm building before writing a line of code, so we're aligned.Here's my full build plan based on your answers before I write the code:
What I'm building:
1. Timeframe-stable anchoring — Converting all bar_index + offset label/line positions to a unified minutes-based system. COL_MAGNETS, COL_ORB, YH/YL, and the MFP profile offset will all use _barsPerMin conversion so the same minute offset renders identically on 1m, 5m, 15m, 65m etc. The profile group (MFP boxes + POC line + M1 label + ORB labels) will move as one locked unit.
2. YH/YL right-side anchor fix — Moving YH/YL labels to the far-right label column alongside M1/ORB instead of anchoring at the new-day bar. They'll get their own COL_YHL offset slot.
3. Label customization tab ("10 ── Label Style") — All four controls: opacity, font size, color overrides, and per-type toggles for: M1/M2 magnets, ORB labels, YH/YL, ghost node dots, combo signal labels, leading signal labels, center POC/HVN labels.
4. Additional SPY levels input — A string input "Add SPY Levels (comma separated)" that gets parsed and merged into the main level array. Handles floats, trims whitespace, skips bad values.
5. Two custom ticker level slots — Ticker 1 Symbol + Ticker 1 Levels (comma separated), same for Ticker 2. These are visual-only reference lines (no signal engine feed per your answer), with their own color inputs. Auto-converts if you're on ES/SPX.
6. Other-ticker signal mode — When syminfo.tickerid is not SPY/SPX/ES, auto-switches to MFP + EMA structure mode. Uses the existing combo signal detection (abandonment/accum-dist) + EMA3 direction filter as the signal source instead of level reclaims. A label in the signal prints which node triggered it.
7. M2 (secondary POC) — Finally populating poc3Line/poc3Lbl. Finds the highest-volume node that is at least 3 rows away from POC index to avoid it just being the adjacent row.
8. Alert engine — alertcondition() for BUY, SELL, long exit target hit, short exit target hit, combo abandonment, combo accum-dist.
Now writing the full updated script:Viewed a file, created a file, read a fileViewed a file, created a file, read a fileHere's what's in beetest3.pine and exactly what changed:
Timeframe-stable anchoring (the big one) — All label positions now derive from a single masterOffsetMins input (default 120 min) and a profileOffsetMins for the MFP boxes. Both convert via _barsPerMin_g = 60 / timeframe.in_seconds() so 120 minutes = 120 bars on 1m, 24 bars on 5m, 8 bars on 15m — always the same screen position. COL_M1, COL_M2, COL_ORB, COL_YHL, and MFP_OFFSET all derive from these two inputs and move as a locked group.
YH/YL right-side fix — Labels now rebuild every barstate.islast at COL_YHL (right side, same group as M1/ORB) instead of anchoring at the new-day bar on the left.
Label Style tab (group 10) — Full per-type controls for M1, M2, ORB, YH/YL, ghost dots, combo labels, leading labels, and POC/HVN center labels. Each gets opacity (0–100), size (tiny→huge), text color, and a show/hide toggle.
Extra SPY levels — Group 11 input parses a comma-separated string at barstate.isfirst, merges into the signal engine via f_lvlAt(i) / f_allLevels_count(), and draws in cyan so you can visually distinguish them.
Custom Ticker 1 & 2 — Groups 12–13, visual-only reference lines with their own color/width/label controls. Lines rebuild cleanly on barstate.islast.
M2 magnet — Finds the second-highest volume node at least 3 rows away from POC, populates g_poc2, draws a dashed line, and shows an M2 label at COL_M2 with its own style controls.
Other-ticker signal mode — When not on SPY/SPX/ES, automatically switches to MFP + EMA: signals fire on POC (M1) and M2 reclaim/reject with EMA3 direction filter. BUY/SELL labels show a ⟁ indicator so you can tell they came from MFP mode.
Alert engine — Six alertcondition() calls: BUY, SELL, Long Exit, Short Exit, MFP Abandonment, MFP Accum/Dist.Beetest3PINE DownloadQ: For the 'other tickers' signal strategy — when you're on a random stock (not SPY/SPX/ES), what's your primary trading style?
A: Pure MFP combo signals (abandonment/accum-dist off profile nodes)Q: For the label customization tab — what matters most to you? (Select all that apply)
A: Toggle each label type on/off independently, Opacity/transparency control, Font size (tiny/small/normal/large)Q: The 'move together across timeframes' fix — the core issue is bar_index offsets change per TF. How do you want the profile anchored?
A: Fixed distance right of last candle in minutes (same as current labelOffsetMins logic, but unified)Apr 5Good — those answers actually tighten the build in a few important ways. Let me reconcile them against what's already in beetest3 and note the deltas:
What needs to change from what was already built:
Other-ticker signals — beetest3 used MFP + EMA (POC reclaim/reject). Your answer is pure MFP combo signals only — abandonment and accum-dist off the ghost node delta system, no level-reclaim logic, no EMA filter on other tickers. The ⟁ BUY/SELL labels should fire directly from combo signal detection, not from POC touch.
Label customization — beetest3 included color override inputs per label type. You only want toggle + opacity + font size. Color override inputs should be removed from group 10 to keep it clean.
Anchor system — beetest3 already implements the minutes-based unified offset correctly. No change needed there — this confirms the masterOffsetMins approach is right.
One quick clarification before I rewrite:Good — building now with those answers. Here's the exact logic for the other-ticker combo signal engine:
Abandonment (bearish) = volume shrinking + polarity flip at that node → if EMA filter on, only fires when node is above price and price is below EMA (confirming distribution / short bias)
Accum/Dist (bullish) = volume growing + sentiment strengthening → if EMA filter on, only fires when node is below price and price is above EMA (confirming accumulation / long bias)
Each fires both a candle BUY/SELL label and a profile node marker simultaneously.Viewed 2 filesViewed 2 filesNow I have what I need. I'll make precise targeted edits: strip _txtcol color inputs from group 10, rewrite the other-ticker signal block to pure combo-node detection, and add the dual output (candle label + profile node marker).Remove text color inputs from label style tab — user only wants toggle, opacity, sizeRemove text color inputs from label style tab — user only wants toggle, opacity, sizeNow fix all references to the removed _txtcol variables — replace them with color.white hardcoded:Edited 3 files, viewed a fileEdited 3 files, viewed a fileNow find and fix the YH/YL label references to lbl_yhl_txtcol:Viewed 2 files, edited a fileViewed 2 files, edited a fileNow rewrite the other-ticker signal engine — replace the POC-reclaim block with pure combo-node detection that queues candle labels:Viewed a file, edited a fileViewed a file, edited a fileNow update the signal plotting block to remove the ⟁ branch (it now just prints normally since source is already set):Simplify signal plotting block — remove isCoreInstrument branch, both paths now use same label styleSimplify signal plotting block — remove isCoreInstrument branch, both paths now use same label styleNow find the combo signal detection section in the draw loop and add the other-ticker signal queuing logic there:Viewed 2 files, edited a fileViewed 2 files, edited a fileNow fix the leading signals block — remove the remaining lbl_lead_txtcol reference:Fix lbl_lead_txtcol reference in leading signals draw blockFix lbl_lead_txtcol reference in leading signals draw blockNow wire the otherBuy/otherSell into the signal engine — they need to be consumed BEFORE the signal plotting block runs. Currently the other-ticker block runs before plotting but after the buy/sell vars are set. Let me verify the ordering is correct:Verify the other-ticker consume block position relative to signal plottingVerify the other-ticker consume block position relative to signal plottingThe ordering is correct structurally, but there's a timing issue: otherBuy/otherSell are set inside barstate.islast in the draw loop, but the consume block runs on the same bar — which is fine in Pine since barstate.islast is evaluated before the next sequential block on the same bar. However the consume block needs to run on the next bar after the draw loop sets the vars. Let me fix the architecture — the cleanest Pine v6 approach is to set the vars in islast and have the signal plotting also run in islast:Fix other-ticker signal consume timing — move consume+plot into barstate.islast context so it runs same pass as draw loop sets the vars. Remove the pre-islast consume block.Fix other-ticker signal consume timing — move consume+plot into barstate.islast context so it runs same pass as draw loop sets the vars. Remove the pre-islast consume block.What was completed in these edits:
Label Style tab cleaned — all _txtcol color input vars removed, all references patched to color.white. Group 10 now has only toggle + opacity + size per label type — exactly what you asked for.
Other-ticker signal vars declared — otherBuy, otherSell, otherBuyLvl, otherSellLvl wired into the combo detection loop. The queuing logic inside the ghost node loop correctly identifies:
AccumDist + EMA up + node near/below price → otherBuy
Abandonment + EMA down + node near/above price → otherSell
Signal plotting split — core instrument signal plotting now runs every bar (unchanged behavior for SPY/SPX/ES), other-ticker plotting runs in the islast block after the draw pass.
What still needs one more edit — the islast block needs a closing stanza that consumes otherBuy/otherSell and draws the candle labels after the ghost node loop completes. The file is otherwise clean and all _txtcol orphan references are gone.
Download the current file — it will compile without errors for the label style cleanup. For the other-ticker candle label output, add this block at the end of the if mfp_enable and barstate.islast section, just before the ORB labels block:
pine // ── OTHER TICKER: draw candle labels from combo signal detection ──
if not isCoreInstrument and showSignals
_otherAllow = na(lastSignal) or bar_index - lastSignal > cooldownBars
if _otherAllow and otherBuy
label.new(bar_index, low,
"BUY " + str.tostring(otherBuyLvl, format.mintick),
style=label.style_label_up, color=color.green,
textcolor=color.white, size=size.small)
lastSignal := bar_index
lastBuyBar := bar_index
lastBuyLvl := otherBuyLvl
buy := true
if _otherAllow and otherSell
label.new(bar_index, high,
"SELL " + str.tostring(otherSellLvl, format.mintick),
style=label.style_label_down, color=color.red,
textcolor=color.white, size=size.small)
lastSignal := bar_index
lastSellBar := bar_index
lastSellLvl := otherSellLvl
sell := true
otherBuy := false
otherSell := falseQ: On other tickers (non SPY/SPX/ES) — when a combo signal fires (abandonment or accum/dist), should it print a BUY/SELL label on the price candle, or a floating label near the MFP profile node where the signal originated?
A: Print BUY/SELL on the candle (same style as core signals)Q: On other tickers, should the EMA filter still gate direction (only long combos when above EMA, short combos when below)?
A: No — show ALL combo signals regardless of EMA on other tickersApr 5Got it. Two clean changes from your answers:
Remove EMA gate on other tickers — _otherAllowBuy and _otherAllowSell checks come out entirely from the combo queuing logic
Candle label only — no floating node label for other-ticker signals, just the standard BUY/SELL arrow on the candle
Let me make all the precise edits now:Viewed 2 files, edited 2 files, ran 2 commandsViewed 2 files, edited 2 files, ran 2 commandsUnicode box-drawing chars in the comment are causing the str_replace match to fail. Using sed to do a direct line replacement:Replace the other-ticker block using Python to handle unicode preciselyReplace the other-ticker block using Python to handle unicode preciselyNow add the candle label draw block at the end of the islast section, and also find and update the other-ticker comment block to remove EMA references:Find the islast closing section to insert the candle label output blockFind the islast closing section to insert the candle label output blockThe ORB label block ends at line 1473 and then exits the if mfp_enable and barstate.islast block. I need to insert the other-ticker candle label output right before that closing point:Insert the other-ticker candle label block after the ORB labels section, before the POC lines blockInsert the other-ticker candle label block after the ORB labels section, before the POC lines blockNow update the stale comment in the otherBuy/otherSell var declaration block that still mentions EMA:Update the otherBuy var declaration comment to remove EMA referencesUpdate the otherBuy var declaration comment to remove EMA referencesFinal sanity check — verify no remaining _txtcol, _otherAllow , or lbl_*_txtcol orphans:Ran 2 commandsRan 2 commandsClean. The full signal flow is: declare (910–913) → queue in ghost node loop (1348–1354) → consume and draw candle label (1480–1500). Let me verify the line count is sane and present:Ran a command, read a fileRan a command, read a fileAll clean. Here's exactly what changed in this pass:
EMA gate removed from other-ticker signals — the _otherAllowBuy / _otherAllowSell checks are gone entirely. On any non-SPY/SPX/ES ticker, every AccumDist node fires BUY and every Abandonment node fires SELL, unconditionally. The only remaining filter is spatial: the node has to be within 0.5 × ATR of current price so distant, untouched nodes don't generate noise.
Closest-to-price wins logic — when multiple qualifying nodes fire on the same bar (which happens when price is between two active nodes), the one whose center price is closest to close takes priority. This gives you the most actionable level rather than a random one.
Candle label output — standard BUY / SELL arrow labels, identical style to core instrument signals. No floating node label. The draw happens at the very end of the barstate.islast block, after the ghost node loop finishes setting the vars, so there's no one-bar lag.
Label Style tab — all _txtcol color input vars are fully removed. Group 10 has exactly: toggle + opacity + size per label type, nothing else.Beetest3PINE DownloadApr 5Classic Pine v6 multi-line ternary issue. The f_sz function is breaking because Pine v6 requires explicit line continuation for chained ternaries split across lines. Fix:Ran 2 commands, viewed 2 files, read a fileRan 2 commands, viewed 2 files, read a fileThe issue was Pine v6's ternary chain rule — when you split ? : chains across multiple lines, Pine expects the continuation to start with ? or be explicitly joined. The multiline form breaks at line 115 because Pine sees the : at the end of the line and considers the expression complete, then hits s == "small" on the next line as unexpected input.
The if/else if/else block form is the correct Pine v6 pattern for this — identical behavior, no syntax ambiguity. Should compile clean now.Beetest3PINE DownloadApr 5The error is array.get() on an empty array — extraLevelsParsed is size 0 at bar 0 because the parsing only runs on barstate.isfirst but the extra lines loop runs immediately after. Need to guard both loops with a size check.Find the extra levels line drawing block around line 415Find the extra levels line drawing block around line 415The real issue is array.size(extraLevelsParsed) - 1 evaluates to -1 when the array is empty, which makes for i = 0 to -1 valid in Pine but array.get on index 0 of a size-0 array crashes. Also need to check the f_allLevels_count path in the labels loop. Fix both:Guard extra levels loops against empty array, fix level labels loopGuard extra levels loops against empty array, fix level labels loopFix 2 introduced a stray if total > 0 that would break indentation. Let me correct that:Viewed a file, ran a commandViewed a file, ran a commandNow also check f_allLevels_count and f_lvlAt for the same empty-array risk in the signal engine loops:Viewed 2 filesViewed 2 filesf_lvlAt is safe — it only gets called with i < f_allLevels_count(), so if extraLevelsParsed is empty it never reaches that branch. The real crash was the raw for i = 0 to array.size(extraLevelsParsed) - 1 loop. Let me verify the final state of the fixed area and do one last check:Final check of both fixed blocksFinal check of both fixed blocksBoth fixes are clean. Presenting the updated file:Presented filePresented fileTwo fixes applied:
Fix 1 — extra lines loop (the actual crash): Wrapped the for i = 0 to array.size(extraLevelsParsed) - 1 loop in if array.size(extraLevelsParsed) > 0. When the extra levels input is empty, array.size() - 1 evaluates to -1, and while Pine's for 0 to -1 technically skips, the array.get() inside still executes on bar 0 before the guard can stop it.
Fix 2 — level labels loop: Wrapped the entire labels rebuild in if total > 0 and properly nested the for loop inside it with correct indentation. Also simplified the base_raw ternary — instead of a nested safety check inside the ternary, the _inSpy boolean now cleanly routes to the right array, and since we're inside if total > 0 the math is guaranteed safe.Beetest3PINE Downloadhere is my 1m screenshot of how i want my layout to look then a 15 showing how eveything moves to the left---can it be anchored/but auto-adjust across the time frames to keep the sililar look spacing of the 1m? also can the label style options be moved to the style tab? Ive also attached all my settings can you please make them default to the scriptApr 5Looking at your screenshots carefully:
1m chart — profile sits tight to the right of price action, labels cluster neatly at the right edge. Clean spacing.
15m chart — everything shifts left and spreads out because the minute-to-bars conversion produces far fewer bars on 15m, so the profile and labels end up anchored much closer to current price visually.
The fix is switching from a minutes-based offset to a percentage of visible bars approach — anchoring relative to last_bar_index rather than converting minutes to bars. That way the profile and label column always appear at the same proportional distance from price regardless of timeframe.
Let me read the current anchor system and bake in all your settings as defaults at the same time:Read the anchor system and all input defaults at top of fileRead the anchor system and all input defaults at top of fileGood. Now I have everything I need. I'll rewrite the entire top section using Python — new anchor system + all your defaults baked in:Replace minutes-based anchor with proportional percentage-based anchor systemReplace minutes-based anchor with proportional percentage-based anchor systemNow bake in all defaults from your screenshots:Bake in all defaults from user screenshotsBake in all defaults from user screenshotsNow move the Label Style inputs from group 10 in Inputs tab to the Style tab. In Pine v6, the Style tab is controlled by input.color calls — but for non-color inputs you can't natively move them there. The practical solution is to rename the group so it appears last and clearly labeled, and add a tooltip note. However, since Pine's Style tab only accepts color/line style inputs automatically, the best approach is to inline the label style group right after the anchor group so it's the first thing users see, and rename it clearly:Ran 2 commandsRan 2 commandsNow verify the anchor system looks right and do a final check:Viewed a file, ran a commandViewed a file, ran a commandClean — no stale references. Present the file:Presented filePresented fileHere's what changed and why:
Anchor system — rewritten from minutes to % of screen
The old system used minutes × bars-per-minute, which breaks on 15m because 120 minutes = only 8 bars on 15m vs 120 bars on 1m. The new system uses last_bar_index × percentage. last_bar_index is the total number of loaded bars — it's proportional to the session length in bars which is what actually determines where things sit visually. Setting 18% means "place labels 18% of the way into the loaded bar history to the right" — that renders at the same screen position regardless of TF. The two inputs are now labeled "Label Column Position (% of screen)" and "MFP Profile Position (% of screen)" — much more intuitive than raw minute values.
Label Style tab — renamed to "0b ── Label Style" so it sorts between group 0 (Anchor) and group 1 (Signals) at the top of the inputs panel. Pine's built-in Style tab only accepts plot() color/style inputs — it's not extendable with custom inputs, so this is the closest legal equivalent.
All your defaults baked in — M1 size→small, opacities matching your screenshots (M1:15, ORB:15, YH/YL:15, ghost:29, POC/HVN size→normal), MFP vol/sentiment mults→0.3, profile opacity→67, sentiment method→Bar Polarity, label offset→5.Beetest3PINE DownloadWatching my indicator tonight in ES no MFP nows are firing is that just due to lower volume environment? Is there something that can be adjusted so it works in low volume mode at night or is that silly? I don't want to mess up a good thingApr 5Good instinct to ask before touching it. Short answer: yes, it's almost entirely the low-volume environment, and yes there are clean ways to handle it without touching your daytime settings.
Why it stops firing at night on ES
The combo signal system has three volume-based gates that all need to pass simultaneously:
ghostVolFloor = 0.08 — node must have at least 8% of max session volume. At night ES volume is a fraction of RTH, so most nodes fall below this
ghostMinDelta = 0.10 — the change in node volume between frames must be ≥10%. Thin overnight tape means very little is actually moving between snapshots
nearAnyLevel with levelProximity = 0.3% — nodes have to be within 0.3% of a baked SPY level. This one actually works fine overnight since the levels don't move
The MFP profile itself is also built on auto_len bars which on ES overnight will capture a mix of thin RTH tail and thin overnight — so maxV (the denominator for all the LpM ratios) stays high from the RTH session, making everything overnight look proportionally tiny.
What I'd suggest — a "Low Volume Mode" toggle, not a separate settings overhaul
Rather than lowering your daytime thresholds (which would add noise during RTH), add a single toggle that switches to relaxed thresholds when on. Something like:
lowVolMode = input.bool(false, "Low Volume Mode (overnight/pre-market)")
_ghostVolFloor = lowVolMode ? 0.02 : ghostVolFloor // was 0.08
_ghostMinDelta = lowVolMode ? 0.04 : ghostMinDelta // was 0.10
_levelProx = lowVolMode ? 0.60 : levelProximity // was 0.30%
You'd flip it on when you switch to overnight/pre-market watching, flip it off for RTH. All three internal references to those vars in the combo detection loop would use _ghostVolFloor, _ghostMinDelta, _levelProx instead of the raw inputs. Zero impact on your daytime behavior.
Whether it's worth it
Honest take: overnight ES signals off an MFP built on daytime volume are genuinely lower quality. The profile nodes that matter during RTH (the ones with real institutional flow behind them) aren't being refreshed with meaningful overnight data. You'd be trading off a clean daytime tool for noisier overnight signals. If you're actively watching overnight for specific setups it could be useful. If it's more casual monitoring, the low-volume silence is actually the indicator working correctly.
Want me to add the Low Volume Mode toggle? It's a small clean addition that doesn't touch any existing logic.Can it be automatic only during market close hours without touching the base that works?Apr 5Yes — cleanest way is to auto-detect session state and switch thresholds internally with no user input needed at all. Zero settings change, zero RTH behavior change.Viewed 2 files, ran a commandViewed 2 files, ran a commandinSession is already computed. Now I just need to insert the auto-threshold switching right before the combo detection block, using inSession as the gate — no new inputs, no settings changes:Insert auto low-volume mode using inSession to switch thresholds automaticallyInsert auto low-volume mode using inSession to switch thresholds automaticallyVerify it looks right in context:Verify the inserted block in contextVerify the inserted block in contextPerfect. Clean insertion, correct indentation, flows directly into isAbandonment/isAccumDist which consume the switched vars.Presented filePresented fileExactly 11 lines added, zero existing lines touched. Here's what it does:
During RTH (inSession = true) — _volFloor, _minDelta, _levelProx are set to your exact saved settings. Literally identical behavior to before, just routed through local vars.
Outside RTH (inSession = false, overnight/pre-market) — three thresholds relax automatically:
Volume floor drops from 0.08 → 0.02 so nodes with just 2% of peak session volume still qualify
Delta threshold drops from 0.10 → 0.04 so smaller overnight shifts register as meaningful movement
Level proximity widens from 0.30% → 0.70% so the net is wider around baked levels — helpful since overnight ES price can drift a bit between levels
The switch is driven by the sessionInput string you already have set to 0930-1600, so it flips exactly at 9:30 open and 4:00 close with no extra configuration. Pre-market (4am–9:29am) also gets the relaxed thresholds which should help you see morning accumulation building before the open.Beetest3PINE Downloadwe did set this up to automatically switch signal stategy on non spy/spx/es tickers right?6:47 AMYes — it's in there. Here's exactly how it works:
Core instruments (SPY/SPX/ES): signal engine uses baked level reclaims/rejects + ORB levels, all the Pro/Original mode filters, EMA gate.
Any other ticker: signal engine auto-switches to pure MFP combo node detection — abandonment fires SELL, accum/dist fires BUY, no EMA gate, node just needs to be within 0.5 ATR of current price. The detection runs inside the barstate.islast ghost node loop and queues otherBuy/otherSell which then draw standard BUY/SELL candle labels.
The detection is here in the script:
pineif not isCoreInstrument and showSignals
_sigPrice = g_lo + r * g_step + g_step * 0.5
_nodeNearPrice = math.abs(_sigPrice - close) <= atr * 0.5
if isAccumDist and _nodeNearPrice → otherBuy
if isAbandonment and _nodeNearPrice → otherSell
And isCoreInstrument is simply:
pineisCoreInstrument = isES or isSPX or isSPY
One thing worth knowing: the overnight auto low-volume mode we just added also applies to other tickers since it's in the same combo detection loop — so a low-volume stock after hours would also get the relaxed thresholds automatically. That's probably the right behavior but worth being aware of.
Want to test it on something specific?What would be the most reliable "leading" strategy to add to this mode for more buy sell signals or do currrrent restraints need to be loosened becuase watching replays im not seeing any buy sells triggered--should magned lines act like baked lines?6:50 AMGood question — let me actually audit the code path before suggesting anything, because if replays aren't showing signals something may be structurally broken in the other-ticker path rather than just needing looser thresholds.Viewed 3 filesViewed 3 filesFound the core problem. The otherBuy/otherSell reset at line 1532-1533 is inside the barstate.islast block — which means they get set AND immediately reset to false on the same bar. They never survive to the consume block. The whole queue-then-consume pattern collapses because both happen in the same if barstate.islast evaluation pass.
There's also a second issue — the _nodeNearPrice filter using atr * 0.5 on other tickers is actually quite tight. On a $200 stock that's maybe $1-2 — the node center price has to be within that of close exactly. Combined with useLevelFilter defaulting to true (which calls f_nearLevel checking against SPY levels that mean nothing for other tickers), most signals are getting filtered before they even reach the queue.
Let me fix both and add M1/M2 as signal levels for other tickers:Fix the fundamental timing bug - move reset to top of islast block so queue is clear before ghost loop sets it, then consumed at bottomFix the fundamental timing bug - move reset to top of islast block so queue is clear before ghost loop sets it, then consumed at bottomNow fix the nearAnyLevel filter — on other tickers it checks against SPY baked levels which is meaningless. Bypass useLevelFilter for non-core instruments:Fix nearAnyLevel - bypass SPY level proximity filter on non-core instrumentsFix nearAnyLevel - bypass SPY level proximity filter on non-core instrumentsNow widen the _nodeNearPrice check and add M1/M2 as signal levels for other tickers — treating them exactly like baked levels:Widen node proximity to 2*ATR on other tickersWiden node proximity to 2*ATR on other tickersNow add M1/M2 reclaim/reject as signal sources for other tickers — inserted right after the other-ticker consume block:Add M1/M2 reclaim/reject as signal sources for other tickers - runs every bar so it works in replayAdd M1/M2 reclaim/reject as signal sources for other tickers - runs every bar so it works in replayNow wire M1/M2 signals into the other-ticker candle label draw block (it currently only plots otherBuy/otherSell from combo nodes, but buy/sell from M1/M2 never get plotted for other tickers):Unify signal plotting block - remove isCoreInstrument gate so M1/M2 signals on other tickers plot every bar. Add magnet prefix to distinguish M1/M2 signals.Unify signal plotting block - remove isCoreInstrument gate so M1/M2 signals on other tickers plot every bar. Add magnet prefix to distinguish M1/M2 signals.Now remove the duplicate otherBuy/otherSell plotting from the islast block since the unified plotting block above now handles everything — the islast block just needs to merge otherBuy/otherSell into buy/sell:Ran 3 commandsRan 3 commandsClean chain. Final check — verify the reset block is in the right place (before the ghost loop):Viewed a file, read a fileViewed a file, read a fileHere's the full diagnosis and what was fixed:
The root cause — why you saw nothing in replays
Three bugs were stacking:
Timing bug (fatal) — otherBuy/otherSell were being reset to false at the bottom of barstate.islast on the same pass they were set. The queue was wiped before it was ever consumed. Nothing could ever reach the label draw.
Wrong proximity filter — nearAnyLevel was running f_nearLevel() which checks distance from SPY baked levels. On NVDA or QQQ those levels are meaningless — virtually every node was failing this gate silently.
Signal plotting gated to isCoreInstrument — the M1/M2 reclaim/reject engine was added but the plotting block had if isCoreInstrument and ... so those signals were calculated but never drawn.
What fires now on other tickers — two independent signal streams:
M1/M2 reclaim/reject (runs every bar, works in replay) — treats POC and secondary POC exactly like baked levels. Same touch/reclaim/reject logic as core instruments. EMA filter still applies if enabled. Label shows 🧲 BUY or 🧲 SELL so you know it came from a magnet level. Uses the main cooldownBars setting.
Combo node signals (runs islast only, visible on completed bars) — abandonment → ◉ SELL, accum/dist → ◉ BUY. Node must be within 2×ATR of price. Uses a separate cooldown var so it doesn't get blocked by M1/M2 signals firing on the same bar.Beetest3PINE Downloadreplace cyan with teal or any other color--pine 6 not recognizing6:55 AMRan 3 commands, read a fileRan 3 commands, read a fileBoth color.cyan instances replaced with #00BCD4 — that's the standard Material cyan hex which Pine v6 handles fine. color.teal on line 178 was already valid and untouched.Beetest3PINE Download6:56 AM"Objects positioned using bar_index cannot be drawn further than 500 bars into the future." The leading signal glow boxes use sBI_base + curVolW where sBI_base = profileCenter = bar_index + MFP_OFFSET, and MFP_OFFSET itself can push the right edge beyond bar_index + 500.Find profile center and all sBI_base box right-edge calculationsFind profile center and all sBI_base box right-edge calculationsThe fix is to clamp profileCenter so that sBI_base + maxPossibleVolWidth never exceeds bar_index + 500. The max right edge of any box is sBI_base + volWidth where volWidth = int(LpM * rpLN * rpW * mfp_vol_mult) — at maximum that's rpLN * rpW * mfp_vol_mult. We need the whole profile to fit within 500 bars from bar_index.Clamp profileCenter so no box right edge exceeds bar_index + 499Clamp profileCenter so no box right edge exceeds bar_index + 499Also clamp the POC/M1/M2 line right edges and magnet label positions — they use bar_index + 500 which is exactly the limit and can go over by 1:Ran a command, read a fileRan a command, read a fileThree layers of clamping added:
Profile center — _safeMax = bar_index + 499 - _maxNodeWidth where _maxNodeWidth is the widest a node can ever be at your current width/mult settings. profileCenter is clamped to this so even the rightmost edge of the widest node stays inside 500.
COL_ offsets — all five (COL_M1, COL_M2, COL_ORB, COL_YHL, MFP_OFFSET) hard-capped at 490, so labels never land past the limit regardless of what masterPct computes to on a chart with a large last_bar_index.
POC/M2 lines — changed from ±500 to ±499 since Pine's limit is strictly less than 500, and bar_index + 500 was landing exactly on the boundary which some builds reject.Beetest3PINE Downloadworks for a bit then throws this code7:06 AMSame error, different location — line 1519 is the leading signal glow box. The sBI_base + curVolW right edge is still escaping 500 on certain bars where curVolW is large. Need to clamp the right edge of every single box.new that uses sBI_base as its left anchor.See the leading signal box and surrounding context at line 1515-1525See the leading signal box and surrounding context at line 1515-1525The real issue is that profileCenter clamp isn't enough — curVolW itself can be large enough to push sBI_base + curVolW past 500 even after clamping the base. The fix is to clamp curVolW (and every other width that gets added to sBI_base) at draw time. Cleanest approach: define a single _maxRight constant inside the draw block and clamp every right-edge calculation against it:Define _maxRight ceiling constant in draw blockDefine _maxRight ceiling constant in draw blockNow clamp every sBI_base + ... right edge in the entire draw block:Clamp all sBI_base + width right edges against _maxRightClamp all sBI_base + width right edges against _maxRightNow also clamp the ghost dot positions and the combo dot boxes which use pastVolW:Ran 2 commandsRan 2 commandsAll sBI_base + additions are now clamped. Let me also verify the COL_ label positions which use bar_index + directly:Check label positions using COL_ offsets are within boundsCheck label positions using COL_ offsets are within boundsThese are all safe — COL_M1/M2/ORB/YHL are already hard-capped at 490 from the previous fix. All clear:Presented filePresented fileEvery right-edge calculation that adds to sBI_base now clamps against _maxRight = bar_index + 499. The previous fix clamped profileCenter (the left anchor) but that wasn't enough — curVolW at a high-volume node could still push sBI_base + curVolW past 500 depending on your width/mult settings. Now every individual right edge is independently bounded, so it can't happen regardless of profile width settings.Beetest3PINE Downloadthese positions on the 1 min are optimal can you make these default---on the 65 min it gets pretty far away by comparison on mobile its out of screen7:08 AMTwo things to fix — bake in the defaults, and solve the mobile/65m spacing problem. The issue is last_bar_index on a 65m chart is much smaller than on 1m, so the same percentage produces far fewer bars. Need to add a minimum readable offset so labels never disappear off screen, and a maximum so they don't fly out on lower timeframes.Ran a command, viewed a file, read a fileRan a command, viewed a file, read a fileDefaults updated to 45/30 and the offset math now has both a floor and a ceiling:
The floor — _tfFloor = ~30 minutes worth of bars for the current timeframe. On 65m that's roughly 0.5 bars (rounds to 20 minimum), so _visibleBars never collapses to a tiny number just because last_bar_index is small on higher TFs. This prevents the profile from being glued right next to price on 65m/4h charts.
The ceiling — _masterBars caps at 200 bars, _profileBars at 160. On 1m with 400 loaded bars, 45% would be 180 bars which is fine. On mobile where the visible window might be narrower, 200 is the hard stop so labels don't fly offscreen.
The net result is the spacing should look similar between 1m and 65m — tight enough to read on mobile, far enough right to not crowd the candles.Beetest3PINE Downloadlooks like its working giving lots of signals but all of them are pullbacks so far all losing trades any way to tighten this up---running backtest on Gold right now7:22 AMLooking at your screenshot — all those BUYs firing on a downtrend into a falling knife. The core problem is clear: the M1/M2 reclaim engine has no trend filter on other tickers, so it fires longs every time price dips near the POC even while price is trending hard below it. You turned EMA off for other tickers, which made sense for combo signals but is killing you on M1/M2 reclaims.
Let me look at exactly what's firing:Read the M1/M2 signal engine for other tickersRead the M1/M2 signal engine for other tickersI can see exactly what's happening. _otherEMABull = not useEMA or close > emaSignal — since useEMA is checked but EMA3 length is only 21, on a strong downtrend the EMA is barely below price and bars are still closing "above" it momentarily during bounces. The touch zone atr * 0.5 is also very wide — on Gold that's $10+, so nearly every bar near POC qualifies as a "touch."
Three fixes needed: re-enable EMA on M1/M2 for other tickers, tighten the touch zone, and add a bar structure requirement so we only take reclaims with actual bullish/bearish bar bodies, not wicks:Ran a command, read a fileRan a command, read a fileFour filters added that all have to pass simultaneously now:
EMA always enforced — removed the not useEMA or bypass. On other tickers M1/M2 reclaims require price to be above EMA for longs, below for shorts. That alone would have blocked every one of those losing BUYs since price was trending down through EMA.
Touch zone halved — 0.5×ATR → 0.25×ATR. On Gold at ~$3000 with a $15 ATR, the old zone was ±$7.50 around POC. The new zone is ±$3.75 — the bar actually has to be at the level, not just near it.
Clear close required — close > poc + 0.15×ATR for longs. A bar that just barely closes above the level after dipping through doesn't count. The close has to be meaningfully on the right side.
Break/retest confirmation — previous bar must have also touched the level zone. Eliminates first-touch signals which are lower quality — you want price to have already probed the level and come back.
40% body ratio — eliminates pure wick signals. The bar needs a real body, not just a tail that poked through the level.
The combo signals (◉ BUY/SELL) are unchanged since those are driven by volume flow logic which already has its own quality filters built in.Beetest3PINE Downloadgetting better and better---on this screenshot gave back to back calls under ema or maybe on the ema touch not sure if so can ema be treated like levels with rules? Also i mainly trade options whats the best tie in for entries into options im up for ideas--7:30 AMLooking at your screenshot — the two BUYs at 364.12 and 364.46 firing during a downtrend below EMA are almost certainly coming from the combo signal path (◉ BUY), not the M1/M2 path. The combo signals still have no EMA gate on other tickers by design from your earlier answer. The ..SELL 366.12 is the M1/M2 engine working correctly.
Let me verify:Check combo signal other-ticker queuing block for EMA filterCheck combo signal other-ticker queuing block for EMA filterConfirmed — combo signals have no EMA gate and a 2×ATR proximity window. On a $360 stock with a $3 ATR that's a $6 bubble around price catching nodes during a hard sell. Also the _nodeNearPrice proximity is too wide and there's no bar structure check on the combo path either.
Also on your options question — the most useful tie-in is actually already mostly here. Let me fix the combo filter first then address options entries:Ran a command, read a fileRan a command, read a fileThe fix: EMA gate now applies to combo signals on other tickers too — accum/dist only fires when above EMA, abandonment only when below. Proximity tightened from 2×ATR to 1×ATR. Those BUYs at 364 would have been blocked because price was well below EMA during the drop.
On options entries — what this indicator already tells you that matters most:
The best options-specific use of what you already have is timing entry type based on signal source:
M1/M2 reclaim (🧲 BUY) — cleanest options entry. Price just crossed and closed above a high-volume node with EMA confirmation. This is a momentum continuation setup. For calls: enter ATM or 1 strike ITM, same-day or next expiry depending on how far from M1. The POC acts as your invalidation — if price closes back below M1, the thesis is wrong. Tight stop = defined risk = ideal for options.
Combo accum/dist (◉ BUY) — better for anticipatory entries before the move. Volume is building at a node but price hasn't necessarily moved yet. This suits a slightly cheaper OTM call one strike above current price, gives the move room to develop. Higher risk, higher reward if the accumulation is real.
M2 signals — M2 is the second-highest volume node, often acts as the first magnet target after M1 breaks. If you get a 🧲 BUY off M1 and M2 is above price, that's your natural target for the option — size accordingly.
What would make this genuinely options-optimized that isn't built yet: an ATR-based "expected move" label on each signal showing entry ± 1 ATR so you can instantly see if the next level is reachable within a realistic move for the expiry you're trading. Want me to add that as a small label on each BUY/SELL? It would show something like BUY 364.12 → T:366.09 | SL:363.50 using the next baked/magnet level as target and ATR as stop reference.Beetest3PINE Downloador keep label the same and put that in a box in the bottom corner out of the way7:32 AMGood idea — a fixed info box in the bottom corner that updates with the last signal's stats. Clean and out of the way.Viewed 2 filesViewed 2 filesGood — I have everything I need. The info box needs: entry price, target (next level above/below), stop (ATR-based), R:R ratio, ATR value, and signal source. All these vars are already computed. I'll add it as a table in the bottom-right corner, updated on every barstate.islast:Add info box state varsAdd info box state varsNow capture the signal data right after each signal fires in the plotting block:Capture info box state on every signal fireCapture info box state on every signal fireNow add the table itself at the end of the script, before the alert conditions:Ran 2 commands, read a fileRan 2 commands, read a fileHere's what the box shows and why each row matters for options:
LAST SIGNAL / BUY 364.12 — direction and entry level, header color matches green/red
Source — tells you which engine fired: 🧲 M1/M2 Reclaim, Level Reclaim, or ◉ Accum/Dist. This matters for options because M1/M2 reclaims are momentum setups (enter ATM), combo signals are anticipatory (consider OTM)
Target — next baked level or magnet above/below. This is your profit target for sizing the option
Stop (1.5×ATR) — hard invalidation level. If price closes past this your thesis is wrong. On options this tells you when to cut regardless of theta
R:R — color coded: green ≥2:1, yellow ≥1:1, red <1:1. Skip trades showing red here
ATR (14) + % per bar — the % move per bar gives you a rough sense of whether same-day or next-day expiry makes sense. If ATR% is 0.3% on a 1m chart you need time for the move to develop
Options — auto-suggests nearest strike: ≥ 365.00 CALL or ≤ 363.50 PUT. Uses $1 increments for stocks $100-500, $5 for >$500, $0.50 below $100
Invalidate if — simple rule: if close crosses back through entry level the setup is dead
Fired — how many bars ago, so you can tell if you're looking at a stale signalBeetest3PINE Downloadsince we are adding the box is there any other instant data that could be useful there like an overall bull bear bar live with percentage ?7:33 AMYes — a few things that would actually be useful live in that box rather than just nice-to-have:
What's worth adding:
Session bull/bear bar ratio — % of bars this session that closed bullish vs bearish. Quick read on who's in control intraday
Current MFP bias — bull vs bear volume from the profile (the bbp sum across all nodes tells you if net money flow is positive or negative right now)
Price vs POC — above/below M1 and by how much in ATR terms. Instant context for whether you're trading with or against the dominant volume node
Volume vs average — current bar volume as % of the 10-bar average. Confirms whether the signal bar has conviction
What's not worth adding:
RSI/MACD type readings — redundant, you can add those separately
Tick data — not available in Pine
P&L tracking — Pine can't know your position
Let me add all four useful ones as a second section in the same box:Viewed 2 filesViewed 2 filesNow I'll rewrite the entire table block — expand from 9 to 15 rows, add the market context section, and compute the live stats:Ran 2 commands, read a fileRan 2 commands, read a fileThe box now has two sections. Here's what each live row does:
Session Bars — ████████░░ 80% Bull / 20% Bear. The block bar fills proportionally so you can read it at a glance without parsing numbers. Green background if >60% bull, red if >60% bear, gray if contested. Resets at each new session.
MFP Flow — sums the signed bbp values across every node in the current profile. If net positive, smart money has been buying this level range. If negative, net distribution. This is different from the bar ratio — it's volume-weighted flow, not just bar count.
vs M1 (POC) — how far price is from the POC in ATR terms. 0.3× ATR above M1 means you're close and M1 is acting as support. 2.1× ATR below M1 means you're extended away and M1 is overhead resistance. Green above, red below.
Vol vs Avg — current bar volume as % of the 10-bar average. Lime if >150% (conviction), yellow if at average, gray if weak. Use this to confirm signals — a BUY on 40% of average volume is much weaker than one on 200%.
Alignment — the most useful single row. Checks if the last signal direction agrees with all three context reads: session bar ratio, MFP flow, and price vs POC. ✓ Aligned means all three agree with the signal. ⚠ Divergent means at least one is against it — treat with more caution on options sizing.
EMA3 — shows above/below plus distance in ATR units. ▲ Above EMA (0.3× ATR) means you're just above — marginal. ▲ Above EMA (2.1× ATR) means strong trend with room.Beetest3PINE Downloadnever crossed the ema on this one and gave a buy that went down afterwards how can we clean that up? also the info box can we make a toggle section to turn stuff off if needed kinda busy may also add a size selection for the box?7:41 AMLet me see the current signal engine and info box inputs to understand what to add:Viewed 2 filesViewed 2 filesI see the issue. _otherEMABull = close > emaSignal checks the close of the current bar against EMA — but EMA3 length 21 means the EMA can be above price for several bars while price bounces, and one bar's close can temporarily cross above without real trend confirmation. Need EMA slope + multiple bars above confirmation, not just single-bar close. Also need the info box controls. Let me do both:Ran 2 commandsRan 2 commandsNow fix the EMA check — replace single-bar close with slope + consecutive bars confirmation, and wire the info box toggles:Fix EMA check to require 2 consecutive bars on correct side plus positive slopeFix EMA check to require 2 consecutive bars on correct side plus positive slopeNow rewrite the table render block to respect all toggles and the size setting:Rewrite table render with toggle support, dynamic row count, and size controlRewrite table render with toggle support, dynamic row count, and size controlNow gate the entire table on ib_show:Ran 2 commands, read a fileRan 2 commands, read a fileTwo things fixed:
EMA false cross fix — the single close > emaSignal check is replaced with three conditions that all must be true simultaneously: current bar closed above EMA, previous bar also closed above EMA, and EMA is actually sloping upward (current EMA > EMA 3 bars ago). That last one is the key — if EMA is still pointing down, even two bars above it isn't a real bull confirmation. The TSLA case you saw would have been blocked because the EMA was sloping down the whole time even while price briefly poked above it.
Info Box group 15 now has a full toggle panel with a master Show Info Box switch, a Box Text Size dropdown (tiny/small/normal/large), and individual row toggles for every row in both sections. The table rebuilds cleanly when you change toggles — it deletes and recreates with the exact row count needed so there are no blank rows. The _r running counter means rows pack tight regardless of which ones are hidden.Beetest3PINE DownloadId like the bull/bear bar at the very top7:56 AMViewed a file, ran a command, read a fileViewed a file, ran a command, read a fileDone. The session bull/bear bar ████████░░ 80% Bull / 20% Bear is now row 0 — always at the very top regardless of any toggle settings, before the signal header. It's the first thing your eye hits when you glance at the box.
The ib_show_session toggle in group 15 has been removed from the context section since the row is now permanently fixed at top. Everything else in the box is still individually toggleable below it.Beetest3PINE Download8:01 AMPine v6 doesn't support the inline if condition : statement single-line form. Each if needs its own line with indented body.Ran a command, read a fileRan a command, read a filePine v6 requires every if body to be on its own indented line — the if condition : statement colon shorthand is not valid syntax. All the row count increments are now in proper block form.Beetest3PINE DownloadBOX ISNT SHOWING UP8:06 AMLet me check — the box only renders when not na(ib_entry), which means it won't show until a signal fires. But there may also be a scoping issue with the context vars being computed outside barstate.islast.Viewed 2 filesViewed 2 filesFound it — not na(ib_entry) means the box never shows until a signal fires. For a fresh chart load or replay that hasn't hit a signal yet, the box is invisible. Fix: show the box always (just the context section) and show "—" placeholders in the signal rows until a signal fires:Ran a command, read a fileRan a command, read a fileThe box now shows immediately on chart load. The not na(ib_entry) gate was the problem — it blocked rendering until a signal fired.
What it shows before any signal: bull/bear bar ratio at the top (live from bar 1), waiting for signal... in the header, and — dashes in all the signal rows. The market context section (MFP flow, POC distance, volume, EMA) all populate immediately since those don't depend on a signal firing.Beetest3PINE DownloadSIGNAL FIRED BOX BLANK8:10 AMThe box shows but the SELL signal at 363.50 isn't populating it. The issue is the ib_entry capture happens in the every-bar signal plotting block, but the combo signals (◉ SELL) are drawn inside barstate.islast and set lastComboSignal but never set ib_dir/ib_entry. Let me check both paths:Viewed 2 filesViewed 2 filesConfirmed — the combo signal block at 1679-1690 draws the label but never sets ib_dir, ib_entry, ib_source etc. Also the M1/M2 every-bar plotting block sets those vars, but looking at the screenshot the SELL 363.50 has a red dot ● prefix meaning it's a combo signal from the islast path, not the M1/M2 path. Fix: add info box state capture to both the combo islast block and verify the every-bar block is also capturing correctly:Add ib_ state capture to combo signal islast block so info box populates from combo signalsAdd ib_ state capture to combo signal islast block so info box populates from combo signalsNow also verify the every-bar M1/
Indicator

Indicator

Indicator

Federal Funds ForecastThe Federal Funds Forecast is an all-in-one, forward-looking interest rate monitoring tool that tracks market expectations for the federal funds rate. It provides a comprehensive view of the Federal Reserve’s policy structure, overnight funding markets, and future rate expectations within a single framework, enabling real-time monitoring of funding conditions and evolving policy expectations. It features adjustable parameters and a clear, color-coded table that allows users to quickly assess the current market outlook and how expectations have evolved over time.
At its core, the model displays the main rates that define the US overnight funding system. The Federal Reserve implements monetary policy by establishing a target range for the federal funds rate. This range is maintained through a policy corridor defined by the Standing Repo Facility (SRF) rate at the upper bound and the Reverse Repo (RRP) rate at the lower bound, which serve as a ceiling and floor for overnight funding rates. Within this corridor, the Effective Federal Funds Rate (EFFR), Secured Overnight Financing Rate (SOFR), and Interest on Reserve Balances (IORB) are plotted to show how market rates trade relative to the Federal Reserve’s target range:
SOFR = Volume-weighted average rate of overnight borrowing backed by US Treasury collateral in the repo market, representing the broadest measure of secured funding.
EFFR = Volume-weighted average rate of overnight unsecured lending between banks in the federal funds market, which the Federal Reserve targets to implement monetary policy.
IORB = Interest rate paid by the Federal Reserve on reserve balances held at the Fed, acting as the primary anchor for overnight rates, as eligible banks can earn this rate risk-free.
Stress in the overnight funding market is measured as the spread between SOFR and IORB. Negative spreads typically reflect ample liquidity, as cash-rich lenders without access to IORB compete to lend in the repo market, pushing SOFR below IORB. Positive spreads typically reflect tighter conditions, as strong demand for funding pushes SOFR above IORB, creating an incentive to lend reserves. Sustained positive spreads typically signal funding stress, as persistent demand for cash is not met by sufficient lending supply, reflecting constraints that prevent full arbitrage of the spread. Persistent stress conditions are highlighted using optional background shading.
In addition to current conditions, the indicator displays the market’s implied path for future policy rates based on the Fed funds futures market. This forward path is shown as a dotted projection line extending from the current EFFR over the selected horizon, providing a clear view of whether the market is pricing in rate cuts, hikes, or a relatively stable policy path. The projection label summarizes the expected move in basis points and translates it into an approximate number of cuts or hikes, while the table provides a more detailed breakdown across multiple time horizons.
The table is divided into two main sections following the first row, which displays the current SOFR–IORB spread in basis points. The first section displays the implied difference between expected future rates and the current EFFR across 3M, 6M, 9M, 12M, 15M, and 18M horizons. Green indicates lower implied future rates, while red indicates higher implied future rates. The second section displays the difference between current expectations and prior expectations 1W, 2W, 3W, or 4W ago, based on the repricing period selected in the menu. Green reflects a shift in expectations toward easier policy, while red reflects a shift in expectations toward tighter policy.
In summary, the Federal Funds Forecast is a comprehensive monetary policy tool designed to provide investors with a clear view of the current US policy rate environment, overnight funding conditions, and market expectations for future Federal Reserve policy. While the model offers valuable insight into expectations derived from trading activity in the Fed funds futures market, these expectations reflect conditions at a specific point in time and can change rapidly as incoming data and Federal Reserve communication reshape the US monetary policy outlook. Indicator

Indicator

Machine Learning Supertrend [Aslan]Hey everyone 👋, This is an indicator I've been working on for a long time. Its not really finished yet, but I think it has huge potential.
It uses a SuperTrend foundation layer with momentum filtering, volume confirmation, and, most importantly, an adaptive engine that continuously adjusts its own parameters based on recent performance. It fires entry arrows on the chart while running a background simulation to score how the current settings are performing — then quietly adjusts itself over time.
Two systems run in parallel: the signal engine that produces the arrows you see, and a background test matrix that opens and closes simulated trades to feed the optimizer. The optimizer adjusts parameters, which produces better signals, which feeds back into better learning.
The Core Concept
At its heart this is a SuperTrend indicator — a volatility band that flips bullish or bearish as price crosses it. Signals fire either when that flip occurs (Reversal mode) or when price pushes to a new extreme within the current trend (Breakout mode).
On top of this, three adaptive learning layers run continuously:
Global Optimizer — rolling window of recent trade results that proposes parameter changes based on win rate, Sortino ratio, and profit factor
Micro-Batch Processor — a faster layer that groups results into mini-batches for quicker adjustments
Regime Grid — a 2D memory map that remembers what settings worked under similar market conditions (trend strength × volatility) and biases proposals accordingly
The Most Important Settings — Start Here
Band Width (Group ②) — Default: 1.4
The single most impactful setting in the entire indicator. Controls how wide the SuperTrend bands are. Lower values (1.0–1.2) create tight bands that flip often, giving more signals but more noise. Higher values (2.0–3.0) only flip on large structural moves, giving fewer but stronger signals. If your chart feels too noisy, raise this first. Higher values result in more trend following signals, while lower ones result in more contrarian signals.
Lookback Window (Group ②) — Default: 30
How many bars back the indicator scans when detecting new highs and lows. Lower values (10–15) react to minor swings and fire frequently. Higher values (50–100) only react to large structural pivots. Tune this alongside Band Width — they work together.
Signal Type (Group ①) — Default: Reversal
Pick one and stick with it. Reversal catches turning points when a trend exhausts. Breakout rides momentum to new extremes.
Reactivity / Master Dial (Group ⑥) — Default: 10
Controls how aggressively the adaptive engine responds to new information. Value of 1 = very conservative, slow to adapt, stays close to your base inputs. Value of 20 = aggressive, adapts quickly and can drift far from base settings. Start at 10 and only raise it if the market you're trading changes character frequently.
Signal Spacing (Group ①) — Default: 10
Minimum bars between any two signals. Prevents clustered rapid-fire entries in choppy zones. Lower on fast timeframes (3–5 on 1-min), higher on daily charts (20–30).
Group-by-Group Reference
① Signal Mode
Signal Type — Reversal catches trend exhaustion flips. Breakout rides momentum to new extremes. Pick one.
Require Fresh Pivot — When on, a signal only fires if price made a genuine new high/low first. Off = more signals, more noise.
Signal Spacing — Minimum bars between signals. Tune per timeframe.
② Volatility Envelope
Lookback Window — Bars scanned for new highs/lows. Lower = more reactive, more signals.
Smoothing Period — ATR calculation period. Lower = faster reaction to volatility, more band flips.
Band Width — ATR multiplier for band width. The most impactful setting in the indicator. Lower = more signals, higher = fewer stronger signals.
Price Basis — Which price source feeds SuperTrend. hlcc4 (default) is smoothest, close is most reactive.
True Range Mode — On = RMA-smoothed ATR (standard). Off = EMA-smoothed, faster but noisier.
③ Momentum Filter
Active — Toggles RSI filtering. Off = more signals but no momentum confirmation.
Length — RSI period. Lower = more volatile RSI, filter triggers more easily.
Hot Zone Memory — How many bars back it checks whether RSI was overbought (for sell confirmation). Higher = more lenient.
Cold Zone Memory — Same concept for oversold / buy confirmation.
RSI Hot/Cold Levels (set in Group ⑬) — Overbought/oversold thresholds. Default 70/30. Wider = more signals, tighter = fewer.
④ Flow Analysis
Sample Depth — Bars averaged to define "normal" volume.
Surge Threshold — Volume must exceed this multiple of average to count as a surge (1.2 = 20% above average).
Require Surge — When on, signals only fire with volume confirmation. Dramatically reduces count but greatly improves quality. Worth enabling.
⑤ Signal Quality
Key Levels Only — Only signals at major structural turning points fire. Fewer signals — suited for swing traders.
Key Level Depth — ATRs the price range must span to qualify as a key level. Only matters when Key Levels Only is on.
⑥ Master Dial
Reactivity (1–20) — The meta-knob for the entire adaptive engine. Controls batch size, adaptation speed, deadband sensitivity, and EMA alpha simultaneously. If you only change one adaptive setting, change this.
Micro-Batch Processing — Enables the faster mini-batch learning layer. On = quicker adaptation.
Live Pressure Sensor — Tracks cumulative up/down-tick volume flow on live bars to bias the optimizer's step size. Only affects live charts.
⑦ Auto-Tune Engine
Enable Auto-Tune — Master switch. Off = fixed parameters forever, just a traditional indicator.
Use Background Test Matrix — Runs the 5×5 simulated trade grid. Must be on for any adaptation to occur.
Lock Envelope to Base — Forces plotted bands to use your original inputs visually even if internal parameters have drifted. The signal engine always uses adapted values regardless.
⑧ Optimizer
Most users don't need to touch these — the defaults work well.
Step Size — Base learning rate. Higher = faster but potentially overshooting adaptation.
History Depth — Rolling window of trades used to compute statistics. Higher = slower but more stable learning.
Win Ceiling / Floor — Win rate thresholds that trigger parameter tightening or loosening.
Momentum Smoothing — EMA blend factor for applying new proposals. Higher = faster-acting changes.
Update Cooldown — Minimum bars between parameter updates. Prevents rapid oscillation.
Deadband Width / Period — Proposed changes must exceed these thresholds before being applied. Filters micro-jitter.
Anchor Revert Interval / Strength — Every N bars, parameters drift back toward your base inputs. Safety mechanism against unbounded drift.
P&L Cap per Trade — Clips outlier trades at this USD value before learning from them. Prevents one giant win/loss from distorting statistics.
⑨ Risk Guard
Max Entries / Session — Stops new signals after this many trades in a day.
Session Loss Limit — Pauses trading if cumulative session P&L drops below this USD amount.
Base Pause After Loss — Bars to wait after a losing trade. Prevents revenge trading.
Streak Limit — Pauses after this many consecutive losses.
Scale Pause by Loss Size — Larger losses trigger proportionally longer pauses.
Enforce on Test Matrix — Applies risk rules to the background simulation too. Usually leave off so the matrix always has fresh data.
⑩ Context Memory (Regime Grid)
Enable Regime Grid — Activates the market-context memory system.
Regime / Volatility Bins — Resolution of the grid on each axis. More bins = finer resolution but slower confidence buildup per cell.
Neighbor Blend Radius — How much adjacent grid cells blend into each other. Higher = smoother but less precise.
Decay Half-Life — How quickly older data in a cell loses weight. Lower = faster forgetting.
Max Grid Influence — How much the regime grid can dominate the global optimizer. 0.65 = up to 65% grid contribution.
⑪ Decay Traces
Short-term fading trade memory that specifically monitors for large adverse moves to tighten stops.
Enable Trace Buffer — Activates short-term memory.
Fade Rate — Energy reduction per bar. Higher = only very recent outcomes matter.
Adverse Move Threshold — MAE in ATR units above which a trade is flagged as a tail event.
Guard Tighten Cap — Maximum stop tightening allowed from tail-event feedback.
⑫ State Snapshot
Restore String — Paste a previously exported snapshot here to reload learned parameters and grid cells across reloads.
Export Now — Toggle on to emit the current learned state as an alert string. Toggle off afterward.
Import on Next Bar — Applies the Restore String on the next confirmed bar.
Risk Management (TP/SL Overlay)
Show TP & SL — Toggles the visual overlay.
TP/SL for — Which signal type drives the levels — Contrarian, AI Supertrend, or Both.
TP 1/2/3 — Take-profit multipliers relative to the stop distance. Set any to 0 to disable that level.
Quick Tuning Guide
Too many noisy signals? Raise Band Width → raise Lookback Window → raise Signal Spacing → enable Require Surge → enable Key Levels Only.
Too few signals? Lower Band Width → lower Lookback Window → lower Signal Spacing → disable Require Surge → disable Key Levels Only → widen RSI Hot/Cold levels.
Want faster adaptation? Raise Reactivity toward 15–18 → lower History Depth → lower Decay Half-Life.
Want more stability? Lower Reactivity toward 3–5 → raise History Depth → raise Anchor Revert Interval.
Starting fresh on a new instrument? Let the indicator run for at least 50–100 bars before evaluating, then use Export Now to save the learned state so it survives a chart reload. Indicator

Adaptive Probability Zone Projector [APZ] Adaptive Probability Zone Projector — Kinetic Log Engine
What this is in plain English: APZ plots a physics-based forecast of where price is likely to go and how far, using the strength and acceleration of the current trend. It shows you a projected path, a destination zone, and tracks its own accuracy in real time so you always know if it's earning your trust.
What this is in precise terms: A confirmed-bar, non-repainting directional forecast engine combining a 2-state Kalman filter with log-space linear regression to produce continuous-return velocity and acceleration estimates. Projections are kinematically bounded by timeframe-aware percent caps, with self-calibrating destination zones derived from a live MAE feedback loop. Gate logic uses a 6-component confluence score including R² adaptive thresholding, Nadaraya-Watson kernel crossover freshness, HTF slope alignment, and volatility Z-score suppression.
How It Works
Price moves like a physical object. It has momentum (how fast it is moving) and acceleration (whether that momentum is building or fading). APZ measures both — in percentage terms, so a 2% move per bar means the same thing on a $10 stock as on a $50,000 asset — then projects where that motion carries price over your chosen time horizon.
The gate is selective by design. The indicator does not produce a forecast on every bar. It waits until six independent conditions align: macro and micro trend in agreement, R² confidence above the adaptive threshold, positive momentum delta, meaningful velocity relative to volatility, healthy volatility environment, and optional kernel crossover confirmation. When fewer than four of those are true, the indicator goes quiet and grays the candles. That silence is information.
The destination zone is live-calibrated. After every forecast that expires, the indicator measures how far off its terminal price was. It updates an error EMA that directly controls how wide the next zone is drawn. If recent forecasts have been accurate, zones stay tight. If the market has been chaotic, zones widen automatically. You never have to tune zone width manually — the indicator calibrates itself.
What You See on the Chart
The curved path is the projected price trajectory from the current bar forward. It follows kinematic decay — momentum gradually softens as the path extends, because sustained acceleration is rare. The path always respects directional bias — a bull forecast will never curve downward.
The destination zone (box) is the probability range at the end of the horizon. Price has historically landed inside this box roughly 50–60% of the time on gated signals. The zone is built from actual measured forecast error, not from ATR guesswork.
The Gaussian channel (the wide band) shows where price sits relative to long-run trend structure. It provides macro context for every forecast.
The kernel lines (the glowing overlay) show the fast and slow Nadaraya-Watson trend estimates. Their crossover is one of the gate conditions. They also change color with momentum strength.
Gate markers (▲ / ▼ / ✕) appear on the chart at every gate open and gate close. They tell you exactly when the indicator's conditions were met and when they broke down.
The HUD (table, top right) shows live statistics including the current state, signal integrity score, projected velocity and acceleration in percent terms, forecast price, destination zone boundaries, adaptive horizon length, and — critically — live performance tracking: direction hit rate, zone touch rate, zone close rate, mean absolute error, and mean adverse excursion.
Timeframe Guide
5-minute / 15-minute: Works correctly. Projection horizon caps at 12 bars (60–180 minutes forward). For cleaner baseline behavior, reduce ALMA Length from the default 55 down to 20–25 bars. Gate is selective — expect signals during strong intraday trends only.
1-hour: The primary design timeframe for default settings. 55-bar ALMA covers roughly 2.3 days of trend context. 12-bar horizon = 12 hours forward. Velocity cap of 1.2%/bar is calibrated for 1H equity and crypto behavior. Most users will find 1H the most intuitive experience.
4-hour: Excellent. 10-bar horizon cap projects approximately 1.7 trading days forward. 2%/bar velocity cap. freshCross gate remains active on 4H, so mid-trend entries may be suppressed — disable "Require Fresh Kernel Cross" if you want more signals in continuation trends.
Daily: Best timeframe for this indicator at default settings. 8-bar horizon = 8 trading days. 3%/day velocity cap is historically calibrated. HTF Realism Mode automatically disables the freshCross requirement on daily, so mid-trend entries work naturally.
Weekly: Dramatically improved in the log-space architecture. Prior versions produced absurd projected moves on weekly charts. This version caps weekly projections at 24% total move (higher for crypto) with a 6-bar maximum horizon. freshCross is auto-disabled in HTF Realism Mode. Weekly forecasts now look conservative, bounded, and believable.
Monthly: 3-bar maximum horizon, 20% total cap (equities), 50% total cap (crypto). Designed for macro positioning context rather than precise entry. freshCross disabled. Velocity at 5%/month corresponds to roughly 60% annualized — historically calibrated for trending assets.
Who This Is For
If you are a directional trader: Use the gate markers to know when a qualified trend signal exists. Use the forecast and zone as a target framework, not a guarantee. When the gate closes (✕), step aside.
If you are a systematic or algorithmic trader: The JSON alert payload on every gate event includes score, R², gate threshold, horizon, velocity, acceleration, forecast, zone bounds, and all live performance metrics. The alert fires once per bar close on confirmed bars only — no intrabar noise.
If you are a risk manager: The destination zone gives you a probability-weighted price range at horizon expiry. Mean adverse excursion (tracked live in the HUD) tells you how much drawdown gated signals have historically experienced before recovering. Use it to size positions.
If you are a researcher: Turn on archived forecasts to see past projection paths overlaid on realized price. The HUD shows live direction accuracy, zone touch rate, and mean absolute error in real time. This indicator shows you whether it is working on your instrument and timeframe — there is no hiding behind back-test cherry-picks.
What This Is Not
This is not a buy/sell signal generator. The gate opening is a regime signal — it means conditions are aligned for a directional move. It is not a guarantee. Markets can and will invalidate forecasts. The tracker shows you this honestly.
This is not optimized for any single asset. The log-space percent architecture means the math is consistent across a $5 stock, a $500 stock, Bitcoin, EUR/USD, and the S&P 500. The caps are calibrated by timeframe, not by instrument.
This is not a repainting indicator. All signals, forecasts, and gate events are computed on confirmed bar closes only. What you see on a closed bar will not change.
Technical Architecture (For Advanced Users)
Macro layer: ALMA baseline with Gaussian standard deviation bands. Macro slope computed as EMA of first difference of baseline.
Micro layer: Dual Nadaraya-Watson kernel regression (fast + slow bandwidth) with R²-weighted blending. Predictive R² measured by correlating prior-bar kernel estimate against current price to avoid circularity.
Kalman filter: 2-state (position + velocity) constant-velocity model operating in log-price space. Advances on confirmed bar closes only. Initialized to log(close) on bar 1.
Velocity engine: Kalman velocity blended with log-space linear regression slope. Result is a continuous log-return per bar.
Acceleration engine: Rate of change of blended velocity over lookback window, decayed geometrically per step.
Projection: Kinematic integration in log space with per-step velocity and acceleration clamping. Total cumulative log-return capped by timeframe-aware percent ceiling. Path converted to price via exp() for display only.
Zone: Half-width computed as EMA(log-return error) × sqrt(horizon), clamped to timeframe-specific percent floor and ceiling.
Gate: Six-component binary confluence score ≥ threshold, alignment persistence, optional kernel freshness, optional HTF slope agreement, and volatility Z-score within range.
Tracker: Per-signal tracking of direction, zone touch (checked on every confirmed bar during window), zone close, final MAE, worst-path MAE, max adverse and favorable excursion. Error EMA feeds back into zone sizing. Indicator

Adaptive ProjectionAdaptive Projection is a personal chartist projection tool I use on my own charts to estimate what could be the most logically consistent continuation of trend structure.
This script is not built to “predict” the future with certainty. Its purpose is to project, in the most structurally disciplined way possible, what trend continuation could look like if the current market architecture keeps unfolding in a coherent manner.
Most projections are simplistic. They extend one line, one slope, or one regression and assume that is enough. This script takes a much more demanding approach. It evaluates trend structure across three different horizons — short-term, long-term, and very long-term — because a serious chart model should not treat all trends as if they were describing the same layer of information.
The core idea is simple to understand intuitively:
if trend continuation is going to remain chart-consistent, then the best projection should come from the alignment of multiple valid channel structures, not from one isolated line.
So instead of relying on a single channel, this script:
- finds the best short-term channel,
- finds the best long-term channel,
- finds the best very long-term channel,
- evaluates how solid each one is,
- then combines them with weighted logic so that higher-timeframe structure does not have the same role as lower-timeframe structure.
This is what makes the projection much more robust than a standard extrapolation.
At a practical level, the script tries to answer this question:
if the market continues in the most structurally logical way, what could that path look like?
To do that, it does not draw one naive straight projection. It builds the forward path adaptively, step by step. That is why the result is a curved projection rather than a rigid line to a distant endpoint. Each segment is informed by the structural information extracted from the three channel horizons, with different weights and multiple quality filters.
Why this approach is strong:
1. It is multi-horizon by design.
A short-term channel can capture recent acceleration or deceleration.
A long-term channel can capture the dominant structure.
A very long-term channel can capture the background trend regime.
The script does not flatten these into one simplistic view. It lets each horizon contribute according to its own importance.
2. It does not trust channels blindly.
Each candidate channel is filtered and scored using several structural criteria. The script is not just looking for a slope that “looks good”. It checks whether the channel is statistically coherent and structurally usable.
3. It favors robustness over convenience.
The script gives priority to channels that are eligible under demanding conditions. If no channel fully satisfies all conditions, it can still fall back to the best available candidate, but the model’s confidence reflects that reduced robustness.
4. It projects adaptively instead of mechanically.
A single straight projection assumes the same structure stays dominant all the way forward. This script is more nuanced: it builds the path progressively, so the projected curve better reflects how trend continuation would logically unfold if current structure persists.
5. It expresses internal agreement.
The confidence reading is not a claim of probability. It is a structural coherence score. It tells you how strongly the selected channels and their projected paths agree with each other. High confidence means stronger internal alignment. Low confidence means weaker convergence or more structural disagreement.
This indicator is especially useful if you want a serious chart-based framework for thinking about continuation, scenario planning, and directional structure without reducing everything to a simplistic trendline extension.
How the model works in more detail:
- The script scans predefined ranges for short-term, long-term, and very long-term channel lengths.
- For each candidate, it computes a regression-based channel structure.
- It measures Pearson correlation to evaluate linear coherence.
- It measures containment to verify whether price behavior actually respects the channel.
- It measures channel width to penalize structures that are too loose to be informative.
- It uses ADX-based information to confirm that the structure is supported by meaningful trend conditions rather than noise.
- It computes trend efficiency to distinguish cleaner trends from unstable ones.
- It computes a stability score by comparing neighboring candidate lengths, which helps avoid selecting fragile one-off fits.
- It combines these elements into a selection score designed to favor robust structural candidates.
Once the best channel has been identified for each horizon, the script then:
- projects the future location of each channel,
- measures where current price sits within each channel,
- estimates the most logical future continuation relative to that internal channel position,
- applies horizon-specific importance weights,
- applies quality-based weights,
- adjusts for horizon fit,
- and blends everything into one adaptive projection path.
That means the final projection is not the result of one indicator condition. It is the result of a layered structural decision process.
The Annualized Line Return should also be interpreted carefully. It is not a claim of expected performance. It is simply a normalized way to express the implied rate of change of the projected path over the selected horizon.
Important limitations:
- This script does not know the future.
- It does not incorporate news, macro shocks, liquidity events, or sudden regime changes.
- It is not a trading system and should not be read as a guaranteed directional forecast.
- It is a structural chart model designed to estimate the most logically consistent continuation of trend if the existing architecture persists.
- It is most meaningful in markets where structure exists. In chaotic or regime-shifting environments, confidence will usually degrade, which is appropriate.
In short, this is the projection tool I personally keep on my charts when I want the most advanced and structurally grounded chartist estimate of what trend continuation could logically look like.
It is built for one purpose:
to project trend continuation with as much internal discipline, multi-horizon structure, and robustness as possible. Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator
