增加激进控制可放大仓位

This commit is contained in:
薇薇安 2026-02-12 14:03:42 +08:00
parent 0df841c93c
commit 68f028f0fc
4 changed files with 57 additions and 5 deletions

View File

@ -834,7 +834,9 @@ class ConfigManager:
# 固定风险百分比仓位计算(凯利公式)
'USE_FIXED_RISK_SIZING': eff_get('USE_FIXED_RISK_SIZING', True), # 使用固定风险百分比计算仓位
'FIXED_RISK_PERCENT': eff_get('FIXED_RISK_PERCENT', 0.02), # 每笔单子承受的风险2%
# 仓位放大系数1.0=正常1.2=+20% 仓位,上限 2.0,仍受 MAX_POSITION_PERCENT 约束(盈利时适度放大用)
'POSITION_SCALE_FACTOR': eff_get('POSITION_SCALE_FACTOR', 1.0),
# 市场扫描30分钟主周期
'SCAN_INTERVAL': eff_get('SCAN_INTERVAL', scan_interval_default), # 30分钟增加交易机会
'TOP_N_SYMBOLS': eff_get('TOP_N_SYMBOLS', 20), # 每次扫描后优先处理的交易对数量

View File

@ -40,6 +40,8 @@ DEFAULTS_TO_SYNC = [
"description": "大盘共振过滤BTC/ETH 下跌时屏蔽多单。"},
{"config_key": "BETA_FILTER_THRESHOLD", "config_value": "-0.005", "config_type": "number", "category": "strategy",
"description": "大盘共振阈值(比例,如 -0.005 表示 -0.5%)。"},
{"config_key": "POSITION_SCALE_FACTOR", "config_value": "1.0", "config_type": "number", "category": "risk",
"description": "仓位放大系数1.0=正常1.2=+20%上限2.0。盈利时适度调高可扩大收益。"},
]

View File

@ -14,6 +14,7 @@ import './ConfigPanel.css' // 复用 ConfigPanel 的样式
'MAX_CHANGE_PERCENT_FOR_LONG',
'MAX_CHANGE_PERCENT_FOR_SHORT',
'MIN_RR_FOR_TP1',
'POSITION_SCALE_FACTOR',
])
// 便
const KEY_LABELS = {
@ -30,6 +31,7 @@ const KEY_LABELS = {
RSI_EXTREME_REVERSE_ONLY_NEUTRAL_4H: 'RSI 反向仅允许 4H 中性',
MIN_RR_FOR_TP1: '第一目标最小盈亏比(相对止损)',
AUTO_TRADE_ALLOW_4H_NEUTRAL: '允许 4H 中性时自动交易',
POSITION_SCALE_FACTOR: '仓位放大系数',
}
const ConfigItem = ({ label, config, onUpdate, disabled }) => {
@ -414,6 +416,31 @@ const GlobalConfig = () => {
MAX_TREND_MOVE_BEFORE_ENTRY: 0.05,
},
},
profit_scale: {
name: '盈利放大(适度激进)',
desc: '在推荐策略基础上:仓位放大 1.25 倍、单笔上限 10%、每笔风险 2.5%、最多 5 仓。盈利阶段可一键放大收益,仍受单笔上限约束。',
configs: {
POSITION_SCALE_FACTOR: 1.25,
MAX_POSITION_PERCENT: 0.10,
MAX_TOTAL_POSITION_PERCENT: 0.45,
FIXED_RISK_PERCENT: 0.025,
MAX_OPEN_POSITIONS: 5,
MAX_DAILY_ENTRIES: 10,
ATR_STOP_LOSS_MULTIPLIER: 3.0,
RISK_REWARD_RATIO: 3.0,
TAKE_PROFIT_1_PERCENT: 0.2,
TAKE_PROFIT_PERCENT: 0.30,
MIN_RR_FOR_TP1: 1.5,
AUTO_TRADE_ALLOW_4H_NEUTRAL: false,
MAX_RSI_FOR_LONG: 65,
MIN_RSI_FOR_SHORT: 30,
SYMBOL_LOSS_COOLDOWN_ENABLED: true,
SYMBOL_MAX_CONSECUTIVE_LOSSES: 2,
SYMBOL_LOSS_COOLDOWN_SEC: 3600,
BETA_FILTER_ENABLED: true,
MIN_SIGNAL_STRENGTH: 8,
},
},
aggressive: {
name: '激进高频',
desc: '晚间波动大时使用交易频率高止损较紧但止盈合理盈亏比1.5:1',
@ -468,6 +495,7 @@ const GlobalConfig = () => {
SYMBOL_MAX_CONSECUTIVE_LOSSES: { value: 2, type: 'number', category: 'strategy', description: '最大允许连续亏损次数(超过则禁止交易该交易对一段时间)。' },
SYMBOL_LOSS_COOLDOWN_SEC: { value: 3600, type: 'number', category: 'strategy', description: '连续亏损后的冷却时间默认1小时。' },
MIN_RR_FOR_TP1: { value: 1.5, type: 'number', category: 'strategy', description: '第一目标止盈相对止损的最小盈亏比(如 1.5 表示 TP1 至少为止损距离的 1.5 倍。2026-02-12 新增。' },
POSITION_SCALE_FACTOR: { value: 1.0, type: 'number', category: 'risk', description: '仓位放大系数1.0=正常1.2=+20% 仓位1.5=+50%,上限 2.0。盈利时适度调高可扩大收益,仍受单笔上限约束。' },
AUTO_TRADE_ALLOW_4H_NEUTRAL: { value: false, type: 'boolean', category: 'strategy', description: '是否允许 4H 趋势为中性时自动交易。关闭可减少震荡扫损、提升质量(建议关闭)。' },
BETA_FILTER_ENABLED: { value: true, type: 'boolean', category: 'strategy', description: '大盘共振过滤BTC/ETH 下跌时屏蔽多单。' },
BETA_FILTER_THRESHOLD: { value: -0.005, type: 'number', category: 'strategy', description: '大盘共振阈值(比例,如 -0.005 表示 -0.5%)。' },
@ -980,18 +1008,19 @@ const GlobalConfig = () => {
const presetUiMeta = {
altcoin: { group: 'altcoin', tag: '当前推荐' },
profit_scale: { group: 'altcoin', tag: '盈利放大' },
swing: { group: 'backup', tag: '纯限价' },
strict: { group: 'backup', tag: '精选低频' },
conservative: { group: 'backup', tag: '保守' },
}
// + /
// +
const presetGroups = [
{
key: 'altcoin',
title: '当前推荐 · 山寨币策略',
desc: '与当前策略一致4H 中性不自动交易、做多 RSI≤65、第一目标止盈 20%、止损 3×ATR、盈亏比 3:1、同品种连亏冷却。',
presetKeys: ['altcoin'],
desc: '与当前策略一致。盈利阶段想扩大收益可点「盈利放大」:仓位 1.25 倍、单笔上限 10%、最多 5 仓。',
presetKeys: ['altcoin', 'profit_scale'],
},
{
key: 'backup',

View File

@ -651,7 +651,26 @@ class RiskManager:
# 计算最终的名义价值与保证金
final_notional_value = quantity * current_price
final_margin = final_notional_value / actual_leverage if actual_leverage > 0 else final_notional_value
# 仓位放大系数盈利时适当放大仓位1.0=正常1.2=+20%上限2.0,仍受 MAX_POSITION_PERCENT 约束)
position_scale = config.TRADING_CONFIG.get('POSITION_SCALE_FACTOR', 1.0)
try:
position_scale = float(position_scale or 1.0)
position_scale = max(1.0, min(position_scale, 2.0))
except (TypeError, ValueError):
position_scale = 1.0
if position_scale > 1.0:
quantity = quantity * position_scale
final_notional_value = quantity * current_price
final_margin = final_notional_value / actual_leverage if actual_leverage > 0 else final_notional_value
max_margin_cap = available_balance * config.TRADING_CONFIG.get('MAX_POSITION_PERCENT', 0.08)
if final_margin > max_margin_cap:
final_margin = max_margin_cap
final_notional_value = final_margin * actual_leverage
quantity = final_notional_value / current_price if current_price and current_price > 0 else quantity
logger.info(f" 仓位放大后超过单笔上限,已截断至 MAX_POSITION_PERCENT 对应保证金")
logger.info(f" 仓位放大系数: {position_scale:.2f} -> 最终数量: {quantity:.4f}")
# 添加最小名义价值检查0.2 USDT避免下无意义的小单子
MIN_NOTIONAL_VALUE = 0.2 # 最小名义价值0.2 USDT
if final_notional_value < MIN_NOTIONAL_VALUE: