哈哈哈

This commit is contained in:
ddrwode
2026-02-10 15:28:47 +08:00
parent 7d6b27c5a8
commit 51c53dceb9

View File

@@ -78,6 +78,7 @@ class BitmartFuturesTransaction:
self.take_profit_reentry_threshold_short = None # 止盈平空后,价格 <= 此值则开空(同向)
self.optimized_params_file = Path(__file__).resolve().parent / "atr_best_params.json"
self.strategy_log_dir = Path(__file__).resolve().parent # 策略开仓日志目录
self.apply_precomputed_params()
self.load_optimized_params()
@@ -269,6 +270,33 @@ class BitmartFuturesTransaction:
time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
logger.info(f"[止盈日志] 时间={time_str} | 操作={operation} | 原因={reason}")
def _write_open_log(self, operation: str, reason: str, current_kline: dict, prev_kline: dict | None):
"""写入策略开仓日志文件时间、参考的两根K线、操作、开仓原因"""
try:
date_str = datetime.now().strftime("%Y%m%d")
log_file = self.strategy_log_dir / f"strategy_log_{date_str}.txt"
time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cur = current_kline
cur_line = f"id={cur['id']} open={cur['open']:.2f} high={cur['high']:.2f} low={cur['low']:.2f} close={cur['close']:.2f}"
if prev_kline:
prev = prev_kline
prev_line = f"id={prev['id']} open={prev['open']:.2f} high={prev['high']:.2f} low={prev['low']:.2f} close={prev['close']:.2f}"
else:
prev_line = "(无)"
block = (
f"\n{'='*60}\n"
f"时间: {time_str}\n"
f"操作: {operation}\n"
f"参考K线:\n 当前K线: {cur_line}\n 上一根K线: {prev_line}\n"
f"开仓原因: {reason}\n"
f"{'='*60}\n"
)
with open(log_file, "a", encoding="utf-8") as f:
f.write(block)
logger.info(f"已写入开仓日志: {log_file.name}")
except Exception as e:
logger.warning(f"写入开仓日志失败: {e}")
def load_optimized_params(self):
"""从本地优化结果文件加载参数(可选)。"""
try:
@@ -701,6 +729,7 @@ class BitmartFuturesTransaction:
if self.verify_position_direction(1):
self.last_open_time = time.time()
self.last_open_kline_id = current_kline_time
self._write_open_log("止盈后同向开多", reason, current_kline, prev_kline)
logger.success("止盈后再开多成功")
page_start = True
else:
@@ -742,6 +771,7 @@ class BitmartFuturesTransaction:
if self.verify_position_direction(-1):
self.last_open_time = time.time()
self.last_open_kline_id = current_kline_time
self._write_open_log("止盈后同向开空", reason, current_kline, prev_kline)
logger.success("止盈后再开空成功")
page_start = True
else:
@@ -776,6 +806,18 @@ class BitmartFuturesTransaction:
if trade_success:
if signal[0] in ('reverse_long', 'reverse_short'):
self.last_reverse_kline_id = current_kline_time # 本 K 线已反手,本 K 线内不再操作
# 写入开仓日志参考的两根K线 + 开仓原因
sig_type, trigger_price = signal
op_name = {"long": "开多", "short": "开空", "reverse_long": "反手做多", "reverse_short": "反手做空"}.get(sig_type, sig_type)
if sig_type == "long":
open_reason = f"三分之一策略:当前价{current_price:.2f}>=突破做多价{trigger_price:.2f}(实体上边+1/3)"
elif sig_type == "short":
open_reason = f"三分之一策略:当前价{current_price:.2f}<=突破做空价{trigger_price:.2f}(实体下边-1/3)"
elif sig_type == "reverse_long":
open_reason = f"持空反手做多:当前价{current_price:.2f}>=做多触发价{trigger_price:.2f}(下1/3)"
else:
open_reason = f"持多反手做空:当前价{current_price:.2f}<=做空触发价{trigger_price:.2f}(上1/3)"
self._write_open_log(op_name, open_reason, current_kline, prev_kline)
logger.success(f"交易执行完成: {signal[0]}, 当前持仓状态: {self.start}")
page_start = True
else: