This commit is contained in:
aaron 2025-12-09 22:10:44 +08:00
parent 5210b4185b
commit ce035fdcbb
2 changed files with 31 additions and 21 deletions

View File

@ -31,7 +31,12 @@ class Settings(BaseSettings):
# Monitoring # Monitoring
LOG_LEVEL: str = "INFO" LOG_LEVEL: str = "INFO"
# Profit filter # Profit filter - 不同周期的最低盈利要求
MIN_PROFIT_PCT_SHORT: float = 1.0 # 短周期 (5m/15m/1h) 最低 1%
MIN_PROFIT_PCT_MEDIUM: float = 2.0 # 中周期 (4h/1d) 最低 2%
MIN_PROFIT_PCT_LONG: float = 5.0 # 长周期 (1d/1w) 最低 5%
# 向后兼容
MIN_PROFIT_PCT: float = 1.0 MIN_PROFIT_PCT: float = 1.0
PREFER_INTRADAY: bool = True PREFER_INTRADAY: bool = True

View File

@ -228,7 +228,7 @@ ${current_price:,.2f}
**重要原则**: **重要原则**:
1. **优先日内短线** - 重点关注 short_term_5m_15m_1h 的日内交易机会 1. **优先日内短线** - 重点关注 short_term_5m_15m_1h 的日内交易机会
2. **盈利空间1%** - 只有预期盈利 1% 时才给出操作建议exists=false 2. **不同周期盈利要求不同** - 短期1%中期2%长期5%不满足exists=false
3. **自行识别支撑压力位** - 从K线数据中找出重要的高低点作为支撑压力位 3. **自行识别支撑压力位** - 从K线数据中找出重要的高低点作为支撑压力位
4. **响应必须是有效的JSON格式** - 不要包含注释 4. **响应必须是有效的JSON格式** - 不要包含注释
@ -316,13 +316,16 @@ ${current_price:,.2f}
- 历史重要价格区间 - 历史重要价格区间
- 大周期趋势线 - 大周期趋势线
## 止盈止损设置 ## 止盈止损设置(不同周期要求不同)
- 短期: 止损 0.3%-0.5%, 止盈 1% - 短期 (5m/15m/1h): 止损 0.3%-0.5%, 止盈 1%
- 中期: 止损 1%-2%, 止盈 2% - 中期 (4h/1d): 止损 1%-2%, 止盈 2%
- 长期: 止损 2%-4%, 止盈 4% - 长期 (1d/1w): 止损 2%-4%, 止盈 5%
只有当 (take_profit - entry) / entry 1% 时才给出具体建议! 重要各周期的盈利空间必须满足最低要求才给出建议
- 短期机会: (take_profit - entry) / entry 1%
- 中期机会: (take_profit - entry) / entry 2%
- 长期机会: (take_profit - entry) / entry 5%
""" """
return prompt return prompt
@ -444,41 +447,43 @@ ${current_price:,.2f}
medium_term = swing medium_term = swing
long_term = {} long_term = {}
# Apply minimum profit filter to all opportunities # Apply minimum profit filter to all opportunities - 不同周期不同要求
MIN_PROFIT_PCT = settings.MIN_PROFIT_PCT MIN_PROFIT_SHORT = settings.MIN_PROFIT_PCT_SHORT # 短周期 1%
MIN_PROFIT_MEDIUM = settings.MIN_PROFIT_PCT_MEDIUM # 中周期 2%
MIN_PROFIT_LONG = settings.MIN_PROFIT_PCT_LONG # 长周期 5%
# Filter short_term # Filter short_term (最低 1%)
short_term_valid = meets_profit_threshold(short_term, MIN_PROFIT_PCT) short_term_valid = meets_profit_threshold(short_term, MIN_PROFIT_SHORT)
if short_term.get('exists') and not short_term_valid: if short_term.get('exists') and not short_term_valid:
profit_pct = calc_profit_pct( profit_pct = calc_profit_pct(
safe_float(short_term.get('entry_price'), 0), safe_float(short_term.get('entry_price'), 0),
safe_float(short_term.get('take_profit'), 0), safe_float(short_term.get('take_profit'), 0),
short_term.get('direction') short_term.get('direction')
) )
logger.info(f"短期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_PCT}%") logger.info(f"短期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_SHORT}%")
short_term = {'exists': False, 'reasoning': f'盈利空间不足1% (仅{profit_pct:.2f}%),建议观望'} short_term = {'exists': False, 'reasoning': f'盈利空间不足{MIN_PROFIT_SHORT}% (仅{profit_pct:.2f}%),建议观望'}
# Filter medium_term # Filter medium_term (最低 2%)
medium_term_valid = meets_profit_threshold(medium_term, MIN_PROFIT_PCT) medium_term_valid = meets_profit_threshold(medium_term, MIN_PROFIT_MEDIUM)
if medium_term.get('exists') and not medium_term_valid: if medium_term.get('exists') and not medium_term_valid:
profit_pct = calc_profit_pct( profit_pct = calc_profit_pct(
safe_float(medium_term.get('entry_price'), 0), safe_float(medium_term.get('entry_price'), 0),
safe_float(medium_term.get('take_profit'), 0), safe_float(medium_term.get('take_profit'), 0),
medium_term.get('direction') medium_term.get('direction')
) )
logger.info(f"中期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_PCT}%") logger.info(f"中期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_MEDIUM}%")
medium_term = {'exists': False, 'reasoning': f'盈利空间不足1% (仅{profit_pct:.2f}%),建议观望'} medium_term = {'exists': False, 'reasoning': f'盈利空间不足{MIN_PROFIT_MEDIUM}% (仅{profit_pct:.2f}%),建议观望'}
# Filter long_term # Filter long_term (最低 5%)
long_term_valid = meets_profit_threshold(long_term, MIN_PROFIT_PCT) long_term_valid = meets_profit_threshold(long_term, MIN_PROFIT_LONG)
if long_term.get('exists') and not long_term_valid: if long_term.get('exists') and not long_term_valid:
profit_pct = calc_profit_pct( profit_pct = calc_profit_pct(
safe_float(long_term.get('entry_price'), 0), safe_float(long_term.get('entry_price'), 0),
safe_float(long_term.get('take_profit'), 0), safe_float(long_term.get('take_profit'), 0),
long_term.get('direction') long_term.get('direction')
) )
logger.info(f"长期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_PCT}%") logger.info(f"长期机会被过滤: 盈利空间 {profit_pct:.2f}% < {MIN_PROFIT_LONG}%")
long_term = {'exists': False, 'reasoning': f'盈利空间不足1% (仅{profit_pct:.2f}%),建议观望'} long_term = {'exists': False, 'reasoning': f'盈利空间不足{MIN_PROFIT_LONG}% (仅{profit_pct:.2f}%),建议观望'}
# Determine primary levels (priority: short > medium > long) - 优先日内短线 # Determine primary levels (priority: short > medium > long) - 优先日内短线
entry = market_context.get('current_price', 0) entry = market_context.get('current_price', 0)