fix: equalise dollar risk per trade — the position cap was doing the sizing
TRADING_RISK_PER_TRADE_PCT 0.05 -> 0.015.
On a ~$240 account the 5% risk budget ($12) is unreachable: a 4.5% stop would
need $267 of notional against a $38 position cap (max_position_pct=0.16). So
calculate_position_size never bound -- the POSITION CAP did, on every trade.
The consequence is that every position was the same NOTIONAL (~$34 average) and
the dollar risk floated with stop width instead of being held constant:
measured over 64 live trades: risk ranged $0.52 to $8.79 -- a 17x spread
That is the opposite of what risk-based sizing is for, and it concentrated the
damage exactly where the stops were widest. On 2026-09-15/16 the four widest-stop
entries (CANG 13.5%, FTFT 21.6%, ZTG 13.2%, VNCE 19.8%) produced -$8.57 of an
-$8.84 week. It also interacts badly with the -10% catastrophe floor: any stop
wider than 10% is effectively a 10% stop, so a wide-stop trade cannot be saved by
its own stop but still realises a full 10%+ loss on the same notional.
At 1.5% the risk calc binds for wide stops while the position cap still binds for
narrow ones, compressing the spread to 6.8x. Replaying the same 64 trades:
-$4.09 -> -$0.32.
Checked that this is risk EQUALISATION and not merely trading smaller: against a
plain proportional shrink to the same average notional, equalising is worth
+$3.27 at 1.25%, +$2.30 at 1.0%, +$2.45 at 0.75%. The benefit holds at every
matched size.
Below 1% trades start being skipped outright as shares round to zero (1 of 64
lost at 1.0%, 13 of 64 at 0.5%) -- a hidden cost that looks like improved P&L.
1.5% is the tightest setting that drops no trades. Expressed as a percentage
rather than TRADING_MAX_RISK_DOLLARS so it scales with the account.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2LepdJfPCfK5Q8uznjFBM
This commit is contained in:
1 parent
11b0fcd7b7
commit
60e009f0c6
1 file changed
+17
-1
@@ -103,7 +103,23 @@ TRADING_REGIME_GATE_ENABLED=0
|
||||
TRADING_REGIME_GATE_P_MIN=0.5
|
||||
TRADING_REQUIRE_ABOVE_VWAP=1
|
||||
TRADING_REWARD_MULTIPLE=10.0
|
||||
TRADING_RISK_PER_TRADE_PCT=0.05
|
||||
# RISK PER TRADE cut 0.05 -> 0.015 (2026-09-16). At 5% the risk budget was
|
||||
# unreachable: 5% of ~$240 is $12, which on a 4.5% stop needs $267 of notional
|
||||
# against a $38 position cap (TRADING_MAX_POSITION_PCT=0.16). So the POSITION CAP
|
||||
# bound on every trade and the risk calc never did — every position was the same
|
||||
# NOTIONAL and the dollar risk floated with stop width, a measured 17x spread
|
||||
# ($0.52 to $8.79) across 64 live trades. Wide-stop names carried 3-8x the risk of
|
||||
# narrow-stop ones; on 2026-09-15/16 the four widest-stop trades produced -$8.57 of
|
||||
# an -$8.84 week.
|
||||
#
|
||||
# At 1.5% the risk calc binds for wide stops while the position cap still binds for
|
||||
# narrow ones, compressing the spread to 6.8x. Replayed over 64 live trades:
|
||||
# -$4.09 -> -$0.32, and the gain is NOT just smaller size — against a plain
|
||||
# shrink to the same average notional it is worth +$3.1 to +$3.3. Below 1% trades
|
||||
# start being skipped entirely (shares round to zero: 1 lost at 1.0%, 13 at 0.5%),
|
||||
# so 1.5% is the tightest value that drops nothing. It scales with equity, unlike
|
||||
# TRADING_MAX_RISK_DOLLARS.
|
||||
TRADING_RISK_PER_TRADE_PCT=0.015
|
||||
TRADING_SESSION_ONLY=1
|
||||
TRADING_TRIGGER_SLIP_PCT=0.004
|
||||
TRADING_UNIFIED_ENTRY=1
|
||||
|
||||
Reference in new issue
Block a user