优化交易代码

This commit is contained in:
ddrwode
2026-02-02 11:09:02 +08:00
parent 8cfaf1d5e9
commit 0b8e7a59a2
2 changed files with 25 additions and 5 deletions

View File

@@ -26,8 +26,9 @@ LEVERAGE = "100"
OPEN_TYPE = "cross" # 全仓
RISK_PERCENT = 0.01 # 每次开仓占用可用余额的比例
# 反手信号价格容差(美元)
REVERSE_PRICE_TOLERANCE = 2.0
# 反手信号价格容差(美元)K线触及触发价后收盘价需在触发价±容差内才执行
# 避免“先涨后跌/先跌后涨”追单,适当增大可减少漏单
REVERSE_PRICE_TOLERANCE = 5.0
# 反手信号检测窗口3分钟K线的「前1分30秒」内出现反手信号则平仓反手
# 使用前2根1分钟K线近似覆盖 0:00~2:00包含 0:00~1:30

View File

@@ -235,7 +235,9 @@ class OpenBasedFifthStrategy:
def check_realtime_trigger(self, kline_data, current_position=0):
"""
实时检测信号基于当前K线开盘价计算触发价
实时检测信号
- 无仓位基于当前K线开盘价计算触发价
- 有仓位反手基于开仓价计算触发价1111开仓价±前一根实体/5
返回:(方向, 触发价, 有效前一根, 当前K线) 或 (None,...)
"""
if len(kline_data) < 2:
@@ -250,7 +252,20 @@ class OpenBasedFifthStrategy:
if prev is None:
return None, None, None, None
long_trigger, short_trigger = self.get_open_based_levels(prev, curr_open)
prev_body = self.get_body_size(prev)
reverse_offset = prev_body / 5
# 有仓位时反手用开仓价1111无仓位用当前K线开盘价
if current_position != 0:
entry = self.entry_price or (float(self.open_avg_price) if self.open_avg_price else None)
if entry is not None:
long_trigger = entry + reverse_offset
short_trigger = entry - reverse_offset
else:
long_trigger, short_trigger = self.get_open_based_levels(prev, curr_open)
else:
long_trigger, short_trigger = self.get_open_based_levels(prev, curr_open)
if long_trigger is None:
return None, None, None, None
@@ -558,8 +573,12 @@ class OpenBasedFifthStrategy:
curr = kline_data[-1]
if not self.get_position_status():
logger.warning("获取仓位失败,使用缓存")
# 有仓位但 entry_price 未设置时(如程序重启),用开仓均价补全
if self.start != 0 and self.entry_price is None and self.open_avg_price:
self.entry_price = float(self.open_avg_price)
logger.info(f"从API恢复 entry_price={self.entry_price:.2f}")
# 第一分钟反手
# 前1分30秒反手
if self.start != 0:
first_dir, first_trigger = self.check_early_reverse_signal(
curr, kline_data