{
  "generated_at_utc": "2026-04-08T13:34:10.068716+00:00",
  "prices_csv": "/opt/bots/saturnus_monitor/data/prices.csv",
  "events_csv": "/opt/bots/saturnus_monitor/data/events.csv",
  "prices_analysis": {
    "total_rows": 20736,
    "overall": {
      "first_timestamp": "2026-03-29T13:33:44+00:00",
      "last_timestamp": "2026-04-08T13:33:16.064093+00:00",
      "first_price": 83.52,
      "last_price": 84.49,
      "high": 86.93,
      "low": 76.73,
      "range_pct": 13.293366,
      "net_change_pct": 1.161398,
      "max_up_step_pct": 1.252662,
      "max_down_step_pct": -1.212421
    },
    "daily": {
      "2026-03-29": {
        "rows": 460,
        "open": 83.52,
        "close": 83.52,
        "high": 83.52,
        "low": 83.52,
        "range_pct": 0.0,
        "max_up_step_pct": 0.0,
        "max_down_step_pct": 0.0
      },
      "2026-04-01": {
        "rows": 1437,
        "open": 83.05,
        "close": 81.19,
        "high": 86.54,
        "low": 80.78,
        "range_pct": 7.130478,
        "max_up_step_pct": 0.6384,
        "max_down_step_pct": -0.682677
      },
      "2026-04-02": {
        "rows": 2869,
        "open": 81.16,
        "close": 78.93,
        "high": 81.73,
        "low": 76.73,
        "range_pct": 6.516356,
        "max_up_step_pct": 0.658794,
        "max_down_step_pct": -0.874815
      },
      "2026-04-03": {
        "rows": 2870,
        "open": 78.95,
        "close": 80.38,
        "high": 80.67,
        "low": 78.89,
        "range_pct": 2.256306,
        "max_up_step_pct": 0.389154,
        "max_down_step_pct": -0.439698
      },
      "2026-04-04": {
        "rows": 2870,
        "open": 80.36,
        "close": 80.83,
        "high": 81.32,
        "low": 79.7,
        "range_pct": 2.032622,
        "max_up_step_pct": 0.755792,
        "max_down_step_pct": -0.505424
      },
      "2026-04-05": {
        "rows": 2870,
        "open": 80.82,
        "close": 81.85,
        "high": 81.98,
        "low": 78.57,
        "range_pct": 4.340079,
        "max_up_step_pct": 0.807775,
        "max_down_step_pct": -0.463253
      },
      "2026-04-06": {
        "rows": 2869,
        "open": 82.14,
        "close": 80.19,
        "high": 82.95,
        "low": 79.72,
        "range_pct": 4.051681,
        "max_up_step_pct": 1.026142,
        "max_down_step_pct": -0.764378
      },
      "2026-04-07": {
        "rows": 2870,
        "open": 80.08,
        "close": 85.74,
        "high": 86.93,
        "low": 78.41,
        "range_pct": 10.865961,
        "max_up_step_pct": 1.252662,
        "max_down_step_pct": -1.212421
      },
      "2026-04-08": {
        "rows": 1621,
        "open": 85.74,
        "close": 84.49,
        "high": 85.87,
        "low": 83.94,
        "range_pct": 2.299261,
        "max_up_step_pct": 0.460993,
        "max_down_step_pct": -0.483377
      }
    }
  },
  "events_analysis": {
    "total_rows": 90402,
    "rule_counts": {
      "SELL_RECOVERY": 10168,
      "SELL_PANIC": 80218
    },
    "daily_rule_counts": {
      "2026-04-01": {
        "SELL_RECOVERY": 10168,
        "SELL_PANIC": 3750
      },
      "2026-04-02": {
        "SELL_PANIC": 19739
      },
      "2026-04-03": {
        "SELL_PANIC": 10951
      },
      "2026-04-05": {
        "SELL_PANIC": 10108
      },
      "2026-04-06": {
        "SELL_PANIC": 20008
      },
      "2026-04-07": {
        "SELL_PANIC": 15662
      }
    },
    "buy_sell_cycles": {
      "count": 0,
      "avg_return_pct": null,
      "median_return_pct": null,
      "min_return_pct": null,
      "max_return_pct": null,
      "samples": []
    },
    "sell_buy_cycles": {
      "count": 0,
      "avg_move_pct": null,
      "median_move_pct": null,
      "min_move_pct": null,
      "max_move_pct": null,
      "samples": []
    },
    "suggestions": {
      "suggested_std_threshold_pct": null,
      "recovery_dominance": 10168,
      "panic_event_count": 80218,
      "suggested_thresholds": {
        "std_sell": {
          "value_pct": null,
          "status": "estimated",
          "sample_count": 0,
          "source": "overall_market_move"
        },
        "recovery_sell": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_recovery_sell_event"
        },
        "panic_sell": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_panic_sell_event"
        },
        "std_buy": {
          "value_pct": null,
          "status": "estimated",
          "sample_count": 0,
          "source": "overall_market_move"
        },
        "recovery_buy": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_recovery_buy_event"
        },
        "panic_buy": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_panic_buy_event"
        }
      },
      "note": "Lab nézet: a threshold táblázat becsült, v2 logikájú javaslatokat mutat. A RECOVERY szabályok kontextusfüggők; kevés minta esetén az értékek csak előzetes irányadónak tekintendők."
    }
  },
  "source_summaries": {
    "lab": {
      "ui_ready": true,
      "source": "lab",
      "generated_at": "2026-04-08T13:34:10.068716+00:00",
      "prices_rows": 20736,
      "events_rows": 90402,
      "overall_range_pct": "13.293%",
      "net_change_pct": "1.161%",
      "buy_sell_avg_return_pct": "—",
      "sell_buy_avg_move_pct": "—",
      "rule_counts": {
        "SELL_RECOVERY": 10168,
        "SELL_PANIC": 80218
      },
      "threshold_rows": [
        {
          "label": "SELL_STANDARD",
          "value": "—",
          "status": "estimated",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "SELL_RECOVERY",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "SELL_PANIC",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "BUY_STANDARD",
          "value": "—",
          "status": "estimated",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "BUY_RECOVERY",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "BUY_PANIC",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        }
      ],
      "note": "Lab nézet: a threshold táblázat becsült, v2 logikájú javaslatokat mutat. A RECOVERY szabályok kontextusfüggők; kevés minta esetén az értékek csak előzetes irányadónak tekintendők."
    },
    "canonical": {
      "ui_ready": true,
      "source": "canonical",
      "generated_at": "2026-04-08T13:34:10.068716+00:00",
      "prices_rows": 20736,
      "events_rows": 90402,
      "overall_range_pct": "13.293%",
      "net_change_pct": "1.161%",
      "buy_sell_avg_return_pct": "—",
      "sell_buy_avg_move_pct": "—",
      "rule_counts": {},
      "threshold_rows": [
        {
          "label": "SELL_STANDARD",
          "value": "1.000%",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        },
        {
          "label": "SELL_RECOVERY",
          "value": "—",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        },
        {
          "label": "SELL_PANIC",
          "value": "1.000%",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        },
        {
          "label": "BUY_STANDARD",
          "value": "1.000%",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        },
        {
          "label": "BUY_RECOVERY",
          "value": "—",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        },
        {
          "label": "BUY_PANIC",
          "value": "1.000%",
          "status": "canonical",
          "sample_count": 0,
          "source": "canonical"
        }
      ],
      "note": "Canonical nézet: a threshold táblázat a kanonikus v2 szabályparaméterekből épül fel. A rule count és a múltbeli eseményalapú mutatók ebben a nézetben tájékoztató jellegűek, nem újraszámolt canonical eredmények."
    }
  }
}