修复sync_from_trade_object不再推导网格状态 - 由真实加仓操作维护
This commit is contained in:
parent
35e9786752
commit
f9f6490526
@ -418,8 +418,8 @@ class GridManager:
|
|||||||
"""
|
"""
|
||||||
从 Freqtrade 的 Trade 对象同步状态
|
从 Freqtrade 的 Trade 对象同步状态
|
||||||
|
|
||||||
仅在第一次同步时更新网格状态。其他时候仅更新持仓股数,
|
只同步持仓数量、成本、平均价等数值信息
|
||||||
不修改 FILLED/EMPTY 网格状态(由 apply_adjustment 专管管理)。
|
网格 FILLED/EMPTY 状态由 apply_adjustment() 和 position_history 维护
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
trade: Freqtrade Trade 对象
|
trade: Freqtrade Trade 对象
|
||||||
@ -430,53 +430,13 @@ class GridManager:
|
|||||||
self.total_invested = trade.stake_amount
|
self.total_invested = trade.stake_amount
|
||||||
self.avg_entry_price = trade.open_rate
|
self.avg_entry_price = trade.open_rate
|
||||||
|
|
||||||
# 仅在第一次同步且没有任何 FILLED 网格时,根据均价更新所有网格的状态
|
# ✅ 只同步数值信息,不推导网格状态
|
||||||
# 注意:使用 _grid_initialized_from_trade 而不是 _synced_from_trade_once
|
# 网格状态由真实的加仓操作(apply_adjustment)维护
|
||||||
# 因为后者可能被重置但我们不希望此时重新初始化网格
|
# 不再根据平均价假设所有低于平均价的网格都被加仓了
|
||||||
filled_count = sum(1 for gs in self.grid_states.values() if gs.status == "filled")
|
|
||||||
|
|
||||||
# ✅ 只有在没有任何 FILLED 网格时才从 Trade 初始化
|
print(f"[GridManager] {self.pair} 从 Trade 同步 - 持仓: {self.total_quantity:.6f}, "
|
||||||
if not self._grid_initialized_from_trade and self.total_quantity > 0 and filled_count == 0:
|
f"平均价: {self.avg_entry_price:.2f}, 成本: {self.total_invested:.2f}",
|
||||||
self._grid_initialized_from_trade = True
|
file=sys.stderr, flush=True)
|
||||||
|
|
||||||
# 根据 Trade 对象的平均价,更新所有网格的状态
|
|
||||||
# 下沿 → 平均价:全部 FILLED
|
|
||||||
# 平均价 → 上沿:全部 EMPTY
|
|
||||||
avg_grid_price = self._round_to_grid(self.avg_entry_price)
|
|
||||||
|
|
||||||
print(f"[GridManager] {self.pair} 从 Trade 初始化 - 平均价: {self.avg_entry_price:.2f}, "
|
|
||||||
f"舍入后网格价: {avg_grid_price:.2f}",
|
|
||||||
file=sys.stderr, flush=True)
|
|
||||||
|
|
||||||
for price, grid_state in self.grid_states.items():
|
|
||||||
if price < avg_grid_price:
|
|
||||||
# 下沿:应该是 FILLED
|
|
||||||
if self.total_quantity > 0:
|
|
||||||
grid_state.status = "filled"
|
|
||||||
grid_state.entry_price = self.avg_entry_price
|
|
||||||
grid_state.entry_time = candle_index
|
|
||||||
elif price > avg_grid_price:
|
|
||||||
# 上沿:应该是 EMPTY
|
|
||||||
grid_state.status = "empty"
|
|
||||||
grid_state.quantity = 0
|
|
||||||
else:
|
|
||||||
# 平均价所在的网格
|
|
||||||
if self.total_quantity > 0:
|
|
||||||
grid_state.status = "filled"
|
|
||||||
grid_state.entry_price = self.avg_entry_price
|
|
||||||
grid_state.entry_time = candle_index
|
|
||||||
|
|
||||||
filled_count = sum(1 for gs in self.grid_states.values() if gs.status == "filled")
|
|
||||||
print(f"[GridManager] {self.pair} 从 Trade 对象初始化 - "
|
|
||||||
f"持仓: {self.total_quantity:.6f}, "
|
|
||||||
f"平均价: {self.avg_entry_price:.2f}, "
|
|
||||||
f"下沿到平均价的网格标记为 FILLED (共 {filled_count} 个)",
|
|
||||||
file=sys.stderr, flush=True)
|
|
||||||
else:
|
|
||||||
# 之后的同步:仅更新持仓信息,不修改网格状态
|
|
||||||
if not self._synced_from_trade_once and self.total_quantity == 0:
|
|
||||||
print(f"[GridManager] {self.pair} Trade 对象尚无持仓,跳过初始化",
|
|
||||||
file=sys.stderr, flush=True)
|
|
||||||
|
|
||||||
def record_pending_order(self, order_id: str, adjustment: PositionRecord) -> None:
|
def record_pending_order(self, order_id: str, adjustment: PositionRecord) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user