改进初始建仓逻辑:每个网格投入金额一致(40/25=1.6 USDT),并添加强制平仓机制
This commit is contained in:
parent
5a927de07c
commit
ec58de1559
@ -28,7 +28,8 @@ class StaticGrid(IStrategy):
|
||||
"SOL/USDT": {"percent": 0.33}, # 上下 33%
|
||||
"TRX/USDT": {"percent": 0.33}, # 上下 33%
|
||||
}
|
||||
STAKE = 40.0 # 每个网格的投资额
|
||||
STAKE = 40.0 # 每个持仓周期的总投资额(会分散到25个网格)
|
||||
GRIDS_PER_CYCLE = 25 # 每个持仓周期的网格数
|
||||
|
||||
def __init__(self, config: dict) -> None:
|
||||
super().__init__(config)
|
||||
@ -183,12 +184,15 @@ class StaticGrid(IStrategy):
|
||||
file=sys.stderr, flush=True)
|
||||
|
||||
# 创建新的 GridManager
|
||||
# ✅ stake_per_grid = 总投资额 / 网格数,保证每个网格投入一致
|
||||
stake_per_grid = self.STAKE / self.GRIDS_PER_CYCLE
|
||||
|
||||
grid_manager = GridManager(
|
||||
pair=pair,
|
||||
lower_price=lower_price,
|
||||
upper_price=upper_price,
|
||||
step=step,
|
||||
stake_per_grid=self.STAKE
|
||||
stake_per_grid=stake_per_grid
|
||||
)
|
||||
|
||||
# 如果 Redis 中有持仓数据,进行恢复
|
||||
@ -386,4 +390,38 @@ class StaticGrid(IStrategy):
|
||||
print(f"[StaticGrid] {pair} 无加仓建议,返回 None",
|
||||
file=sys.stderr, flush=True)
|
||||
|
||||
# ✅ 检查自监测:如果已完结,返回负数来强制平仓所有持仓
|
||||
if grid_manager.is_completed and trade.amount > 0:
|
||||
print(f"[StaticGrid] {pair} GridManager 已完结,强制平仓 - 理由: {grid_manager.completion_reason}",
|
||||
file=sys.stderr, flush=True)
|
||||
# 返回负数来平仓所有持仓
|
||||
return -trade.amount
|
||||
|
||||
return None
|
||||
|
||||
def custom_stake_amount(self, pair: str, current_rate: float, proposed_stake: float,
|
||||
min_stake: float, max_stake: float, trade_number: int,
|
||||
time_in_market: int, **kwargs) -> float:
|
||||
"""
|
||||
自定义初始建仓金额,使每个网格投入金额一致
|
||||
|
||||
对于网格交易,初次建仓也应该只投入一个网格的金额,保持一致性
|
||||
"""
|
||||
if pair not in self.grid_managers:
|
||||
# 如果还没有 GridManager,创建一个
|
||||
self._init_grid_manager(pair)
|
||||
|
||||
grid_manager = self.grid_managers[pair]
|
||||
|
||||
# 每个网格的投入金额
|
||||
grid_stake = grid_manager.stake_per_grid
|
||||
|
||||
print(f"[StaticGrid] {pair} custom_stake_amount - proposed: {proposed_stake:.2f}, "
|
||||
f"grid_stake: {grid_stake:.2f}, min: {min_stake:.2f}, max: {max_stake:.2f}",
|
||||
file=sys.stderr, flush=True)
|
||||
|
||||
# 返回每个网格的投入金额(确保在 min_stake 和 max_stake 之间)
|
||||
actual_stake = max(min_stake, min(grid_stake, max_stake))
|
||||
print(f"[StaticGrid] {pair} custom_stake_amount 返回: {actual_stake:.2f}",
|
||||
file=sys.stderr, flush=True)
|
||||
return actual_stake
|
||||
Loading…
x
Reference in New Issue
Block a user