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.
Daily Loss Limits Save Careers
Daily Loss Limits Save Careers
It’s Fairman 
-
LondonScalper
- Posts: 770
- Joined: Sat Sep 05, 2026 7:54 am
Re: Daily Loss Limits Save Careers
Agree with the principle. The useful debate is where you set it and what counts toward it.Fairman wrote:Set a hard daily loss cap before you ever open your platform — somewhere around 3-5% of account equity
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
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
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.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.
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?
Re: Daily Loss Limits Save Careers
HI Fairman,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.
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.
Re: Daily Loss Limits Save Careers
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.
Re: Daily Loss Limits Save Careers
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.
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.
Re: Daily Loss Limits Save Careers
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).
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.
Re: Daily Loss Limits Save Careers
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
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.
Re: Daily Loss Limits Save Careers
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.
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.