config: stop the churn — hold for big moves, wide TP/SL, low leverage

Live decomposition of the losing streak: 23% win rate with avg win +$1.23 /
avg loss -$1.04 on ~0.3-0.5% price moves, where the ~0.14% round-trip fee ate
30-50% of every tiny winner. Death by small-move grinding. The AI was closing
positions on ±0.5% noise after the 60m min-hold, capping winners at ~0.86%.

Redesign to 'few big positions, held for big moves':
- Throttle: min hold 60m->4h, noise-close window 90m->8h, reentry 30m->3h,
  opens/hour 30->3, opens/cycle 6->2. Noise band widened -1%..+2% -> -4%..+6%
  so small moves can no longer trigger a close.
- Exits: stop bypass -2.5% -> -5%, take-profit bypass +5% -> +12% (wide,
  asymmetric — let winners run, cut losers only on a real move).
- Leverage 20x -> 5x: a -5% stop at 20x is instant liquidation; at 5x it is
  -25% of margin, survivable. 2 positions x 2.5x = 5x total (full margin,
  ~20% cushion) instead of 4x5x=20x.
- Prompt now instructs the AI to set wide stops (~-5%) and distant targets
  (~+10-12%), hold multi-hour, and never scalp 0.5% moves.

Live strategy updated (maxPos=2, lev=5, ratio=2.5).
This commit is contained in:
tinkle-community
2026-07-21 15:02:23 +09:00
parent 0f3e71560c
commit 39eac5aca7
8 changed files with 65 additions and 62 deletions

View File

@@ -10,23 +10,25 @@ import (
)
const (
// Live history: trades held under an hour were net-negative after fees
// (the 15-60m bucket bled), while the edge concentrated in 1h+ holds.
autopilotMinHoldDuration = 60 * time.Minute
autopilotNoiseCloseHoldDuration = 90 * time.Minute
autopilotReentryCooldown = 30 * time.Minute
// Allow one long + one short per cycle. The real exposure/churn limits are
// MaxPositions (concurrent) + the 45m min-hold + the 90m per-symbol reentry
// cooldown, so the per-hour cap only needs to be high enough not to block the
// directional pair from re-establishing after positions close. A tight value
// here (e.g. 2) starves the strategy: once a couple opens fire, every later
// cycle is blocked and the book drains to flat. Keep it generous.
autopilotMaxOpensPerHour = 30
autopilotMaxOpensPerCycle = 6
earlyCloseStopLossBypassPct = -2.5
earlyCloseTakeProfitBypassPct = 5.0
noiseCloseLossFloorPct = -1.0
noiseCloseProfitCeilingPct = 2.0
// "Hold for big moves, don't churn" regime. Live history showed the
// account bleeding to death by fees: 0.3-0.5% in/out moves where a ~0.14%
// round-trip fee ate 30-50% of every small winner. These values force
// positions to be held for hours and to develop meaningful moves before
// closing, and cut the trade frequency hard.
autopilotMinHoldDuration = 4 * time.Hour
autopilotNoiseCloseHoldDuration = 8 * time.Hour
autopilotReentryCooldown = 3 * time.Hour
// Drastically cut churn: at most a couple of new positions per hour/cycle.
autopilotMaxOpensPerHour = 3
autopilotMaxOpensPerCycle = 2
// Wide, asymmetric exits. Cut a loser only at a real -5% (at 5x leverage
// that is -25% of margin — survivable), let a winner run to +12% before
// any early take-profit. The noise band (-4%..+6%) blocks closing on the
// small moves that were grinding the account to nothing.
earlyCloseStopLossBypassPct = -5.0
earlyCloseTakeProfitBypassPct = 12.0
noiseCloseLossFloorPct = -4.0
noiseCloseProfitCeilingPct = 6.0
)
func isOpenAction(action string) bool {