diff --git a/api/handler_user.go b/api/handler_user.go index bfe1d30d..5f82cb9d 100644 --- a/api/handler_user.go +++ b/api/handler_user.go @@ -265,8 +265,10 @@ func (s *Server) createDefaultStrategies(userID string, lang string) error { c.RiskControl.MaxPositions = 2 c.RiskControl.BTCETHMaxLeverage = 10 c.RiskControl.AltcoinMaxLeverage = 10 - c.RiskControl.BTCETHMaxPositionValueRatio = 10.0 - c.RiskControl.AltcoinMaxPositionValueRatio = 10.0 + // 4× equity notional per position: at 10x leverage two full positions + // use ~80% of margin — concentrated but solvent. + c.RiskControl.BTCETHMaxPositionValueRatio = 4.0 + c.RiskControl.AltcoinMaxPositionValueRatio = 4.0 c.RiskControl.MaxMarginUsage = 1.0 c.RiskControl.MinConfidence = 78 c.RiskControl.MinRiskRewardRatio = 3.0 diff --git a/api/handler_user_default_strategy_test.go b/api/handler_user_default_strategy_test.go index 752f7abd..3dfe6f9b 100644 --- a/api/handler_user_default_strategy_test.go +++ b/api/handler_user_default_strategy_test.go @@ -60,10 +60,10 @@ func TestCreateDefaultStrategiesUsesOneReadyToRunClaw402Preset(t *testing.T) { if trendCfg.RiskControl.BTCETHMaxLeverage != 10 || trendCfg.RiskControl.AltcoinMaxLeverage != 10 { t.Fatalf("default strategy should use 10x leverage for all Claw402 opens, got risk=%+v", trendCfg.RiskControl) } - if trendCfg.RiskControl.BTCETHMaxPositionValueRatio != 10 || - trendCfg.RiskControl.AltcoinMaxPositionValueRatio != 10 || + if trendCfg.RiskControl.BTCETHMaxPositionValueRatio != 4 || + trendCfg.RiskControl.AltcoinMaxPositionValueRatio != 4 || trendCfg.RiskControl.MaxMarginUsage != 1.0 { - t.Fatalf("default strategy should use full-size 10x notional for Claw402 opens, got risk=%+v", trendCfg.RiskControl) + t.Fatalf("default strategy should size Claw402 opens at 4x equity notional (two positions ≈ 80%% margin at 10x), got risk=%+v", trendCfg.RiskControl) } } diff --git a/manager/trader_manager.go b/manager/trader_manager.go index 67ada63d..132202c6 100644 --- a/manager/trader_manager.go +++ b/manager/trader_manager.go @@ -658,15 +658,10 @@ func (tm *TraderManager) addTraderFromStore(traderCfg *store.Trader, aiModelCfg return fmt.Errorf("failed to parse strategy config for trader %s: %w", traderCfg.Name, err) } strategyConfig.ClampLimits() - // Autopilot (vergex_signal/claw402) runs a balanced multi-position book: - // hold several instruments with a smaller per-position notional so multiple - // long/short positions fit the margin. Applied after ClampLimits so it is - // not capped back to the conservative single-position default. - if strategyConfig.CoinSource.SourceType == "vergex_signal" { - strategyConfig.RiskControl.MaxPositions = 6 - strategyConfig.RiskControl.BTCETHMaxPositionValueRatio = 1.2 - strategyConfig.RiskControl.AltcoinMaxPositionValueRatio = 1.2 - } + // Sizing comes from the strategy's own RiskControl (a hardcoded + // 6-position × equity×1.2 override used to live here, silently ignoring + // the user's configuration). ClampLimits bounds the values and the + // margin auto-reduce at order time keeps the book solvent. logger.Infof("✓ Trader %s loaded strategy config: %s (maxPos=%d, posRatio=%.1f)", traderCfg.Name, strategy.Name, strategyConfig.RiskControl.MaxPositions, strategyConfig.RiskControl.AltcoinMaxPositionValueRatio) ensureHyperliquidNativeStrategy(traderCfg.Name, exchangeCfg.ExchangeType, strategyConfig) } else { diff --git a/store/strategy.go b/store/strategy.go index 855ba863..20a168b3 100644 --- a/store/strategy.go +++ b/store/strategy.go @@ -1014,11 +1014,11 @@ func GetDefaultStrategyConfig(lang string) StrategyConfig { PriceRankingLimit: 10, }, RiskControl: RiskControlConfig{ - MaxPositions: 6, // Hold up to 6 instruments (≈3 long + 3 short) simultaneously (CODE ENFORCED) + MaxPositions: 2, // Concentrated book: two full-size positions (CODE ENFORCED) BTCETHMaxLeverage: 10, // BTC/ETH exchange leverage (AI guided) AltcoinMaxLeverage: 10, // TradeFi exchange leverage (AI guided) - BTCETHMaxPositionValueRatio: 1.2, // Per-position notional = equity × 1.2 so several positions fit the margin - AltcoinMaxPositionValueRatio: 1.2, // Per-position notional = equity × 1.2 so several positions fit the margin + BTCETHMaxPositionValueRatio: 4.0, // Per-position notional = equity × 4; at 10x two positions ≈ 80% margin + AltcoinMaxPositionValueRatio: 4.0, // Per-position notional = equity × 4; at 10x two positions ≈ 80% margin MaxMarginUsage: 1.0, // Claw402 Autopilot intentionally uses full margin when opening MinPositionSize: 12, // Min 12 USDT per position (CODE ENFORCED) MinRiskRewardRatio: 3.0, // Min 3:1 profit/loss ratio (AI guided) diff --git a/trader/auto_trader.go b/trader/auto_trader.go index 4092bc52..e54b8d4a 100644 --- a/trader/auto_trader.go +++ b/trader/auto_trader.go @@ -422,15 +422,11 @@ func (at *AutoTrader) reloadStrategyConfigIfChanged() error { } strategyConfig.ClampLimits() - // Autopilot (vergex_signal/claw402) runs a balanced multi-position book: - // hold several instruments at once with a smaller per-position notional so - // multiple long/short positions fit the margin. Applied after ClampLimits so - // the book size is not capped back down to the conservative default. - if strategyConfig.CoinSource.SourceType == "vergex_signal" { - strategyConfig.RiskControl.MaxPositions = 6 - strategyConfig.RiskControl.BTCETHMaxPositionValueRatio = 1.2 - strategyConfig.RiskControl.AltcoinMaxPositionValueRatio = 1.2 - } + // NOTE: this used to hardcode the Autopilot book shape (6 positions × + // equity×1.2 notional), silently overriding whatever the user configured in + // their strategy. Sizing now comes from the strategy's own RiskControl — + // ClampLimits above bounds it (ratio 0.5–10, leverage caps), and the + // margin auto-reduce at order time keeps the book solvent. claw402Key := at.config.Claw402WalletKey if claw402Key == "" && at.config.AIModel == "claw402" && at.config.CustomAPIKey != "" { diff --git a/web/src/pages/StrategyStudioPage.tsx b/web/src/pages/StrategyStudioPage.tsx index 361eb42f..20c99853 100644 --- a/web/src/pages/StrategyStudioPage.tsx +++ b/web/src/pages/StrategyStudioPage.tsx @@ -1391,8 +1391,10 @@ export function StrategyStudioPage() { max_positions: 2, btc_eth_max_leverage: 10, altcoin_max_leverage: 10, - btc_eth_max_position_value_ratio: 10, - altcoin_max_position_value_ratio: 10, + // 4× equity notional per position — at 10x leverage two full + // positions use ~80% of margin (concentrated but solvent) + btc_eth_max_position_value_ratio: 4, + altcoin_max_position_value_ratio: 4, max_margin_usage: 1.0, min_confidence: 78, min_risk_reward_ratio: 3,