July psychology scorecard: tilt days and wins
-
LondonScalper
- Posts: 965
- Joined: Sat Sep 05, 2026 7:54 am
July psychology scorecard: tilt days and wins
I keep a monthly scorecard for my state of mind, separate from P&L. With the quarter closed, I went back to July's because it was my worst month of the year for discipline, even though the result was positive.
The scorecard has five lines, each scored daily: 0 for a clean day, 1 for a minor slip, 2 for a real problem.
July totals over 22 trading days:
Revenge trades (re-entering within 10 minutes of a loss without a setup): scored on 6 days. Normal for me is 1 or 2.
Moving stops further away: 2 days. Normally zero.
Ignoring the daily loss limit: 1 day. This is the one that worries me.
What was going on. A family matter took a lot of my attention in the second week. I traded anyway, because I thought trading would take my mind off it. It didn't.
The interesting part was the P&L. July was profitable, mostly thanks to three good days in the last week. If I'd only looked at the money, I would have called it a decent month.
August scored much better, partly because I took four days off. September was close to my normal.
My main lesson from July is that I should have treated the family situation as a reason to trade less, not a reason to trade for distraction. I knew that already. I didn't apply it.
The scorecard has five lines, each scored daily: 0 for a clean day, 1 for a minor slip, 2 for a real problem.
July totals over 22 trading days:
Revenge trades (re-entering within 10 minutes of a loss without a setup): scored on 6 days. Normal for me is 1 or 2.
Moving stops further away: 2 days. Normally zero.
Ignoring the daily loss limit: 1 day. This is the one that worries me.
What was going on. A family matter took a lot of my attention in the second week. I traded anyway, because I thought trading would take my mind off it. It didn't.
The interesting part was the P&L. July was profitable, mostly thanks to three good days in the last week. If I'd only looked at the money, I would have called it a decent month.
August scored much better, partly because I took four days off. September was close to my normal.
My main lesson from July is that I should have treated the family situation as a reason to trade less, not a reason to trade for distraction. I knew that already. I didn't apply it.
Re: July psychology scorecard: tilt days and wins
Hi LondonScalper,LondonScalper wrote: Sun Oct 04, 2026 11:50 pm I keep a monthly scorecard for my state of mind, separate from P&L. With the quarter closed, I went back to July's because it was my worst month of the year for discipline, even though the result was positive.
The scorecard has five lines, each scored daily: 0 for a clean day, 1 for a minor slip, 2 for a real problem.
July totals over 22 trading days:
Revenge trades (re-entering within 10 minutes of a loss without a setup): scored on 6 days. Normal for me is 1 or 2.
Moving stops further away: 2 days. Normally zero.
Ignoring the daily loss limit: 1 day. This is the one that worries me.
What was going on. A family matter took a lot of my attention in the second week. I traded anyway, because I thought trading would take my mind off it. It didn't.
The interesting part was the P&L. July was profitable, mostly thanks to three good days in the last week. If I'd only looked at the money, I would have called it a decent month.
August scored much better, partly because I took four days off. September was close to my normal.
My main lesson from July is that I should have treated the family situation as a reason to trade less, not a reason to trade for distraction. I knew that already. I didn't apply it.
This is an incredibly self-aware post, and honestly, the concept of a "state of mind" scorecard is something 90% of retail traders should adopt but never do. Thank you for sharing this level of transparency.
You’ve highlighted one of the most insidious traps in trading: getting paid for bad behavior.
When your edge relies heavily on reading raw price action and market microstructure on the 1-minute or 5-minute charts, split-second discipline is your only safety net. Because July was profitable despite moving stops and ignoring your daily loss limit, the market essentially rewarded a breakdown in your process. If you were only tracking P&L, your brain would subconsciously log July as a success, lowering the barrier to repeat those exact same errors in August. The scorecard saved you from that illusion.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
Breaking down your metrics, the divergence between your normal baseline and your July performance tells a clear story:
6 days of revenge trading: Scalping makes this dangerously easy because the next setup is always just a minute away. When you re-enter within 10 minutes out of frustration, you stop trading the chart and start trading your P&L.
The daily loss limit breach: You are absolutely right to be most worried about this single day. Moving stops and ignoring the daily loss limit are the two cardinal sins that can wipe out months of disciplined, systematic execution in a single afternoon.
Your insight about using trading as a distraction from your family situation is profound. The market doesn't offer an escape; it acts as a mirror to your current psychological state. Honoring a stop-loss or walking away after a losing trade requires high-level executive function and emotional regulation. When a family matter is heavily taxing your cognitive load, that willpower reservoir is already depleted before you even sit down at the monitors.
6 days of revenge trading: Scalping makes this dangerously easy because the next setup is always just a minute away. When you re-enter within 10 minutes out of frustration, you stop trading the chart and start trading your P&L.
The daily loss limit breach: You are absolutely right to be most worried about this single day. Moving stops and ignoring the daily loss limit are the two cardinal sins that can wipe out months of disciplined, systematic execution in a single afternoon.
Your insight about using trading as a distraction from your family situation is profound. The market doesn't offer an escape; it acts as a mirror to your current psychological state. Honoring a stop-loss or walking away after a losing trade requires high-level executive function and emotional regulation. When a family matter is heavily taxing your cognitive load, that willpower reservoir is already depleted before you even sit down at the monitors.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
You noted that you knew you should have traded less, but didn't apply it. Willpower fails us when we're stressed, so the solution is to remove willpower from the equation entirely. Next time life throws a curveball, consider implementing a mechanical Life Stress Protocol:
Code a hard lockout: Since you already develop execution scripts and automated order rejection tools for your platforms, you could script a specific "stress mode" toggle. When activated, it could automatically reject orders if you hit half of your normal daily loss limit, or lock the terminal entirely if a trade is closed out for a loss to enforce a mandatory 30-minute cool-off, killing the revenge trade window.
Scale down to 25%: If you feel the absolute need to engage with the markets just to maintain your routine, drop your lot size to a quarter of your normal exposure. You still get to read the structure and execute, but the financial risk of an emotional blowout is neutralized.
Taking those four days off in August was exactly the right corrective action. It reset your baseline and got you back to your normal metrics by September.
Code a hard lockout: Since you already develop execution scripts and automated order rejection tools for your platforms, you could script a specific "stress mode" toggle. When activated, it could automatically reject orders if you hit half of your normal daily loss limit, or lock the terminal entirely if a trade is closed out for a loss to enforce a mandatory 30-minute cool-off, killing the revenge trade window.
Scale down to 25%: If you feel the absolute need to engage with the markets just to maintain your routine, drop your lot size to a quarter of your normal exposure. You still get to read the structure and execute, but the financial risk of an emotional blowout is neutralized.
Taking those four days off in August was exactly the right corrective action. It reset your baseline and got you back to your normal metrics by September.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
This scorecard system is a massive edge. Keep tracking it, and more importantly, keep trusting what it tells you over what the P&L tells you. Have you considered adding a specific scorecard line for "trading while cognitively compromised" to catch these life-stress bleed-overs earlier in the month?
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
Because TradingView's Pine Script cannot physically freeze your manual mouse clicks or directly block broker execution, the most effective way to implement this is through a Strategy Framework with a Visual Enforcer.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
You can drop your 1-minute or 5-minute price action entry conditions into this framework. It will visually warn you, manage the simulated equity, and enforce the rules during backtesting or forward-testing. You can also port this exact logic structure into your MQL4 or C# cAlgo execution scripts to enforce the actual broker-level order rejections.
Code: Select all
//@version=5
strategy("Discipline Framework & Stress Protocol", overlay=true, initial_capital=10000, margin_long=100, margin_short=100)
// ==============================================================================
// 1. DISCIPLINE & PSYCHOLOGY INPUTS
// ==============================================================================
grp_mindset = "State of Mind / Discipline Settings"
enableStressMode = input.bool(false, "Enable Life Stress Mode", group=grp_mindset, tooltip="Scales down position size drastically to protect capital when mentally compromised.")
stressScaleFactor= input.float(0.25, "Stress Mode Sizing (25% = 0.25)", group=grp_mindset)
maxDailyLoss = input.float(500, "Max Daily Loss Limit ($)", group=grp_mindset, tooltip="Stops all trading for the rest of the day if daily P&L drops below this.")
cooldownMins = input.int(10, "Anti-Revenge Cooldown (Mins)", group=grp_mindset, tooltip="Mandatory wait time after a losing trade.")
grp_trading = "Strategy Logic"
lotSize = input.float(1.0, "Standard Lot Size", group=grp_trading)
// ==============================================================================
// 2. DAILY P&L TRACKING
// ==============================================================================
var float dailyStartEquity = strategy.equity
var bool dailyLockout = false
// Detect new trading day (session)
if ta.change(time("D"))
dailyStartEquity := strategy.equity
dailyLockout := false
// Calculate current daily P&L (includes open positions)
currentDailyPnL = strategy.equity - dailyStartEquity
if currentDailyPnL <= -maxDailyLoss
dailyLockout := true
// ==============================================================================
// 3. ANTI-REVENGE COOLDOWN TIMER
// ==============================================================================
var int lastLossTime = 0
var int closedTradesTracker = 0
// Check if a new trade was closed on this bar
if strategy.closedtrades > closedTradesTracker
// Check the profit of the last closed trade
lastProfit = strategy.closedtrades.profit(strategy.closedtrades - 1)
if lastProfit < 0
lastLossTime := time
closedTradesTracker := strategy.closedtrades
// Calculate minutes since the last losing trade
minsSinceLoss = (time - lastLossTime) / 60000
inCooldown = (lastLossTime > 0) and (minsSinceLoss < cooldownMins)
// ==============================================================================
// 4. POSITION SIZING & PERMISSIONS
// ==============================================================================
// Apply Stress Protocol sizing
actualLotSize = enableStressMode ? (lotSize * stressScaleFactor) : lotSize
// Master switch for entries
canTrade = not dailyLockout and not inCooldown
// ==============================================================================
// 5. PLACEHOLDER ENTRY LOGIC (Replace with your raw price action setups)
// ==============================================================================
// Dummy condition: Simple engulfing pattern for demonstration
bullishSetup = close > open[1] and close[1] < open[1] and open < close[1]
bearishSetup = close < open[1] and close[1] > open[1] and open > close[1]
if bullishSetup and canTrade
strategy.entry("Long", strategy.long, qty=actualLotSize)
strategy.exit("Exit Long", "Long", loss=150, profit=300)
if bearishSetup and canTrade
strategy.entry("Short", strategy.short, qty=actualLotSize)
strategy.exit("Exit Short", "Short", loss=150, profit=300)
// Close all open positions immediately if Daily Loss Limit is breached mid-trade
if dailyLockout
strategy.close_all(comment="DAILY LOSS LIMIT HIT")
// ==============================================================================
// 6. VISUAL WARNINGS & DASHBOARD
// ==============================================================================
// Background warnings to physically signal your state
bgcolor(dailyLockout ? color.new(color.red, 85) : na, title="Daily Loss Lockout BG")
bgcolor(inCooldown and not dailyLockout ? color.new(color.orange, 85) : na, title="Cooldown BG")
// On-chart dashboard tracking your metrics
var table dash = table.new(position.top_right, 2, 4, border_width = 1)
if barstate.islast
table.cell(dash, 0, 0, "Stress Mode:", text_color=color.white, bgcolor=color.gray)
table.cell(dash, 1, 0, enableStressMode ? "ON (25% Size)" : "OFF", text_color=color.white, bgcolor=enableStressMode ? color.purple : color.gray)
table.cell(dash, 0, 1, "Daily P&L:", text_color=color.white, bgcolor=color.gray)
table.cell(dash, 1, 1, str.tostring(currentDailyPnL, "#.##"), text_color=color.white, bgcolor=currentDailyPnL < 0 ? color.red : color.green)
table.cell(dash, 0, 2, "Daily Limit:", text_color=color.white, bgcolor=color.gray)
table.cell(dash, 1, 2, dailyLockout ? "LOCKED" : "OK", text_color=color.white, bgcolor=dailyLockout ? color.red : color.green)
table.cell(dash, 0, 3, "Cooldown:", text_color=color.white, bgcolor=color.gray)
table.cell(dash, 1, 3, inCooldown ? "WAIT " + str.tostring(math.ceil(cooldownMins - minsSinceLoss)) + "m" : "READY", text_color=color.white, bgcolor=inCooldown ? color.orange : color.green)Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
How this Framework Operates
The Anti-Revenge Timer (inCooldown): It actively monitors your closed trades. If a trade closes in the red, it flags lastLossTime. For the next 10 minutes (or whatever you set), the chart background turns orange, the dashboard yells "WAIT", and the canTrade boolean blocks any new entries from firing, breaking the impulse cycle.
The Stress Mode Toggle (enableStressMode): Accessible directly from the indicator settings icon. Checking this box instantly recalculates actualLotSize to 25% of your standard volume. You still get to execute the setups you see in the market structure, but the psychological and financial risk is drastically muted.
The Daily Kill Switch (dailyLockout): This tracks floating equity intraday, not just closed trades. If a rogue trade pushes your P&L past the daily limit, strategy.close_all() fires immediately, flattening the account. The background turns solid red and remains locked until the daily session rolls over.
The Anti-Revenge Timer (inCooldown): It actively monitors your closed trades. If a trade closes in the red, it flags lastLossTime. For the next 10 minutes (or whatever you set), the chart background turns orange, the dashboard yells "WAIT", and the canTrade boolean blocks any new entries from firing, breaking the impulse cycle.
The Stress Mode Toggle (enableStressMode): Accessible directly from the indicator settings icon. Checking this box instantly recalculates actualLotSize to 25% of your standard volume. You still get to execute the setups you see in the market structure, but the psychological and financial risk is drastically muted.
The Daily Kill Switch (dailyLockout): This tracks floating equity intraday, not just closed trades. If a rogue trade pushes your P&L past the daily limit, strategy.close_all() fires immediately, flattening the account. The background turns solid red and remains locked until the daily session rolls over.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
Here is the professional-grade iteration. In institutional and proprietary trading environments, risk frameworks don't just rely on static numbers—they require real-time (intrabar) tracking, dynamic position sizing based on account equity, and strict alert systems.
This upgraded version introduces Intrabar Persistence (varip) to cut positions mid-candle the exact millisecond a limit is breached, dynamic percentage-based risk sizing, a consecutive loss circuit breaker, and a sleek, non-intrusive UI dashboard.
This upgraded version introduces Intrabar Persistence (varip) to cut positions mid-candle the exact millisecond a limit is breached, dynamic percentage-based risk sizing, a consecutive loss circuit breaker, and a sleek, non-intrusive UI dashboard.
Code: Select all
//@version=5
strategy("Pro Discipline & Execution Framework", overlay=true, calc_on_every_tick=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=1, commission_type=strategy.commission.cash_per_order, commission_value=1.5)
// ==============================================================================
// 1. INSTITUTIONAL RISK PARAMETERS
// ==============================================================================
grp_risk = "Risk Management & Circuit Breakers"
maxDailyDrawdownPct = input.float(2.0, "Max Daily Drawdown (%)", group=grp_risk, step=0.1, tooltip="Daily lockout if equity drops this percentage below the day's starting balance.")
maxConsecLosses = input.int(3, "Max Consecutive Losses", group=grp_risk, tooltip="Triggers session lockout if you hit this many back-to-back losses.")
revengeCooldown = input.int(10, "Post-Loss Cooldown (Mins)", group=grp_risk, tooltip="Hard block on new entries after any realized loss.")
grp_stress = "Life Stress / Cognitive Degradation Protocol"
stressMode = input.bool(false, "Engage Stress Protocol", group=grp_stress)
stressExposure = input.float(25.0, "Stress Sizing Exposure (%)", group=grp_stress, step=5.0, tooltip="Reduces standard position size to this percentage when active.")
grp_trade = "Position Sizing & Execution"
baseRiskPct = input.float(1.0, "Base Risk Per Trade (%)", group=grp_trade, step=0.1)
// ==============================================================================
// 2. INTRABAR STATE MANAGEMENT (varip)
// ==============================================================================
// Using varip allows variables to update on every tick, not just bar close.
varip float startOfDayEquity = strategy.equity
varip bool isDailyLockout = false
varip int consecutiveLosses = 0
varip int lastLossTime = 0
var int totalClosedTrades = 0
// ==============================================================================
// 3. SESSION & EQUITY TRACKING
// ==============================================================================
// Reset limits at the start of a new trading session/day
isNewDay = ta.change(time("D")) != 0
if isNewDay
startOfDayEquity := strategy.equity
isDailyLockout := false
consecutiveLosses := 0
// Real-time Daily Drawdown Calculation
currentDrawdownPct = ((startOfDayEquity - strategy.equity) / startOfDayEquity) * 100
if currentDrawdownPct >= maxDailyDrawdownPct
isDailyLockout := true
// ==============================================================================
// 4. TRADE OUTCOME ANALYSIS (Cooldown & Consecutive Losses)
// ==============================================================================
if strategy.closedtrades > totalClosedTrades
tradesToCheck = strategy.closedtrades - totalClosedTrades
for i = 1 to tradesToCheck
tradeIndex = strategy.closedtrades - i
tradeProfit = strategy.closedtrades.profit(tradeIndex)
if tradeProfit < 0
lastLossTime := time
consecutiveLosses += 1
else
consecutiveLosses := 0 // Reset on a win
totalClosedTrades := strategy.closedtrades
// Circuit Breaker triggers
hitLossLimit = consecutiveLosses >= maxConsecLosses
minsSinceLoss = (time - lastLossTime) / 60000
inCooldown = (lastLossTime > 0) and (minsSinceLoss < revengeCooldown)
// ==============================================================================
// 5. MASTER EXECUTION LOGIC & SIZING
// ==============================================================================
// Calculate dynamic lot size based on equity
currentCap = strategy.equity
riskAmount = currentCap * (baseRiskPct / 100)
// Apply Stress Protocol haircut if active
finalRiskAmount = stressMode ? riskAmount * (stressExposure / 100) : riskAmount
// Master permission boolean
systemGo = not isDailyLockout and not inCooldown and not hitLossLimit
// ==============================================================================
// 6. PLACEHOLDER SIGNALS (Replace with your Price Action criteria)
// ==============================================================================
// Dummy condition: Moving average crossover for demonstration
fastMA = ta.ema(close, 9)
slowMA = ta.ema(close, 21)
goLong = ta.crossover(fastMA, slowMA)
goShort = ta.crossunder(fastMA, slowMA)
if goLong and systemGo
strategy.entry("Long", strategy.long, qty=finalRiskAmount)
if goShort and systemGo
strategy.entry("Short", strategy.short, qty=finalRiskAmount)
// Emergency Flattening: Close all if intrabar limits are breached mid-trade
if not systemGo and strategy.opentrades > 0
strategy.close_all(comment="CIRCUIT BREAKER: FLATTENED")
alert("Risk Management Protocol Triggered: All positions closed.", alert.freq_once_per_bar)
// ==============================================================================
// 7. PRO UI / DASHBOARD
// ==============================================================================
// Discreet Background Alerts
bgcolor(isDailyLockout or hitLossLimit ? color.new(color.maroon, 85) : na, title="Lockout Background")
bgcolor(inCooldown and not isDailyLockout ? color.new(color.orange, 90) : na, title="Cooldown Background")
// Sleek HUD Table
var table hud = table.new(position.bottom_right, 4, 3, bgcolor=color.rgb(18, 18, 18, 20), border_width=1, border_color=color.rgb(40, 40, 40))
if barstate.islast
// Header Row
table.cell(hud, 0, 0, "SYSTEM STATUS", text_color=color.gray, text_size=size.small)
table.cell(hud, 1, 0, "DD %", text_color=color.gray, text_size=size.small)
table.cell(hud, 2, 0, "STREAK", text_color=color.gray, text_size=size.small)
table.cell(hud, 3, 0, "STRESS PROTOCOL", text_color=color.gray, text_size=size.small)
// Status Logic
string statusText = "ACTIVE"
color statusCol = color.teal
if isDailyLockout
statusText := "MAX DD LOCK"
statusCol := color.red
else if hitLossLimit
statusText := "STREAK LOCK"
statusCol := color.red
else if inCooldown
statusText := "COOLDOWN (" + str.tostring(math.ceil(revengeCooldown - minsSinceLoss)) + "m)"
statusCol := color.Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: July psychology scorecard: tilt days and wins
Key Professional Upgrades
Intrabar Persistence (calc_on_every_tick=true & varip): Standard Pine Script evaluates rules only when a candle closes. If you are scalping the 5M chart and a trade tanks your account past the daily limit at minute 2, standard scripts won't cut the trade until minute 5. The varip variables in this script track floating equity in real-time, tick-by-tick, instantly flattening the position mid-candle if a threshold is breached.
Dynamic Percentage Risk: Moving away from fixed lot sizes, it calculates your position dynamically based on a percentage of your current floating equity (baseRiskPct). This is how prop firms scale risk.
Consecutive Loss Circuit Breaker: Alongside the daily loss limit, it now tracks consecutiveLosses. Hitting a streak of 3 losses (customizable) triggers a hard session lockout, preventing a "death by a thousand cuts" scenario where you haven't hit the monetary limit but are clearly out of sync with market structure.
Institutional HUD: The dashboard is moved to position.bottom_right to keep the price action clean. It uses dark mode aesthetics with muted colors that only flare up (Orange/Red) when you are approaching a risk threshold, reducing visual noise.
Intrabar Persistence (calc_on_every_tick=true & varip): Standard Pine Script evaluates rules only when a candle closes. If you are scalping the 5M chart and a trade tanks your account past the daily limit at minute 2, standard scripts won't cut the trade until minute 5. The varip variables in this script track floating equity in real-time, tick-by-tick, instantly flattening the position mid-candle if a threshold is breached.
Dynamic Percentage Risk: Moving away from fixed lot sizes, it calculates your position dynamically based on a percentage of your current floating equity (baseRiskPct). This is how prop firms scale risk.
Consecutive Loss Circuit Breaker: Alongside the daily loss limit, it now tracks consecutiveLosses. Hitting a streak of 3 losses (customizable) triggers a hard session lockout, preventing a "death by a thousand cuts" scenario where you haven't hit the monetary limit but are clearly out of sync with market structure.
Institutional HUD: The dashboard is moved to position.bottom_right to keep the price action clean. It uses dark mode aesthetics with muted colors that only flare up (Orange/Red) when you are approaching a risk threshold, reducing visual noise.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.