Skip to main content

week 3 performance: sharpe 2.1 actual vs 1.64 backtest

three weeks live = enough data for initial validation
#

march 15 - march 30 (15 trading days)

time to see if reality matches backtest

the numbers
#

live trading results:

  • total trades: 12
  • wins: 9
  • losses: 3
  • win rate: 75%
  • average win: $387
  • average loss: $128
  • net P&L: $2,099
  • return on $400k account: 0.52%
  • annualized (if sustained): 12.5%
  • sharpe ratio: 2.13

backtest prediction (march 2023):

  • expected trades: 14
  • expected win rate: 72%
  • expected return: 0.48%
  • expected sharpe: 1.64

performance vs prediction
#

metric backtest actual difference
trades 14 12 -14%
win rate 72% 75% +4%
monthly return 0.48% 0.52% +8%
sharpe ratio 1.64 2.13 +30%

beating backtest by decent margin

probably luck. 3 weeks isn’t enough to validate but it’s encouraging

why actual sharpe is higher
#

sharpe ratio = (return - risk_free_rate) / volatility

my returns are slightly higher (0.52% vs 0.48%)

but more importantly: volatility is lower

backtest assumed 8% monthly volatility based on 2021-2022 data

actual volatility march 15-30: 5.2%

lower vol = higher sharpe even with similar returns

trade-by-trade breakdown
#

9 winners:

  1. march 15: $430 (50% target hit, 9 days)
  2. march 16: $395 (50% target hit, 8 days)
  3. march 17: $285 (50% target hit, 6 days)
  4. march 21: $445 (50% target hit, 7 days)
  5. march 22: $380 (50% target hit, 6 days)
  6. march 23: $410 (50% target hit, 5 days)
  7. march 27: $325 (2 DTE close, 4 days)
  8. march 28: $360 (50% target hit, 5 days)
  9. march 29: $455 (50% target hit, 8 days)

3 losses:

  1. march 17: -$95 (stopped out, spread widened against me)
  2. march 20: -$135 (stopped out, volatility spike)
  3. march 24: -$150 (stopped out, tested short strike)

average hold time for winners: 6.4 days average hold time for losers: 2.1 days

losers get stopped faster (good). winners have time to work

slippage tracking
#

total slippage march 15-30: $238

12 trades × avg $6.40 slippage per spread × 10 contracts = $768 theoretical

actual was $238

way better than model predicted

why? i started using limit orders on march 22 instead of market orders

saves $3-4 per spread but adds execution risk (sometimes don’t get filled)

got filled on 8 out of 10 limit orders. 2 times had to cancel and re-submit at market

net result: lower slippage without missing too many trades

position sizing validation
#

been risking 2.5% per trade ($1,000 max loss per spread, 10 contracts)

max portfolio heat hit: 12.5% (5 positions open simultaneously on march 23)

within my 15% limit. good

largest loss was $150 = 0.0375% of account

even if i hit 5 max losses in a row (unlikely): 0.1875% drawdown

survivable

what’s working
#

  1. 50% profit target - hitting it 75% of the time
  2. IV rank > 40 filter - keeping me out of low premium environments
  3. 2 DTE exit - prevents holding into risky expiration
  4. limit orders - reducing slippage meaningfully
  5. position sizing - keeping losses small

what needs improvement
#

  1. stop loss discipline - 3 losses were all near max loss ($150). could’ve cut earlier
  2. trade frequency - only 12 trades in 15 days. backtest assumed 14. need to be more aggressive when setups appear
  3. slippage model - still predicting $6.40 average but actual is $4.80 with limit orders. need to update

next week priorities
#

  1. update slippage model with limit order assumptions
  2. tighten stop loss from -200% to -150% (exit when spread doubles, not when it hits max loss)
  3. look for more trade opportunities - might be leaving setups on table

march isn’t over yet (one more day) but this is solid progress

if i can maintain sharpe > 1.8 over next 3 months that would validate the strategy for real

-AK