This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-27 15:21:12 +08:00
parent a87dae45cc
commit 1b4a86198d

View File

@ -123,6 +123,7 @@ class StaticGrid(IStrategy):
dataframe['enter_tag'] = ''
if len(dataframe) == 0:
print(f"[StaticGrid] {metadata['pair']} dataframe 为空,跳过", file=sys.stderr, flush=True)
return dataframe
pair = metadata['pair']
@ -132,20 +133,36 @@ class StaticGrid(IStrategy):
grid_manager = self.grid_managers[pair]
current_price = dataframe['close'].iloc[-1]
print(f"[StaticGrid] {pair} populate_entry_trend 执行 - 价格: {current_price:.2f}",
file=sys.stderr, flush=True)
# 询问网格管理器是否应该加仓
adjustment = grid_manager.decide_adjustment()
print(f"[StaticGrid] {pair} decide_adjustment 返回: {adjustment}",
file=sys.stderr, flush=True)
if adjustment:
if adjustment.type == AdjustmentType.ENTRY:
# 初始建仓
dataframe.loc[dataframe.index[-1], 'enter_long'] = True
dataframe.loc[dataframe.index[-1], 'enter_tag'] = f"grid_entry_{current_price:.0f}"
print(f"[StaticGrid] {pair} 初始建仓信号 @ {current_price:.2f}", file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 初始建仓信号 @ {current_price:.2f} (ENTRY 设置为 True)",
file=sys.stderr, flush=True)
elif adjustment.type == AdjustmentType.ADD:
# 加仓
dataframe.loc[dataframe.index[-1], 'enter_long'] = True
dataframe.loc[dataframe.index[-1], 'enter_tag'] = f"grid_add_{current_price:.0f}"
print(f"[StaticGrid] {pair} 加仓信号 @ {current_price:.2f}", file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 加仓信号 @ {current_price:.2f} (ADD 设置为 True)",
file=sys.stderr, flush=True)
else:
print(f"[StaticGrid] {pair} 无操作建议", file=sys.stderr, flush=True)
# 打印最终的 enter_long 状态
enter_long_value = dataframe.loc[dataframe.index[-1], 'enter_long']
enter_tag_value = dataframe.loc[dataframe.index[-1], 'enter_tag']
print(f"[StaticGrid] {pair} 最终状态 - enter_long: {enter_long_value}, enter_tag: {enter_tag_value}",
file=sys.stderr, flush=True)
return dataframe
@ -156,21 +173,37 @@ class StaticGrid(IStrategy):
dataframe['exit_long'] = False
if len(dataframe) == 0:
print(f"[StaticGrid] {metadata['pair']} dataframe 为空,跳过出场逻辑",
file=sys.stderr, flush=True)
return dataframe
pair = metadata['pair']
if pair not in self.grid_managers:
print(f"[StaticGrid] {pair} GridManager 不存在,跳过出场逻辑",
file=sys.stderr, flush=True)
return dataframe
grid_manager = self.grid_managers[pair]
print(f"[StaticGrid] {pair} populate_exit_trend 执行",
file=sys.stderr, flush=True)
# 询问网格管理器是否应该平仓
adjustment = grid_manager.decide_adjustment()
print(f"[StaticGrid] {pair} exit 决策结果: {adjustment}",
file=sys.stderr, flush=True)
if adjustment and adjustment.type == AdjustmentType.EXIT:
# 平仓
dataframe.loc[dataframe.index[-1], 'exit_long'] = True
print(f"[StaticGrid] {pair} 平仓信号 @ {grid_manager.current_price:.2f}", file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 平仓信号 @ {grid_manager.current_price:.2f} (EXIT 设置为 True)",
file=sys.stderr, flush=True)
# 打印最终的 exit_long 状态
exit_long_value = dataframe.loc[dataframe.index[-1], 'exit_long']
print(f"[StaticGrid] {pair} 最终 exit_long: {exit_long_value}",
file=sys.stderr, flush=True)
return dataframe
@ -181,26 +214,47 @@ class StaticGrid(IStrategy):
加仓逻辑根据 GridManager 的决策进行加仓
"""
pair = trade.pair
print(f"[StaticGrid] {pair} adjust_trade_position 执行 - 当前价: {current_rate:.2f}, 利润: {current_profit:.4f}",
file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} Trade 信息 - 持仓: {trade.amount:.6f}, 平均价: {trade.open_rate:.2f}, stake: {trade.stake_amount:.2f}",
file=sys.stderr, flush=True)
if pair not in self.grid_managers:
return None
print(f"[StaticGrid] {pair} GridManager 不存在,创建新的",
file=sys.stderr, flush=True)
self._init_grid_manager(pair)
grid_manager = self.grid_managers[pair]
# 同步 Trade 对象的信息到 GridManager用于加仓决策
grid_manager.sync_from_trade_object(trade, self.dp.current_candle().get('candle_index', 0))
# 询问网格管理器是否应该加仓
adjustment = grid_manager.decide_adjustment()
print(f"[StaticGrid] {pair} decide_adjustment 返回: {adjustment}",
file=sys.stderr, flush=True)
if adjustment and adjustment.type == AdjustmentType.ADD:
# 计算加仓金额
stake_amount = adjustment.quantity * self.STAKE
print(f"[StaticGrid] {pair} 加仓决策 - 数量: {adjustment.quantity}, 金额: {stake_amount} USDT",
file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 可用金额范围 - min: {min_stake:.2f}, max: {max_stake:.2f}",
file=sys.stderr, flush=True)
# 检查是否超过最大可用金额
if stake_amount <= max_stake:
print(f"[StaticGrid] {pair} ✅ 加仓批准 - 返回金额: {stake_amount:.2f}",
file=sys.stderr, flush=True)
return stake_amount
else:
print(f"[StaticGrid] {pair} 加仓金额超过最大值,跳过",
print(f"[StaticGrid] {pair} 加仓金额超过最大值 ({stake_amount:.2f} > {max_stake:.2f}),跳过",
file=sys.stderr, flush=True)
return None
else:
print(f"[StaticGrid] {pair} 无加仓建议,返回 None",
file=sys.stderr, flush=True)
return None