# -*- coding: utf-8 -*-
import json, sys, os

_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# ── 交易快照 ──
print("=" * 70)
print("【交易快照】")
try:
    snaps = json.load(open(os.path.join(_ROOT, 'trade_snapshots.json'), encoding='utf-8'))
    print(f"共 {len(snaps)} 条开仓记录")
    for s in snaps:
        f = s.get('factors', {})
        raw = s.get('raw', {})
        tr  = f.get('trend', '?')
        lc  = f.get('liq_cool', '?')
        sm  = f.get('smart_money', '?')
        mp  = f.get('maxpain', '?')
        btc = f.get('btc_corr', '?')
        vd  = f.get('vol_delta', '?')
        t1h = raw.get('t1h','?')
        t4h = raw.get('t4h','?')
        print(f"  {s['time']}  {s['action']}  ${s.get('price',0):.2f}"
              f"  TP=${s.get('tp',0)}  SL=${s.get('sl',0)}"
              f"  score={s.get('score',0):+.3f}")
        print(f"    TR={tr}(1H={t1h}/4H={t4h}) LC={lc} SM={sm} MP={mp} BTC={btc} VD={vd}")
        # SL距离
        px = s.get('price', 0)
        sl = s.get('sl', 0)
        tp = s.get('tp', 0)
        if px and sl:
            sl_pct = abs(px-sl)/px*100
            tp_pct = abs(px-tp)/px*100
            print(f"    SL距离={sl_pct:.2f}%  TP距离={tp_pct:.2f}%  盈亏比={tp_pct/sl_pct:.1f}:1")
except Exception as e:
    print(f"读取快照失败: {e}")

# ── 日志中的止损/止盈记录 ──
print()
print("=" * 70)
print("【日志中的平仓事件】")
try:
    keywords = ['止损', '止盈', '平仓', '强制', 'SL触发', '亏损', 'close', '连亏', 'CLOSE']
    found = []
    with open(os.path.join(_ROOT, 'my_trader.log'), encoding='utf-8', errors='replace') as f:
        for line in f:
            if any(k in line for k in keywords):
                found.append(line.strip())
    print(f"共找到 {len(found)} 条相关日志:")
    for l in found[-30:]:
        print(f"  {l}")
except Exception as e:
    print(f"读取日志失败: {e}")

# ── 账户状态 ──
print()
print("=" * 70)
print("【trader_state.json】")
try:
    state = json.load(open(os.path.join(_ROOT, 'trader_state.json'), encoding='utf-8'))
    for k,v in state.items():
        print(f"  {k}: {v}")
except Exception as e:
    print(f"读取state失败: {e}")
