This commit is contained in:
薇薇安 2026-02-10 08:42:59 +08:00
parent c27bed1efd
commit 1dd8d5893d
2 changed files with 38 additions and 22 deletions

View File

@ -194,24 +194,25 @@ def _get_trading_config():
'MAX_OPEN_POSITIONS': 4, # 同时持仓数量上限(总仓位12% / 单笔1.5% = 最多4个) 'MAX_OPEN_POSITIONS': 4, # 同时持仓数量上限(总仓位12% / 单笔1.5% = 最多4个)
'MAX_DAILY_ENTRIES': 15, # 每日最多15笔(快速验证模式:提高上限以快速验证策略) 'MAX_DAILY_ENTRIES': 15, # 每日最多15笔(快速验证模式:提高上限以快速验证策略)
'MAX_POSITION_PERCENT': 0.015, # 单笔仓位1.5%(山寨币风险高,不加仓) 'MAX_POSITION_PERCENT': 0.20, # 单笔仓位上限20%(作为风控熔断,实际仓位由固定风险模型决定)
'MAX_TOTAL_POSITION_PERCENT': 0.12, # 总仓位12%(保守控制总风险) 'MAX_TOTAL_POSITION_PERCENT': 0.80, # 总仓位80%(避免满仓,留有余地)
'MIN_POSITION_PERCENT': 0.01, # 最小仓位1% 'MIN_POSITION_PERCENT': 0.01, # 最小仓位1%
'MIN_MARGIN_USDT': 5.0, # 最小保证金5美元 'MIN_MARGIN_USDT': 10.0, # 最小保证金10美元(提高门槛,过滤过小交易)
'MIN_CHANGE_PERCENT': 0.5, # 最小价格变动0.5% 'MIN_CHANGE_PERCENT': 0.5, # 最小价格变动0.5%
'TOP_N_SYMBOLS': 20, # 选择信号最强的20个优先处理(2026-02-06优化:扩大候选池以捕获更多机会) 'TOP_N_SYMBOLS': 30, # 扩大候选池到30个,增加机会
'SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT': 15, # 智能补单:多返回15个候选,冷却时仍可尝试后续交易对 'SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT': 20, # 智能补单候选增加
'MAX_SCAN_SYMBOLS': 500, # 扫描前500个(覆盖所有交易对,确保不遗漏高波动币种) 'MAX_SCAN_SYMBOLS': 500, # 扫描前500个
'EXCLUDE_MAJOR_COINS': True, # 排除主流币(BTC、ETH、BNB等),专注于山寨币 'EXCLUDE_MAJOR_COINS': True, # 排除主流币
'STOP_LOSS_PERCENT': 0.10, # 止损10%(保证金百分比) - 2026-02-09优化:配合4倍杠杆,约2.5%价格波动 'STOP_LOSS_PERCENT': 0.05, # 基础止损5%(配合ATR动态止损,作为保底)
'TAKE_PROFIT_PERCENT': 0.60, # 第二目标/单目标止盈60%(保证金百分比) - 追求更高盈亏比 'TAKE_PROFIT_PERCENT': 0.80, # 第二目标止盈80%(追求大趋势收益)
'TAKE_PROFIT_1_PERCENT': 0.30, # 第一目标止盈30%(保证金百分比) - 确保3:1盈亏比 (30% vs 10%) 'TAKE_PROFIT_1_PERCENT': 0.30, # 第一目标止盈30%(确保3:1盈亏比)
'MIN_STOP_LOSS_PRICE_PCT': 0.025, # 最小止损价格变动2.5%(2026-01-29优化:从2%提高到2.5%,给波动更多空间) 'MIN_RR_FOR_TP1': 1.2, # 第一目标止盈的最小盈亏比(相对于止损距离)
'MIN_STOP_LOSS_PRICE_PCT': 0.025, # 最小止损价格变动2.5%
'MIN_TAKE_PROFIT_PRICE_PCT': 0.02, # 最小止盈价格变动2% 'MIN_TAKE_PROFIT_PRICE_PCT': 0.02, # 最小止盈价格变动2%
'USE_ATR_STOP_LOSS': True, # 使用ATR动态止损 'USE_ATR_STOP_LOSS': True, # 使用ATR动态止损
'ATR_STOP_LOSS_MULTIPLIER': 1.5, # ATR止损倍数1.5(标准设置,避免噪音止损) 'ATR_STOP_LOSS_MULTIPLIER': 2.0, # ATR止损倍数2.0(放宽止损,适应山寨币高波动)
'ATR_TAKE_PROFIT_MULTIPLIER': 4.5, # ATR止盈倍数4.5(确保3:1盈亏比) 'ATR_TAKE_PROFIT_MULTIPLIER': 6.0, # ATR止盈倍数6.0(追求更高盈亏比)
'RISK_REWARD_RATIO': 3.0, # 盈亏比3:1(2026-01-27优化:降低,更容易触发,保证胜率) 'RISK_REWARD_RATIO': 3.0, # 盈亏比3:1
'ATR_PERIOD': 14, # ATR计算周期14 'ATR_PERIOD': 14, # ATR计算周期14
'USE_DYNAMIC_ATR_MULTIPLIER': False, # 不使用动态ATR 'USE_DYNAMIC_ATR_MULTIPLIER': False, # 不使用动态ATR
'ATR_MULTIPLIER_MIN': 1.5, # 动态ATR倍数最小值 'ATR_MULTIPLIER_MIN': 1.5, # 动态ATR倍数最小值
@ -261,8 +262,8 @@ def _get_trading_config():
'MAX_LEVERAGE': 12, # 最大杠杆12倍,不要超过 'MAX_LEVERAGE': 12, # 最大杠杆12倍,不要超过
# 移动止损:必须开启!山寨币利润要保护 # 移动止损:必须开启!山寨币利润要保护
'USE_TRAILING_STOP': True, 'USE_TRAILING_STOP': True,
'TRAILING_STOP_ACTIVATION': 0.20, # 盈利20%后激活(给交易更多呼吸空间) 'TRAILING_STOP_ACTIVATION': 0.10, # 盈利10%后激活(更早锁定利润)
'TRAILING_STOP_PROTECT': 0.05, # 保护5%利润 'TRAILING_STOP_PROTECT': 0.02, # 保护2%利润(紧跟趋势)
# 最小持仓时间锁:立即取消!山寨币30分钟可能暴涨暴跌50% # 最小持仓时间锁:立即取消!山寨币30分钟可能暴涨暴跌50%
'MIN_HOLD_TIME_SEC': 0, # 取消持仓时间锁 'MIN_HOLD_TIME_SEC': 0, # 取消持仓时间锁

View File

@ -609,19 +609,34 @@ class PositionManager:
# 兼容百分比形式和比例形式 # 兼容百分比形式和比例形式
if take_profit_1_pct_margin is not None and take_profit_1_pct_margin > 1: if take_profit_1_pct_margin is not None and take_profit_1_pct_margin > 1:
take_profit_1_pct_margin = take_profit_1_pct_margin / 100.0 take_profit_1_pct_margin = take_profit_1_pct_margin / 100.0
# 计算第一目标止盈价(基于保证金,默认15%)
# 计算基于保证金的止盈距离
tp1_distance = 0.0
if margin_usdt and margin_usdt > 0 and quantity > 0: if margin_usdt and margin_usdt > 0 and quantity > 0:
take_profit_1_amount = margin_usdt * take_profit_1_pct_margin take_profit_1_amount = margin_usdt * take_profit_1_pct_margin
tp1_distance = take_profit_1_amount / quantity
# ⚠️ 2026-02-10优化:确保TP1至少有 1.2倍 的盈亏比 (相对于止损距离)
# 避免在高波动(宽止损)情况下,固定保证金比例止盈导致盈亏比过低
if stop_distance_for_tp is not None and stop_distance_for_tp > 0:
min_rr_for_tp1 = config.TRADING_CONFIG.get('MIN_RR_FOR_TP1', 1.2)
min_tp1_distance = stop_distance_for_tp * min_rr_for_tp1
if min_tp1_distance > tp1_distance:
logger.info(f"{symbol} [优化] TP1距离 ({tp1_distance:.4f}) 小于 {min_rr_for_tp1}倍止损距离 ({min_tp1_distance:.4f}),已自动调整以保证盈亏比")
tp1_distance = min_tp1_distance
# 计算最终TP1价格
if tp1_distance > 0:
if side == 'BUY': if side == 'BUY':
take_profit_1 = entry_price + (take_profit_1_amount / quantity) # 第一目标止盈(默认15%) take_profit_1 = entry_price + tp1_distance
else: else:
take_profit_1 = entry_price - (take_profit_1_amount / quantity) # 第一目标止盈(默认15%) take_profit_1 = entry_price - tp1_distance
else: else:
# 如果无法计算保证金,回退到盈亏比1:1 # 如果无法计算(极少情况),回退到盈亏比1:1
if side == 'BUY': if side == 'BUY':
take_profit_1 = entry_price + (entry_price - stop_loss_price) # 盈亏比1:1 take_profit_1 = entry_price + (entry_price - stop_loss_price)
else: else:
take_profit_1 = entry_price - (stop_loss_price - entry_price) # 盈亏比1:1 take_profit_1 = entry_price - (stop_loss_price - entry_price)
take_profit_2 = take_profit_price take_profit_2 = take_profit_price
# 记录到数据库(只有在订单真正成交后才保存) # 记录到数据库(只有在订单真正成交后才保存)