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