a
This commit is contained in:
parent
098132bda6
commit
39e6a46bd3
|
|
@ -447,12 +447,32 @@
|
||||||
grid-column: span 2;
|
grid-column: span 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.param-item.limit-price.highlight {
|
||||||
|
background-color: #e3f2fd;
|
||||||
|
border: 2px solid #2196F3;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.param-item.limit-price.highlight label {
|
||||||
|
color: #1976d2;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
.limit-price-value {
|
.limit-price-value {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.limit-price-value.highlight-price {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1976d2;
|
||||||
|
}
|
||||||
|
|
||||||
.price-diff {
|
.price-diff {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #666;
|
color: #666;
|
||||||
|
|
|
||||||
|
|
@ -377,14 +377,14 @@ function Recommendations() {
|
||||||
<div className="suggested-params">
|
<div className="suggested-params">
|
||||||
<div className="param-item order-type">
|
<div className="param-item order-type">
|
||||||
<label>订单类型:</label>
|
<label>订单类型:</label>
|
||||||
<span className={`order-type-badge ${(rec.order_type || 'LIMIT').toLowerCase()}`}>
|
<span className="order-type-badge limit">
|
||||||
{rec.order_type === 'LIMIT' ? '限价单' : '市价单'}
|
限价单
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{rec.order_type === 'LIMIT' && rec.suggested_limit_price && (
|
{rec.suggested_limit_price && (
|
||||||
<div className="param-item limit-price">
|
<div className="param-item limit-price highlight">
|
||||||
<label>建议挂单价:</label>
|
<label>建议挂单价:</label>
|
||||||
<span className="limit-price-value">
|
<span className="limit-price-value highlight-price">
|
||||||
{parseFloat(rec.suggested_limit_price || 0).toFixed(4)} USDT
|
{parseFloat(rec.suggested_limit_price || 0).toFixed(4)} USDT
|
||||||
{rec.current_price && (
|
{rec.current_price && (
|
||||||
<span className="price-diff">
|
<span className="price-diff">
|
||||||
|
|
|
||||||
|
|
@ -466,7 +466,7 @@ class TradeRecommender:
|
||||||
# 生成用户指南(人话版计划)
|
# 生成用户指南(人话版计划)
|
||||||
user_guide = self._generate_user_guide(
|
user_guide = self._generate_user_guide(
|
||||||
symbol, direction, suggested_limit_price, stop_loss_price, take_profit_1, take_profit_2,
|
symbol, direction, suggested_limit_price, stop_loss_price, take_profit_1, take_profit_2,
|
||||||
simple_reason, expected_hold_time, risk_warning, recommendation_category
|
simple_reason, expected_hold_time, risk_warning, recommendation_category, current_price
|
||||||
)
|
)
|
||||||
|
|
||||||
# 基础推荐数据
|
# 基础推荐数据
|
||||||
|
|
@ -512,27 +512,20 @@ class TradeRecommender:
|
||||||
'max_hold_days': 3 # 最大持仓天数(超过此天数建议平仓)
|
'max_hold_days': 3 # 最大持仓天数(超过此天数建议平仓)
|
||||||
}
|
}
|
||||||
|
|
||||||
# 限价单推荐
|
# 限价单推荐(唯一推荐类型)
|
||||||
limit_recommendation = base_data.copy()
|
limit_recommendation = base_data.copy()
|
||||||
limit_recommendation.update({
|
limit_recommendation.update({
|
||||||
'order_type': 'LIMIT',
|
'order_type': 'LIMIT',
|
||||||
'suggested_limit_price': suggested_limit_price
|
'suggested_limit_price': suggested_limit_price
|
||||||
})
|
})
|
||||||
|
|
||||||
# 市价单推荐
|
|
||||||
market_recommendation = base_data.copy()
|
|
||||||
market_recommendation.update({
|
|
||||||
'order_type': 'MARKET',
|
|
||||||
'suggested_limit_price': None
|
|
||||||
})
|
|
||||||
|
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"✓ 生成推荐: {symbol} {direction} "
|
f"✓ 生成推荐: {symbol} {direction} "
|
||||||
f"(信号强度: {signal_strength}/10, 胜率预估: {estimated_win_rate:.1f}%, "
|
f"(信号强度: {signal_strength}/10, 胜率预估: {estimated_win_rate:.1f}%, "
|
||||||
f"分类: {recommendation_category}, 风险: {risk_level})"
|
f"分类: {recommendation_category}, 风险: {risk_level})"
|
||||||
)
|
)
|
||||||
|
|
||||||
return [limit_recommendation, market_recommendation]
|
return [limit_recommendation]
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"创建推荐失败 {symbol_info.get('symbol', 'unknown')}: {e}", exc_info=True)
|
logger.error(f"创建推荐失败 {symbol_info.get('symbol', 'unknown')}: {e}", exc_info=True)
|
||||||
|
|
@ -641,7 +634,8 @@ class TradeRecommender:
|
||||||
simple_reason: str,
|
simple_reason: str,
|
||||||
expected_hold_time: str,
|
expected_hold_time: str,
|
||||||
risk_warning: str,
|
risk_warning: str,
|
||||||
category: str
|
category: str,
|
||||||
|
current_price: float
|
||||||
) -> str:
|
) -> str:
|
||||||
"""
|
"""
|
||||||
生成用户指南(人话版计划)
|
生成用户指南(人话版计划)
|
||||||
|
|
@ -657,27 +651,52 @@ class TradeRecommender:
|
||||||
expected_hold_time: 预期持仓时间
|
expected_hold_time: 预期持仓时间
|
||||||
risk_warning: 风险警告
|
risk_warning: 风险警告
|
||||||
category: 推荐分类
|
category: 推荐分类
|
||||||
|
current_price: 当前价格(用于计算反向波动)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
用户指南文本
|
用户指南文本
|
||||||
"""
|
"""
|
||||||
direction_cn = "买入" if direction == 'BUY' else "卖出"
|
direction_cn = "买入" if direction == 'BUY' else "卖出"
|
||||||
|
direction_action = "挂单买入" if direction == 'BUY' else "挂单卖出"
|
||||||
|
|
||||||
|
# 计算反向波动阈值(2%)
|
||||||
|
if direction == 'BUY':
|
||||||
|
# 买单:如果价格下跌超过2%,建议取消
|
||||||
|
reverse_threshold = current_price * 0.98
|
||||||
|
reverse_direction = "下跌"
|
||||||
|
else:
|
||||||
|
# 卖单:如果价格上涨超过2%,建议取消
|
||||||
|
reverse_threshold = current_price * 1.02
|
||||||
|
reverse_direction = "上涨"
|
||||||
|
|
||||||
user_guide = f"""【操作计划】{direction_cn} {symbol}
|
user_guide = f"""【操作计划】{direction_cn} {symbol}
|
||||||
【推荐类型】{category}
|
【推荐类型】{category}
|
||||||
【核心理由】{simple_reason}
|
【核心理由】{simple_reason}
|
||||||
|
|
||||||
|
【明确的入场价】
|
||||||
|
建议在 {limit_price:.4f} USDT 附近{direction_action}
|
||||||
|
|
||||||
【具体点位】
|
【具体点位】
|
||||||
• 入场价(限价单): {limit_price:.4f} USDT
|
• 建议挂单价: {limit_price:.4f} USDT
|
||||||
• 止损价: {stop_loss:.4f} USDT
|
• 止损价: {stop_loss:.4f} USDT
|
||||||
• 第一目标: {tp1:.4f} USDT(盈亏比1:1)
|
• 第一目标: {tp1:.4f} USDT(盈亏比1:1)
|
||||||
• 第二目标: {tp2:.4f} USDT(盈亏比2.5:1)
|
• 第二目标: {tp2:.4f} USDT(盈亏比2.5:1)
|
||||||
|
|
||||||
【持仓周期】{expected_hold_time}
|
【持仓周期】{expected_hold_time}
|
||||||
|
|
||||||
【退出条件】
|
【退出条件】
|
||||||
• 触及止损:立即平仓
|
• 触及止损:立即平仓
|
||||||
• 触及第一目标:可部分止盈或全部止盈
|
• 触及第一目标:可部分止盈或全部止盈
|
||||||
• 触及第二目标:建议全部止盈
|
• 触及第二目标:建议全部止盈
|
||||||
• 持仓超过3天未触及第一目标:建议平仓离场重新评估
|
• 持仓超过3天未触及第一目标:建议平仓离场重新评估
|
||||||
【关键提醒】{risk_warning}"""
|
|
||||||
|
【订单失效条件】
|
||||||
|
此限价单建议当日有效。若价格未触及挂单价,但价格直接{reverse_direction}超过2%({reverse_threshold:.4f} USDT),则建议取消订单,等待新信号。
|
||||||
|
|
||||||
|
【关键提醒】{risk_warning}
|
||||||
|
|
||||||
|
【给主动交易者的提示】
|
||||||
|
如果您确信趋势已启动,也可考虑以市价单立即入场,但需承受更高滑点成本,且务必设置好止损。"""
|
||||||
|
|
||||||
return user_guide
|
return user_guide
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user