auto_trade_sys/analyze_json.py
薇薇安 79fb20bf41 1
2026-02-05 19:55:50 +08:00

71 lines
2.4 KiB
Python

import json
from datetime import datetime
import sys
file_path = '/Users/vivian/work/python/auto_trade_sys/交易记录_2026-02-05T11-39-32.json'
def parse_time(time_str):
if not time_str:
return None
try:
# Adjust format based on actual JSON content if needed
# Assuming ISO format or similar based on filename
return datetime.fromisoformat(time_str.replace('Z', '+00:00'))
except ValueError:
return None
try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
closed_trades = [t for t in data if t.get('状态') == '已平仓']
total_trades = len(data)
closed_count = len(closed_trades)
print(f"Total Trades in File: {total_trades}")
print(f"Closed Trades: {closed_count}")
if closed_count == 0:
print("No closed trades to analyze.")
sys.exit(0)
wins = [t for t in closed_trades if float(t.get('盈亏', 0)) > 0]
losses = [t for t in closed_trades if float(t.get('盈亏', 0)) <= 0]
total_pnl = sum(float(t.get('盈亏', 0)) for t in closed_trades)
total_win_pnl = sum(float(t.get('盈亏', 0)) for t in wins)
total_loss_pnl = sum(float(t.get('盈亏', 0)) for t in losses)
avg_win = total_win_pnl / len(wins) if wins else 0
avg_loss = total_loss_pnl / len(losses) if losses else 0
print(f"\n--- Performance Analysis ---")
print(f"Win Count: {len(wins)}")
print(f"Loss Count: {len(losses)}")
win_rate = (len(wins) / closed_count * 100) if closed_count > 0 else 0
print(f"Win Rate: {win_rate:.2f}%")
print(f"Total PnL: {total_pnl:.4f} USDT")
print(f"Avg Win: {avg_win:.4f} USDT")
print(f"Avg Loss: {avg_loss:.4f} USDT")
if avg_loss != 0:
rr_ratio = abs(avg_win / avg_loss)
print(f"Avg Win / Avg Loss Ratio (R:R): {rr_ratio:.2f}")
else:
print("Avg Win / Avg Loss Ratio (R:R): Infinite (No Losses)")
# Duration Analysis (if fields exist)
# Assuming fields like '开仓时间' and '平仓时间' exist based on typical trade records
# If not, this part will be skipped or adjusted
# Let's inspect one record keys to be sure for future reference
if closed_trades:
print(f"\nSample Record Keys: {list(closed_trades[0].keys())}")
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()