#!/usr/bin/env python3 import sys import json import argparse from pathlib import Path ROOT = Path(__file__).resolve().parents[1] def main(): parser = argparse.ArgumentParser() parser.add_argument("--json", default="GatherTradingData.json") parser.add_argument("--out", default="Temp/profit_giveback_ratchet_v2.json") args = parser.parse_args() json_path = ROOT / args.json if not json_path.exists(): print(f"Input file not found: {json_path}") sys.exit(1) raw = json.loads(json_path.read_text(encoding="utf-8")) account_snapshot = raw.get("data", {}).get("account_snapshot", []) or [] ratchets = {} for row in account_snapshot: ticker = row.get("ticker") if not ticker: continue # Simulated/Computed giveback metrics current_price = row.get("current_price") or 0.0 avg_cost = row.get("average_cost") or current_price highest_price = row.get("highest_price_since_entry") or current_price profit_pct = ((current_price - avg_cost) / avg_cost * 100) if avg_cost else 0.0 peak_gain = highest_price - avg_cost current_gain = current_price - avg_cost giveback_pct = 0.0 if peak_gain > 0: giveback_pct = (peak_gain - current_gain) / peak_gain * 100 ratchets[ticker] = { "profit_pct": round(profit_pct, 2), "highest_price": highest_price, "giveback_pct": round(giveback_pct, 2), "ratchet_stage": "APEX_SUPER" if profit_pct >= 60 else "NORMAL" } out_path = ROOT / args.out out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text(json.dumps({ "formula_id": "PROFIT_GIVEBACK_RATCHET_V2", "ratchets": ratchets }, indent=2, ensure_ascii=False), encoding="utf-8") print(f"Saved profit giveback ratchets to {out_path}") sys.exit(0) if __name__ == "__main__": main()