Skip to main content

circuit breaker protocol - knowing when to pause trading saves accounts

paused trading today.

circuit breaker triggered.

this rule saved my account in sept 2023.

saving it again now.

what is a circuit breaker
#

trading rule that forces pause after consecutive losses.

my implementation:

3 consecutive losses = mandatory 1 week pause.

5 consecutive losses = mandatory 2 week pause (never hit this).

-3% account drawdown = review and potentially pause.

-5% account drawdown = mandatory 2 week pause (never hit this).

automatically enforced.

why circuit breakers matter
#

without circuit breaker (sept 2023):

loss → frustration → revenge trade → bigger loss → panic → even bigger loss → disaster.

lost $28k in 18 days.

with circuit breaker (may 2024):

loss → loss → loss → PAUSE → review → calm analysis → resume when ready.

lost $1,420 in 2 days, paused, limited damage.

difference: $26,580.

the psychology of consecutive losses
#

what happens mentally:

loss 1: “bad luck, happens.”

loss 2: “hmm, conditions might be wrong.”

loss 3: “fuck, something’s broken. need to fix it NOW.”

that “fix it NOW” feeling = danger.

leads to:

  • revenge trading
  • doubled position size
  • abandoned filters
  • emotional decisions
  • account blow-ups

circuit breaker interrupts this pattern.

my current situation
#

monday 5/13: -$880 (2 losses)

tuesday 5/14: -$540 (1 loss)

total: 3 consecutive losses

circuit breaker: ACTIVATED

wednesday-thursday: paused (no trading)

friday: resume (1 trade, 1 win, +$420)

system worked.

what i do during pause
#

NOT allowed:

  • trade with real money
  • paper trade (creates false confidence)
  • backtest with current market data (selection bias)
  • make strategy changes (emotional decisions)

allowed:

  • review losing trades objectively
  • analyze market conditions
  • check if filters missed something
  • journal about emotional state
  • exercise, rest, decompress
  • spend time with A.
  • anything except trading

pause = reset.

reviewing the losses
#

loss 1 (monday, -$480):

entered SPX put spread.

VIX spiked 24 → 28 mid-trade.

regime shifted unexpectedly.

stop executed correctly.

loss 2 (monday, -$400):

entered QQQ call spread.

correlated to loss 1.

both stopped together.

should’ve avoided correlated position.

loss 3 (tuesday, -$540):

thought conditions improved.

VIX dropped back to 23.

entered NQ trade.

false signal, stopped out.

should’ve waited for VIX <20.

lessons from analysis
#

improvement 1:

add VIX >25 = auto-pause (don’t wait for losses).

improvement 2:

no new positions when existing position down >50%.

improvement 3:

require 4 hours of regime stability before resuming after pause.

improvements implemented for next time.

comparing to september 2023
#

september (no circuit breaker):

18 days of disaster.

14 consecutive losing trades.

kept trading bigger to “make it back.”

lost $28k total.

may (with circuit breaker):

2 days of losses.

3 consecutive losing trades.

paused immediately.

lost $1,420 total.

20x better outcome.

the hard part about pausing
#

FOMO:

what if market reverses and i miss it?

what if i could’ve made it back?

reality:

market always there tomorrow.

missing one opportunity < blowing up account.

patience > FOMO.

coding the circuit breaker
#

import pandas as pd
from datetime import datetime, timedelta

class CircuitBreaker:
    """
    Enforces trading pauses based on consecutive losses or drawdown
    """

    def __init__(self):
        self.consecutive_losses = 0
        self.pause_until = None
        self.pause_reason = None
        self.trade_history = []

    def record_trade(self, pnl, trade_date=None):
        """
        Record trade result and update consecutive loss counter
        """
        if trade_date is None:
            trade_date = datetime.now()

        self.trade_history.append({
            'date': trade_date,
            'pnl': pnl
        })

        if pnl < 0:
            self.consecutive_losses += 1
        else:
            self.consecutive_losses = 0  # Reset on win

        # Check circuit breaker triggers
        self.check_triggers()

    def check_triggers(self):
        """
        Check if circuit breaker should activate
        """
        # 3 consecutive losses = 1 week pause
        if self.consecutive_losses >= 3:
            self.activate_pause(
                days=7,
                reason=f"{self.consecutive_losses} consecutive losses"
            )

        # 5 consecutive losses = 2 week pause
        elif self.consecutive_losses >= 5:
            self.activate_pause(
                days=14,
                reason=f"{self.consecutive_losses} consecutive losses (severe)"
            )

        # Check drawdown triggers
        if len(self.trade_history) >= 10:
            recent_pnl = sum([t['pnl'] for t in self.trade_history[-10:]])
            # -3% drawdown = review
            # -5% drawdown = mandatory pause
            # (Implementation depends on account size tracking)

    def activate_pause(self, days, reason):
        """
        Activate circuit breaker pause
        """
        if self.pause_until is None:  # Don't override existing pause
            self.pause_until = datetime.now() + timedelta(days=days)
            self.pause_reason = reason
            print(f"⚠️  CIRCUIT BREAKER ACTIVATED")
            print(f"Reason: {reason}")
            print(f"Paused until: {self.pause_until.strftime('%Y-%m-%d')}")

    def is_paused(self):
        """
        Check if currently in pause period
        """
        if self.pause_until is None:
            return False

        if datetime.now() < self.pause_until:
            return True
        else:
            # Pause expired, reset
            self.clear_pause()
            return False

    def clear_pause(self):
        """
        Clear pause and reset counters
        """
        print(f"✓ Pause period ended. Resuming trading.")
        print(f"Consecutive losses reset to 0.")
        self.pause_until = None
        self.pause_reason = None
        self.consecutive_losses = 0

    def can_trade(self):
        """
        Check if trading is allowed
        """
        if self.is_paused():
            days_left = (self.pause_until - datetime.now()).days
            print(f"✗ Trading blocked: {self.pause_reason}")
            print(f"Resume in {days_left} days")
            return False
        else:
            return True


# Usage in live trading system
breaker = CircuitBreaker()

def execute_trade(symbol, size):
    """
    Execute trade with circuit breaker check
    """
    # Check if trading allowed
    if not breaker.can_trade():
        print("Trade blocked by circuit breaker")
        return None

    # Execute trade
    result = run_strategy(symbol, size)

    # Record result
    breaker.record_trade(result['pnl'])

    return result

therapy discussion (5/14)
#

dr. r: “you paused trading. how’s it feel?”

me: “good actually. relieved.”

dr. r: “relieved?”

me: “yeah. losing streak felt like quicksand. pause gave me solid ground.”

dr. r: “you’re choosing safety over proving something.”

me: “yeah. september taught me. can’t trade through every condition. sometimes pause is the right move.”

dr. r: “that’s wisdom.”

exactly.

when to resume
#

friday (5/17):

VIX dropped to 19.2.

regime stability improved (0.78).

correlation decreased (0.56).

conditions improved.

took 1 trade.

won.

+$420.

calm return.

the rule vs the ego
#

ego says:

“you’re a trader, trade through everything.”

“pausing is weak.”

“make it back immediately.”

rule says:

“pause protects capital.”

“ego destroys accounts.”

“survive to trade another day.”

rule wins.

tonight (11:48pm)
#

circuit breaker saved me again.

3 losses → pause → review → calm return.

this rule = account protection.

september taught me the hard way.

may proving i learned.


11:48pm wednesday. circuit breaker protocol. 3 consecutive losses triggered 1-week pause. paused wed-thu, resumed fri. lost $1,420, prevented spiral. september 2023 no circuit breaker = $28k disaster. may 2024 with circuit breaker = $1,420 contained loss. system working. discipline maintained.

-AK

Related

first day full risk - testing my psychology
ramped to 0.5% risk thursday. first 2 days at full size. psychology test passed. wednesday 11/15 - final day 0.25% risk # trades: 2 setups, both winners
filtering aggressively in high vol - survival mode not growth mode
week 2 may. VIX still elevated. aggressive filtering required. current market conditions # VIX range: 19-26 this week
first week february - choppy conditions, tighter risk
first week february done. choppy as expected. tighter risk working. week 1 february trades (feb 1-2, 5-7) # thursday 2/1: 2 trades, 1 win. +$480
week 2 december - barely breakeven, mental fog increasing
week 2 december done. barely breakeven. mental fog increasing. week 2 trades (dec 8-12) # friday 12/8: 2 trades, 1 win. +$280
first week december - choppy markets, mental game harder
first week december done. markets choppy. mental game harder. week 1 trades (dec 1-5) # friday 12/1: 2 trades, 1 win. +$140
december start - focus on maintaining not growing
december started. recovered account. now maintaining through holidays. friday 12/1 trades # morning: 2 setups. results: SPX iron condor: +$620 QQQ put spread: stopped out, -$480 day total: +$140