优化交易代码
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user