Advertisement IC Markets

Daily Loss Limits Save Careers

Master exponential money management, position sizing calculators, strict daily stop-loss limits, and overcoming FOMO on micro-timeframes.
Post Reply
Fairman
Posts: 991
Joined: Tue Jul 21, 2026 7:11 am
Location: Abuja

Daily Loss Limits Save Careers

Post by Fairman »

Set a hard daily loss cap before you ever open your platform — somewhere around 3-5% of account equity is common — and when you hit it, you are done trading for the day. No exceptions, no "just one more to make it back," no negotiating with yourself in the moment.

Why is this rule non-negotiable for scalpers specifically? Because scalping generates dozens of decision points every single session.

Each individual loss chips away slightly at your judgment, and the temptation to "win it back" compounds with every additional loss. By the third or fourth losing trade in a row, most traders aren't executing their strategy anymore — they're executing their frustration.

A daily loss limit removes the decision entirely, which is exactly the point. You don't have to trust your emotionally compromised self at 2pm after three consecutive stop-outs to make a good call. You just have to trust the rule you wrote down that morning, when you were calm and thinking clearly.

Write the number down. Set an alert if your platform supports it. And treat hitting that limit not as a failure, but as the plan working exactly as designed — because the alternative, an account with no daily stop, is how a bad morning turns into a blown week.
It’s Fairman :geek:
Recommended broker for automated trading & scalping IC Markets
LondonScalper
Posts: 770
Joined: Sat Sep 05, 2026 7:54 am

Re: Daily Loss Limits Save Careers

Post by LondonScalper »

Fairman wrote:Set a hard daily loss cap before you ever open your platform — somewhere around 3-5% of account equity
Agree with the principle. The useful debate is where you set it and what counts toward it.

For a pure scalp day I run tighter than 3–5% of full equity — more like a fixed cash or R budget sized so one ugly morning can’t dictate the week. 3–5% is closer to a swing/prop-style outer fence; scalpers can hit that with a handful of revenge tickets if size isn’t controlled.

Two implementation details that matter:
  • Count all-in P&L including commissions/swap, not “chart pips”
  • The cap must be enforced by process (EA/risk panel/alarm), not by mood
“No exceptions” only works if the platform makes the exception annoying. I use a hard lockout: hit the number, flatten working orders, done. Tomorrow’s edge is still there; today’s judgment often isn’t.

Curious whether your 3–5% is of peak equity or of starting-day equity — trailing vs fixed changes behaviour a lot.
PropScalpDesk
Posts: 364
Joined: Sat Sep 19, 2026 7:50 pm

Re: Daily Loss Limits Save Careers

Post by PropScalpDesk »

Fairman wrote:Set a hard daily loss cap before you ever open your platform — and when you hit it, you are done trading for the day. No exceptions.
This is career insurance, not a suggestion. On personal books I sit near 1–1.5% soft daily; challenge accounts often need tighter because the firm’s daily already exists and stacking both without a plan is how people blow the personal buffer trying to “use” the firm room.

From Frankfurt the rule is mechanical: hit the number → platform closed, phone app to margin check only. No “spread was wide so it does not count.” No switching pairs to restart the day.

I also separate daily loss from trailing DD thinking. Surviving Tuesday matters more than making Tuesday whole.

I write the number on a card before the platform opens so it is not negotiable mid-pain. After a hit I still do the journal, but the next click waits until tomorrow’s open. Careers end when the daily stop becomes a suggestion on Fridays.

Where do you set the personal soft stop relative to the prop firm’s hard daily — inside it, or identical?
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

Fairman wrote: Thu Aug 20, 2026 8:59 pm Set a hard daily loss cap before you ever open your platform — somewhere around 3-5% of account equity is common — and when you hit it, you are done trading for the day. No exceptions, no "just one more to make it back," no negotiating with yourself in the moment.

Why is this rule non-negotiable for scalpers specifically? Because scalping generates dozens of decision points every single session.

Each individual loss chips away slightly at your judgment, and the temptation to "win it back" compounds with every additional loss. By the third or fourth losing trade in a row, most traders aren't executing their strategy anymore — they're executing their frustration.

A daily loss limit removes the decision entirely, which is exactly the point. You don't have to trust your emotionally compromised self at 2pm after three consecutive stop-outs to make a good call. You just have to trust the rule you wrote down that morning, when you were calm and thinking clearly.

Write the number down. Set an alert if your platform supports it. And treat hitting that limit not as a failure, but as the plan working exactly as designed — because the alternative, an account with no daily stop, is how a bad morning turns into a blown week.
HI Fairman,

You’ve perfectly captured one of the most critical—and hardest to master—aspects of trading psychology. A daily loss limit isn't just about protecting your financial capital; it's about protecting your mental capital. Revenge trading destroys accounts much faster than a flawed strategy ever could. By coding this rule directly into your system, you remove the burden of discipline from your future, emotionally compromised self and hand it over to cold, emotionless logic.

Here is a Pine Script (v5) template that programmatically enforces this exact philosophy. It tracks your account equity at the start of each day, monitors your live drawdown, and immediately halts all trading and flattens open positions if your hard cap is breached.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

The Pine Script: Daily Loss Cap Enforcer

Code: Select all

//@version=5
strategy("Daily Loss Limit Enforcer", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// =========================================================================
// 1. INPUTS
// =========================================================================
dailyLossLimitPct = input.float(3.0, title="Daily Loss Limit (%)", minval=0.1, step=0.5, group="Risk Management", tooltip="The percentage of equity lost in a single day before trading is halted.")

// =========================================================================
// 2. DAILY TRACKING LOGIC
// =========================================================================
var float startOfDayEquity = na
var bool dailyLimitHit = false

// Detect the start of a new trading session/day
isNewDay = ta.change(time("D")) != 0

// Reset variables at the start of a new day
if isNewDay
    startOfDayEquity := strategy.equity
    dailyLimitHit := false

// Check if the current equity has breached the daily loss threshold
if not na(startOfDayEquity)
    currentDrawdown = (startOfDayEquity - strategy.equity) / startOfDayEquity * 100
    if currentDrawdown >= dailyLossLimitPct
        dailyLimitHit := true

// =========================================================================
// 3. EXAMPLE STRATEGY LOGIC (Replace with your own)
// =========================================================================
fastMA = ta.sma(close, 9)
slowMA = ta.sma(close, 21)

goLong = ta.crossover(fastMA, slowMA)
goShort = ta.crossunder(fastMA, slowMA)

// =========================================================================
// 4. EXECUTION WITH HARD STOP
// =========================================================================
// Only allow new entries if the daily limit has NOT been triggered
if not dailyLimitHit
    if goLong
        strategy.entry("Long", strategy.long)
    if goShort
        strategy.entry("Short", strategy.short)

// If the limit is hit while in an active trade, flatten the position immediately
if dailyLimitHit
    strategy.close_all(comment="DAILY LOSS CAP HIT - FLATTENING")

// =========================================================================
// 5. VISUAL FEEDBACK
// =========================================================================
// Paint the background red if trading is halted for the day
bgcolor(dailyLimitHit ? color.new(color.red, 90) : na, title="Trading Halted Background")

// Plot MAs for context
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.orange, title="Slow MA")
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

How This Script Protects You

Session Reset: The ta.change(time("D")) function detects when a new daily session begins. It captures your exact strategy.equity on the very first bar of the day.

Live Equity Tracking: It constantly compares your live equity (including floating PnL from open trades) against that starting balance.

The Kill Switch: If your equity drops by the inputted percentage (default 3%), the dailyLimitHit flag turns true.

Immediate Flattening: The strategy.close_all() function ensures that if a single bad trade pushes you over the edge, the script instantly closes the position to prevent further bleeding.

Lockout: The if not dailyLimitHit condition acts as a deadbolt. Even if your strategy generates a perfect setup at 2 PM, the script will refuse to execute it. The background will turn a faint red, visually confirming that the trading day is over.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

To make this production-ready, we need to upgrade it from a basic logic script to an institutional-grade risk management module.

Since you focus on raw price action and structure on the 15-minute charts, you need a script that calculates intra-bar, accounts for realistic trading costs, offers a visual HUD so you don't have to guess your metrics, and includes an optional Daily Profit Target (because giving back a 5% gain from overtrading is just as bad as revenge trading).
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

Here is the "Pro" version. It utilizes Pine Script v5's table rendering for a live dashboard and ensures execution happens on every tick, not just at the bar close.

The Pro Risk Desk Script

Code: Select all

//@version=5
// calc_on_every_tick=true is CRITICAL for scalpers to trigger stops mid-bar
strategy("Pro Risk Desk & Execution", overlay=true, 
         calc_on_every_tick=true, 
         initial_capital=100000, 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=2.0, 
         commission_type=strategy.commission.cash_per_order, 
         commission_value=2.5, // Modeled commissions
         slippage=1)           // Modeled slippage (ticks)

// =========================================================================
// 1. RISK DESK PARAMETERS
// =========================================================================
grpRisk = "Risk Management Settings"
dailyLossLimitPct = input.float(3.0, "Daily Hard Stop (%)", minval=0.1, step=0.5, group=grpRisk)
enforceTarget     = input.bool(false, "Halt on Profit Target?", group=grpRisk)
dailyTargetPct    = input.float(5.0, "Daily Profit Target (%)", minval=0.1, step=0.5, group=grpRisk)

grpUI = "Dashboard Settings"
showHUD = input.bool(true, "Show Risk Dashboard", group=grpUI)

// =========================================================================
// 2. STATE TRACKING
// =========================================================================
var float startOfDayEquity = na
var bool  isHalted = false
var string haltMessage = "TRADING ACTIVE"

// Detect session change natively 
isNewSession = ta.change(time("D")) != 0

// Reset risk metrics at midnight/session start
if isNewSession
    startOfDayEquity := strategy.equity
    isHalted := false
    haltMessage := "TRADING ACTIVE"

// Calculate live Daily PnL (including floating positions)
float currentEquity = strategy.equity
float dailyPnLPct = na(startOfDayEquity) or startOfDayEquity == 0 ? 0.0 : 
                     ((currentEquity - startOfDayEquity) / startOfDayEquity) * 100

// =========================================================================
// 3. RISK ENFORCEMENT ENGINE
// =========================================================================
if not isHalted and not na(startOfDayEquity)
    // Rule 1: Hard Daily Loss Cap
    if dailyPnLPct <= -dailyLossLimitPct
        isHalted := true
        haltMessage := "LOSS CAP HIT"
        strategy.close_all(comment="RISK: DAILY STOP")
    
    // Rule 2: Daily Profit Target (Walk away a winner)
    else if enforceTarget and dailyPnLPct >= dailyTargetPct
        isHalted := true
        haltMessage := "TARGET REACHED"
        strategy.close_all(comment="RISK: TARGET SECURED")

// Background alert when halted
bgcolor(isHalted ? (dailyPnLPct < 0 ? color.new(color.red, 92) : color.new(color.green, 92)) : na, title="Halt Status")

// =========================================================================
// 4. YOUR PRICE ACTION STRATEGY (Placeholder)
// =========================================================================
// Replace this with your specific 15m price action / candlestick structure logic
// Example: Simple Inside Bar breakout for demonstration
insideBar = high < high[1] and low > low[1]
breakUp   = ta.crossover(close, high[1]) and insideBar[1]
breakDown = ta.crossunder(close, low[1]) and insideBar[1]

// =========================================================================
// 5. EXECUTION LAYER (Gated by Risk Desk)
// =========================================================================
if not isHalted
    if breakUp
        strategy.entry("Long", strategy.long)
    if breakDown
        strategy.entry("Short", strategy.short)

// =========================================================================
// 6. LIVE HUD / DASHBOARD
// =========================================================================
var table riskPanel = table.new(position.bottom_right, 2, 4, border_width=1, border_color=color.new(color.gray, 80), frame_color=color.new(color.black, 0), frame_width=2)

if showHUD and barstate.islast
    // Start Equity
    table.cell(riskPanel, 0, 0, "Start Equity:", text_color=color.gray, text_halign=text.align_left, bgcolor=color.new(color.black, 10))
    table.cell(riskPanel, 1, 0, str.tostring(startOfDayEquity, "#.00"), text_color=color.white, text_halign=text.align_right, bgcolor=color.new(color.black, 10))
    
    // Live Equity
    table.cell(riskPanel, 0, 1, "Live Equity:", text_color=color.gray, text_halign=text.align_left, bgcolor=color.new(color.black, 10))
    table.cell(riskPanel, 1, 1, str.tostring(currentEquity, "#.00"), text_color=color.white, text_halign=text.align_right, bgcolor=color.new(color.black, 10))
    
    // Daily PnL
    color pnlColor = dailyPnLPct > 0 ? color.lime : dailyPnLPct < 0 ? color.red : color.gray
    table.cell(riskPanel, 0, 2, "Daily PnL (%):", text_color=color.gray, text_halign=text.align_left, bgcolor=color.new(color.black, 10))
    table.cell(riskPanel, 1, 2, str.tostring(dailyPnLPct, "#.##") + "%", text_color=pnlColor, text_halign=text.align_right, bgcolor=color.new(color.black, 10))
    
    // Desk Status
    color statusColor = isHalted ? (dailyPnLPct < 0 ? color.maroon : color.new(color.green, 40)) : color.new(color.blue, 60)
    table.cell(riskPanel, 0, 3, "Desk Status:", text_color=color.white, text_halign=text.align_left, bgcolor=statusColor)
    table.cell(riskPanel, 1, 3, haltMessage, text_color=color.white, text_halign=text.align_right, bgcolor=statusColor)
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

Re: Daily Loss Limits Save Careers

Post by PTScalper »

What makes this version "Pro":

calc_on_every_tick=true: In standard Pine Script, strategy logic only executes when the candle closes. If you are trading the 15m chart and a sudden volatility spike drops your equity by 4% in the middle of a candle, standard scripts won't trigger the daily stop until minute 15. This parameter forces the script to calculate and flatten you instantly mid-candle.

Built-in Transaction Costs: Professional backtesting requires modeled reality. The commission_type, commission_value, and slippage parameters are hardcoded into the strategy header so your live equity tracks closely to what a real broker will quote.

Daily Profit Cap (The Anti-Greed Switch): You can toggle enforceTarget. If you set a goal of 5% a day, the moment your floating equity hits it, the system flattens your trades and locks you out. No giving it back to the market during the choppy afternoon session.

Live On-Chart HUD: It generates a minimalist, non-intrusive table in the bottom right corner showing exactly where you stand for the day. You don't have to manually calculate your drawdown from your broker's account tab.

You can safely delete the placeholder "Inside Bar" logic in section 4 and drop your custom price action conditions directly into those variables.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Post Reply