diff --git a/api/handler_user.go b/api/handler_user.go index 5f82cb9d..aa9f9a2a 100644 --- a/api/handler_user.go +++ b/api/handler_user.go @@ -262,13 +262,14 @@ func (s *Server) createDefaultStrategies(userID string, lang string) error { c.CoinSource.VergexLimit = 10 c.CoinSource.VergexMarketType = "all" c.CoinSource.VergexChain = "hyperliquid" - c.RiskControl.MaxPositions = 2 - c.RiskControl.BTCETHMaxLeverage = 10 - c.RiskControl.AltcoinMaxLeverage = 10 - // 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.MaxPositions = 4 + c.RiskControl.BTCETHMaxLeverage = 20 + c.RiskControl.AltcoinMaxLeverage = 20 + // 5× equity notional per position: 4 positions = 20x total account + // notional (full margin at 20x). Bigger single positions with room for + // a balanced long/short book. + c.RiskControl.BTCETHMaxPositionValueRatio = 5.0 + c.RiskControl.AltcoinMaxPositionValueRatio = 5.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 3dfe6f9b..9182bac4 100644 --- a/api/handler_user_default_strategy_test.go +++ b/api/handler_user_default_strategy_test.go @@ -54,16 +54,16 @@ func TestCreateDefaultStrategiesUsesOneReadyToRunClaw402Preset(t *testing.T) { if trendCfg.CoinSource.SourceType != "vergex_signal" || trendCfg.CoinSource.VergexLimit != 10 || trendCfg.CoinSource.VergexMarketType != "all" { t.Fatalf("default strategy should use the Claw402/Vergex all-market signal ranking, got %+v", trendCfg.CoinSource) } - if trendCfg.CoinSource.UseAI500 || trendCfg.RiskControl.MaxPositions > 2 { - t.Fatalf("default strategy should be Claw402/Vergex native with at most two positions, got coin=%+v risk=%+v", trendCfg.CoinSource, trendCfg.RiskControl) + if trendCfg.CoinSource.UseAI500 || trendCfg.RiskControl.MaxPositions != 4 { + t.Fatalf("default strategy should be Claw402/Vergex native with a 4-position balanced book, got coin=%+v risk=%+v", trendCfg.CoinSource, trendCfg.RiskControl) } - 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.BTCETHMaxLeverage != 20 || trendCfg.RiskControl.AltcoinMaxLeverage != 20 { + t.Fatalf("default strategy should use 20x leverage for all Claw402 opens, got risk=%+v", trendCfg.RiskControl) } - if trendCfg.RiskControl.BTCETHMaxPositionValueRatio != 4 || - trendCfg.RiskControl.AltcoinMaxPositionValueRatio != 4 || + if trendCfg.RiskControl.BTCETHMaxPositionValueRatio != 5 || + trendCfg.RiskControl.AltcoinMaxPositionValueRatio != 5 || trendCfg.RiskControl.MaxMarginUsage != 1.0 { - t.Fatalf("default strategy should size Claw402 opens at 4x equity notional (two positions ≈ 80%% margin at 10x), got risk=%+v", trendCfg.RiskControl) + t.Fatalf("default strategy should size Claw402 opens at 5x equity notional (4 positions = 20x total at 20x), got risk=%+v", trendCfg.RiskControl) } } diff --git a/kernel/engine_prompt_test.go b/kernel/engine_prompt_test.go index d6e3a3d0..bc3b535d 100644 --- a/kernel/engine_prompt_test.go +++ b/kernel/engine_prompt_test.go @@ -29,8 +29,8 @@ func TestBuildSystemPromptUsesVergexClaw402Prompt(t *testing.T) { if !strings.Contains(prompt, "Direction must be data-driven") { t.Fatalf("prompt should explain that direction is data-driven, not long-only:\n%s", prompt) } - if !strings.Contains(prompt, "every open position must use exactly 10x") { - t.Fatalf("prompt should force 10x leverage for Claw402 opens:\n%s", prompt) + if !strings.Contains(prompt, "every open position must use exactly 20x") { + t.Fatalf("prompt should force 20x leverage for Claw402 opens:\n%s", prompt) } if !strings.Contains(prompt, "use the full max notional per position") { t.Fatalf("prompt should force full-size Claw402 opens:\n%s", prompt) diff --git a/store/strategy.go b/store/strategy.go index 20a168b3..1553c09d 100644 --- a/store/strategy.go +++ b/store/strategy.go @@ -1014,11 +1014,11 @@ func GetDefaultStrategyConfig(lang string) StrategyConfig { PriceRankingLimit: 10, }, RiskControl: RiskControlConfig{ - 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: 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 + MaxPositions: 4, // Room for ~2 long + 2 short (CODE ENFORCED) + BTCETHMaxLeverage: 20, // BTC/ETH exchange leverage (AI guided) + AltcoinMaxLeverage: 20, // TradeFi exchange leverage (AI guided) + BTCETHMaxPositionValueRatio: 5.0, // Per-position notional = equity × 5; 4 positions = 20x total (full margin at 20x) + AltcoinMaxPositionValueRatio: 5.0, // Per-position notional = equity × 5; 4 positions = 20x total (full margin at 20x) 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/web/src/pages/StrategyStudioPage.tsx b/web/src/pages/StrategyStudioPage.tsx index 20c99853..cae8749a 100644 --- a/web/src/pages/StrategyStudioPage.tsx +++ b/web/src/pages/StrategyStudioPage.tsx @@ -1388,13 +1388,14 @@ export function StrategyStudioPage() { }), risk_control: defaultRisk({ ...base.ai_config?.risk_control, - max_positions: 2, - btc_eth_max_leverage: 10, - altcoin_max_leverage: 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_positions: 4, + btc_eth_max_leverage: 20, + altcoin_max_leverage: 20, + // 5× equity notional per position — 4 positions = 20x total account + // notional (full margin at 20x). Bigger single positions, room for + // a balanced long/short book. + btc_eth_max_position_value_ratio: 5, + altcoin_max_position_value_ratio: 5, max_margin_usage: 1.0, min_confidence: 78, min_risk_reward_ratio: 3,