动态步长

This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-27 16:23:44 +08:00
parent 271a98a772
commit 6efcf3ea9d

View File

@ -23,9 +23,10 @@ class StaticGrid(IStrategy):
# BTC/USDT: 上下 20% # BTC/USDT: 上下 20%
# ETH/USDT, SOL/USDT: 上下 33% # ETH/USDT, SOL/USDT: 上下 33%
GRID_CONFIG = { GRID_CONFIG = {
"BTC/USDT": {"percent": 0.20, "step": 500}, # 上下 20%,步长 500 "BTC/USDT": {"percent": 0.20}, # 上下 20%
"ETH/USDT": {"percent": 0.33, "step": 100}, # 上下 33%,步长 100 "ETH/USDT": {"percent": 0.33}, # 上下 33%
"SOL/USDT": {"percent": 0.33, "step": 5}, # 上下 33%,步长 5 "SOL/USDT": {"percent": 0.33}, # 上下 33%
"TRX/USDT": {"percent": 0.33}, # 上下 33%
} }
STAKE = 40.0 # 每个网格的投资额 STAKE = 40.0 # 每个网格的投资额
@ -55,13 +56,16 @@ class StaticGrid(IStrategy):
# 动态更新网格范围(如果初始化时用的是占位符价格) # 动态更新网格范围(如果初始化时用的是占位符价格)
if grid_manager.lower_price <= 1000 and grid_manager.upper_price <= 5000: if grid_manager.lower_price <= 1000 and grid_manager.upper_price <= 5000:
# 说明用的是默认占位符,需要更新为实际价格 # 说明用的是默认占位符,需要更新为实际价格
config = self.GRID_CONFIG.get(pair, {"percent": 0.20, "step": 100}) config = self.GRID_CONFIG.get(pair, {"percent": 0.20})
percent = config.get("percent", 0.20) percent = config.get("percent", 0.20)
step = config.get("step", 100)
new_lower = current_price * (1 - percent) new_lower = current_price * (1 - percent)
new_upper = current_price * (1 + percent) new_upper = current_price * (1 + percent)
# 动态计算步长:范围 / 50
range_size = new_upper - new_lower
step = range_size / 50
# 更新 GridManager 的范围 # 更新 GridManager 的范围
grid_manager.lower_price = new_lower grid_manager.lower_price = new_lower
grid_manager.upper_price = new_upper grid_manager.upper_price = new_upper
@ -69,10 +73,11 @@ class StaticGrid(IStrategy):
# 重新计算总网格数 # 重新计算总网格数
grid_manager.total_grid_levels = int((new_upper - new_lower) / step) + 1 grid_manager.total_grid_levels = int((new_upper - new_lower) / step) + 1
grid_manager.grid_prices = [new_lower + i * step for i in range(grid_manager.total_grid_levels)] grid_manager.grid_prices = [new_lower + i * step for i in range(grid_manager.total_grid_levels)]
grid_manager.step = step # 更新步长
print(f"[StaticGrid] {pair} 更新网格范围 - 从 1000-5000 更新为 {new_lower:.2f}-{new_upper:.2f}", print(f"[StaticGrid] {pair} 更新网格范围 - 从 1000-5000 更新为 {new_lower:.2f}-{new_upper:.2f}",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 新网格数: {grid_manager.total_grid_levels}", print(f"[StaticGrid] {pair} 新网格数: {grid_manager.total_grid_levels}, 步长: {step:.4f}",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
# 更新网格管理器状态 # 更新网格管理器状态
@ -86,11 +91,10 @@ class StaticGrid(IStrategy):
def _init_grid_manager(self, pair: str) -> None: def _init_grid_manager(self, pair: str) -> None:
"""初始化或恢复网格管理器""" """初始化或恢复网格管理器"""
# 获取币对配置(如果不存在则使用默认值) # 获取币对配置(如果不存在则使用默认值)
config = self.GRID_CONFIG.get(pair, {"percent": 0.20, "step": 100}) config = self.GRID_CONFIG.get(pair, {"percent": 0.20})
percent = config.get("percent", 0.20) percent = config.get("percent", 0.20)
step = config.get("step", 100)
print(f"[StaticGrid] {pair} 网格配置 - 百分比: {percent*100:.0f}%, 步长: {step}", print(f"[StaticGrid] {pair} 网格配置 - 百分比: {percent*100:.0f}%",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
# 尝试从 Redis 恢复 # 尝试从 Redis 恢复
@ -123,7 +127,11 @@ class StaticGrid(IStrategy):
print(f"[StaticGrid] {pair} 使用默认上下沿: {lower_price}-{upper_price}", print(f"[StaticGrid] {pair} 使用默认上下沿: {lower_price}-{upper_price}",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
print(f"[StaticGrid] {pair} 动态网格范围 - 下沿: {lower_price:.2f}, 上沿: {upper_price:.2f}", # 动态计算步长:范围 / 50
range_size = upper_price - lower_price
step = range_size / 50
print(f"[StaticGrid] {pair} 动态网格范围 - 下沿: {lower_price:.2f}, 上沿: {upper_price:.2f}, 步长: {step:.4f}",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
# 创建新的 GridManager # 创建新的 GridManager
@ -149,7 +157,7 @@ class StaticGrid(IStrategy):
# 保存网格配置,用于价格更新时重新计算 # 保存网格配置,用于价格更新时重新计算
self.grid_managers[pair] = grid_manager self.grid_managers[pair] = grid_manager
self._pair_configs = getattr(self, '_pair_configs', {}) self._pair_configs = getattr(self, '_pair_configs', {})
self._pair_configs[pair] = {'percent': percent, 'step': step} self._pair_configs[pair] = {'percent': percent}
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
""" """