Advertisement IC Markets

Scalping US100 and US500

Discuss 1-minute to 15-minute price action setups, fading intraday momentum, key support/resistance zones, and proven short-term trading methodologies.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Scalping US100 and US500

Post by PTScalper »

Hi scalpers,

i prepared interesting scalping technique on indexes, lets deep dive in :-)

Scalping US500 (S&P 500) and US100 (Nasdaq-100) requires a fundamentally different playbook than spot Forex. While currency pairs spend a large portion of the week mean-reverting inside range-bound channels, US equity indices are driven by concentrated institutional order flow at the New York cash open, structural liquidity sweeps around previous session extremes, and heavy directional momentum powered by mega-cap tech weights.

To strip out the erratic wick noise of 1-minute charts while still capturing high-R:R intraday moves, the most robust approach combines H4/D1 structural bias with M15 execution triggers during the New York session open.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Recommended broker for automated trading & scalping IC Markets
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

US500 (S&P 500 CFD / Futures)

Intraday Volatility (ATR): Moderate ( typically 35–60 points/day)

Price Action Profile: Respects structural levels cleanly; smoother pullbacks to EMAs and VWAP.

Typical M15 Stop-Loss: 8 to 15 points

Spread Impact: Ultra-tight on Raw/ECN feeds (0.2–0.5 pts); low slippage risk.

Best Suited For: Precision structural scalping, clean break-and-retest setups, tighter risk control.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

US100 (Nasdaq-100 CFD / Futures)

Intraday Volatility (ATR): High (typically 180–350+ points/day)

Price Action Profile: Aggressive liquidity sweeps; deeper stop-hunts before explosive trend continuation.

Typical M15 Stop-Loss: 35 to 65 points

Spread Impact: Tight (0.8–1.5 pts), but velocity during NY open can cause slippage on market orders.

Best Suited For: Momentum expansion, deep liquidity sweep reversals, high R:R runner trades.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

2. Core Strategy: HTF Liquidity Sweep & M15 NY Open Displacement

This strategy avoids getting chopped up in pre-market consolidation by waiting for the New York Cash Open (09:30 EST / 15:30 CET) to engineer a liquidity raid on a higher-timeframe level before entering on a confirmed M15 structural shift.

Multi-Timeframe Architecture

Directional Bias & Liquidity Mapping (D1 & H4): Identify the overarching market structure and mark the Previous Day High (PDH), Previous Day Low (PDL), Overnight London/Pre-Market High & Low, and any unfilled H4 Fair Value Gaps (FVGs) or major supply/demand zones.

Execution & Trigger (M15): Execute exclusively on the 15-minute chart. M15 candles filter out the algorithmic micro-whipsaws of the first 5 minutes of the cash open while providing a crisp invalidation point for tight stop placement.

Chart Overlay Indicators:

Session VWAP (Volume Weighted Average Price): Institutional benchmark for intraday fair value (bullish above, bearish below).

21 EMA & 50 EMA (on M15): Dynamic trend support/resistance for pullback continuation entries.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

Step-by-Step Execution Rules

Pre-Market Preparation (15:00 – 15:30 CET):

Mark the Overnight/London Session High and Low, plus PDH/PDL. Do not open positions inside the final 30 minutes before the NY cash bell; spreads widen and order books thin out prior to 15:30 CET.

The Judas Swing / Liquidity Sweep (15:30 – 16:00 CET):
At 15:30 CET, institutional algorithms frequently drive price aggressively toward the nearest resting liquidity pool (e.g., sweeping just above the London High or below the London Low) to trigger retail breakout buyers and stop-losses.

The M15 Displacement Trigger (15:45 – 16:30 CET):

Setup A — Sweep & Reversal: Price pierces a key H4/Overnight high or low, rejects it sharply (leaving a pronounced M15 rejection wick or engulfing candle), and closes back inside the range across the Session VWAP or M15 structure.

Setup B — Trend Continuation Pullback: If the NY Open explodes through a level with massive volume and holds (no rejection), wait for the first controlled M15 pullback into the M15 21 EMA / Session VWAP confluence zone and enter on a bullish/bearish M15 pinbar or engulfing close.

Stop-Loss & Target Placement:

Stop-Loss: Place 2–3 points (US500) or 10–15 points (US100) beyond the extreme wick of the M15 sweep candle.

Take-Profit 1 (1:1.5 R:R): Lock in partial profits or move your stop-loss to break-even once price clears the opposing intraday microstructure.

Take-Profit 2 (1:3 to 1:5 R:R): Target the opposite side of the session range (e.g., from London Low sweep to London High / PDH).
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

3. Position Sizing & Compounding Simulation

Because index CFDs and futures carry high notional value per point, disciplined capital allocation is critical. By isolating a dedicated 2% to 5% risk-capital tranche for a multi-week scalping series—locking in initial principal once in profit and compounding exclusively using accrued floating gains—you can capture asymmetric upside while keeping total portfolio drawdown strictly capped.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

4. Operational Risk Rules & Circuit Breakers

Strict Session Window (15:30 – 18:00 CET): Over 70% of clean index directional volume occurs within the first 2.5 hours of the New York cash session. Avoid trading the NY lunch lull (18:30 – 20:00 CET), where algorithmic mean-reversion chops up trend setups.

Red-Folder Macro Lockout: Flatten or lock stops before 14:30 CET on days featuring US CPI, Non-Farm Payrolls (NFP), Core PCE, or Retail Sales, and before 20:00 CET on FOMC days. Wait for the first M15 candle after the release to close before evaluating structure.

Correlation & Exposure Cap: US500 and US100 have a positive intraday correlation exceeding 0.90. Never take simultaneous long or short positions on both indices at full size—doing so simply doubles your effective leverage on the exact same macro bet.

Hard Daily Loss Limit: Enforce a maximum of 2 consecutive stop-outs per session. If the market invalidates two clean M15 setups during the NY open, close the platform and step away to prevent emotional tilt.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

Here are complete, production-ready implementations for both cTrader Automate (C#) and MetaTrader 5 (MQL5).

Both scripts are engineered around closed M15 bars to eliminate intra-candle noise and include pre-calculated Entry, Stop-Loss, and 1:1.5 / 1:3 R:R Take-Profit levels inside the alert payload—allowing you to evaluate and execute the setup immediately when the alert hits your mobile device.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

1. Core Detection Logic & State Machine

Pre-Market / London Range Accumulation (07:00 – 13:30 UTC):
Tracks the highest high (PM_High) and lowest low (PM_Low) leading right up to the New York Cash Open (09:30 EST).

NY Open Killzone Watch (13:30 – 16:00 UTC):

Projects the PM_High and PM_Low levels across the NY morning session.

M15 Sweep & Close-Inside Trigger:
Evaluates strictly on M15 bar close (index - 1):

Bearish Sweep (Short): High[1] >= PM_High + MinSweepPts AND Close[1] < PM_High AND Upper Wick $\ge$ MinWickPercent of total candle range.

Bullish Sweep (Long): Low[1] <= PM_Low - MinSweepPts AND Close[1] > PM_Low AND Lower Wick $\ge$ MinWickPercent of total candle range.One-Shot Execution Guard:Fires once per direction per session (configurable) so you don't get spammed on consecutive M15 retests.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 7643
Joined: Mon Jul 20, 2026 1:28 pm

Re: Scalping US100 and US500

Post by PTScalper »

2. C# cTrader Automate (cAlgo) Indicator

Create a new Indicator in cTrader Automate, name it NYOpenSweepDetector, and paste the following C# code:

Code: Select all

using System;
using System.Collections.Generic;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NYOpenSweepDetector : Indicator
    {
        #region Parameters

        [Parameter("Pre-Market Start Hour (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 7, MinValue = 0, MaxValue = 23)]
        public int PmStartHour { get; set; }

        [Parameter("Pre-Market Start Min (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 0, MinValue = 0, MaxValue = 59)]
        public int PmStartMin { get; set; }

        [Parameter("NY Open Hour (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 13, MinValue = 0, MaxValue = 23)]
        public int NyOpenHour { get; set; }

        [Parameter("NY Open Min (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 30, MinValue = 0, MaxValue = 59)]
        public int NyOpenMin { get; set; }

        [Parameter("NY Watch End Hour (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 16, MinValue = 0, MaxValue = 23)]
        public int NyEndHour { get; set; }

        [Parameter("NY Watch End Min (UTC)", Group = "1. Session Times (UTC)", DefaultValue = 0, MinValue = 0, MaxValue = 59)]
        public int NyEndMin { get; set; }

        [Parameter("Min Sweep Penetration (Index Pts)", Group = "2. Sweep Filters", DefaultValue = 1.5, MinValue = 0.0)]
        public double MinSweepPoints { get; set; }

        [Parameter("Min Rejection Wick (% of Candle)", Group = "2. Sweep Filters", DefaultValue = 30.0, MinValue = 5.0, MaxValue = 90.0)]
        public double MinWickPercent { get; set; }

        [Parameter("Stop-Loss Buffer (Index Pts)", Group = "3. Risk & Targets", DefaultValue = 2.5, MinValue = 0.5)]
        public double SlBufferPoints { get; set; }

        [Parameter("Enable Popup & Sound Alert", Group = "4. Notifications", DefaultValue = true)]
        public bool EnableAlerts { get; set; }

        [Parameter("Send Email Alert", Group = "4. Notifications", DefaultValue = false)]
        public bool EnableEmail { get; set; }

        [Parameter("Email Address", Group = "4. Notifications", DefaultValue = "")]
        public string EmailAddress { get; set; }

        #endregion

        private class DailySessionData
        {
            public double PmHigh = double.MinValue;
            public double PmLow = double.MaxValue;
            public DateTime PmStartTime;
            public DateTime NyEndTime;
            public bool IsValid = false;
            public bool BearishSweepTriggered = false;
            public bool BullishSweepTriggered = false;
        }

        private readonly Dictionary<DateTime, DailySessionData> _sessions = new Dictionary<DateTime, DailySessionData>();
        private int _lastProcessedBarIndex = -1;

        protected override void Initialize()
        {
            if (TimeFrame != TimeFrame.Minute15)
            {
                Chart.DrawStaticText("TF_Warning", 
                    "WARNING: NY Open Sweep Detector is optimized for the M15 TimeFrame.", 
                    VerticalAlignment.Top, HorizontalAlignment.Right, Color.OrangeRed);
            }
        }

        public override void Calculate(int index)
        {
            // Process historical bars and only trigger live logic once per newly closed bar
            if (index < 2) return;

            DateTime currentBarTime = Bars.OpenTimes[index];
            DateTime tradingDay = currentBarTime.Date;

            if (!_sessions.TryGetValue(tradingDay, out DailySessionData session))
            {
                session = new DailySessionData
                {
                    PmStartTime = tradingDay.AddHours(PmStartHour).AddMinutes(PmStartMin),
                    NyEndTime = tradingDay.AddHours(NyEndHour).AddMinutes(NyEndMin)
                };
                _sessions[tradingDay] = session;
            }

            DateTime nyOpenTime = tradingDay.AddHours(NyOpenHour).AddMinutes(NyOpenMin);

            // 1. Accumulate Pre-Market / London High & Low
            if (currentBarTime >= session.PmStartTime && currentBarTime < nyOpenTime)
            {
                if (Bars.HighPrices[index] > session.PmHigh) session.PmHigh = Bars.HighPrices[index];
                if (Bars.LowPrices[index] < session.PmLow) session.PmLow = Bars.LowPrices[index];
                session.IsValid = true;
                DrawSessionLevels(tradingDay, session, nyOpenTime);
            }

            // 2. Evaluate Closed Bar (index - 1) during NY Open Killzone
            int closedIdx = index - 1;
            if (closedIdx <= _lastProcessedBarIndex) return;

            DateTime closedBarTime = Bars.OpenTimes[closedIdx];
            if (session.IsValid && closedBarTime >= nyOpenTime && closedBarTime < session.NyEndTime)
            {
                EvaluateSweepOnClosedBar(closedIdx, session, tradingDay);
                _lastProcessedBarIndex = closedIdx;
            }
        }

        private void EvaluateSweepOnClosedBar(int idx, DailySessionData session, DateTime tradingDay)
        {
            double high = Bars.HighPrices[idx];
            double low = Bars.LowPrices[idx];
            double open = Bars.OpenPrices[idx];
            double close = Bars.ClosePrices[idx];
            double candleRange = high - low;

            if (candleRange <= double.Epsilon) return;

            // --- BEARISH SWEEP CHECK (Sweeps PM High, Closes Inside) ---
            if (!session.BearishSweepTriggered)
            {
                double sweepDistance = high - session.PmHigh;
                double upperWick = high - Math.Max(open, close);
                double wickPct = (upperWick / candleRange) * 100.0;

                if (sweepDistance >= MinSweepPoints && close < session.PmHigh && wickPct >= MinWickPercent)
                {
                    session.BearishSweepTriggered = true;
                    double sl = high + SlBufferPoints;
                    double risk = sl - close;
                    double tp1 = close - (risk * 1.5);
                    double tp2 = close - (risk * 3.0);

                    string iconName = $"ShortSweep_{tradingDay:yyyyMMdd}_{idx}";
                    Chart.DrawIcon(iconName, ChartIconType.DownArrow, Bars.OpenTimes[idx], high + (candleRange * 0.25), Color.Crimson);

                    TriggerSignal("SHORT (PM High Sweep)", close, sl, tp1, tp2, idx);
                }
            }

            // --- BULLISH SWEEP CHECK (Sweeps PM Low, Closes Inside) ---
            if (!session.BullishSweepTriggered)
            {
                double sweepDistance = session.PmLow - low;
                double lowerWick = Math.Min(open, close) - low;
                double wickPct = (lowerWick / candleRange) * 100.0;

                if (sweepDistance >= MinSweepPoints && close > session.PmLow && wickPct >= MinWickPercent)
                {
                    session.BullishSweepTriggered = true;
                    double sl = low - SlBufferPoints;
                    double risk = close - sl;
                    double tp1 = close + (risk * 1.5);
                    double tp2 = close + (risk * 3.0);

                    string iconName = $"LongSweep_{tradingDay:yyyyMMdd}_{idx}";
                    Chart.DrawIcon(iconName, ChartIconType.UpArrow, Bars.OpenTimes[idx], low - (candleRange * 0.25), Color.LimeGreen);

                    TriggerSignal("LONG (PM Low Sweep)", close, sl, tp1, tp2, idx);
                }
            }
        }

        private void DrawSessionLevels(DateTime day, DailySessionData session, DateTime nyOpenTime)
        {
            string highLine = $"PM_High_{day:yyyyMMdd}";
            string lowLine = $"PM_Low_{day:yyyyMMdd}";
            string boxName = $"PM_Box_{day:yyyyMMdd}";

            // Shaded Pre-Market Range Box
            var box = Chart.DrawRectangle(boxName, session.PmStartTime, session.PmHigh, nyOpenTime, session.PmLow, Color.FromArgb(30, 100, 149, 237));
            box.IsFilled = true;

            // Projected Liquidity Lines into NY Killzone
            Chart.DrawTrendLine(highLine, nyOpenTime, session.PmHigh, session.NyEndTime, session.PmHigh, Color.DodgerBlue, 2, LineStyle.DotsRare);
            Chart.DrawTrendLine(lowLine, nyOpenTime, session.PmLow, session.NyEndTime, session.PmLow, Color.DodgerBlue, 2, LineStyle.DotsRare);
        }

        private void TriggerSignal(string direction, double entry, double sl, double tp1, double tp2, int barIdx)
        {
            // Only fire real-time notifications if this is the most recent closed bar
            if (barIdx < Bars.Count - 2) return;

            string msg = $"{Symbol.Name} M15 {direction} | Entry: {entry:F2} | SL: {sl:F2} | TP1 (1.5R): {tp1:F2} | TP2 (3R): {tp2:F2}";
            Print(msg);

            if (EnableAlerts)
            {
                Notifications.PlaySound(SoundType.Announcement);
                MessageBox.Show(msg, $"NY Open Liquidity Sweep: {Symbol.Name}", MessageBoxButton.OK, MessageBoxImage.Information);
            }

            if (EnableEmail && !string.IsNullOrWhiteSpace(EmailAddress))
            {
                Notifications.SendEmail(EmailAddress, EmailAddress, $"[cTrader Sweep] {Symbol.Name} {direction}", msg);
            }
        }
    }
}
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Post Reply