{
  "generated_at_utc": "2026-05-25T03:52:34.389260+00:00",
  "prices_csv": "/opt/bots/saturnus_monitor/data/prices.csv",
  "events_csv": "/opt/bots/saturnus_monitor/data/events.csv",
  "prices_analysis": {
    "total_rows": 28643,
    "overall": {
      "first_timestamp": "2026-05-14T11:07:44.650131+00:00",
      "last_timestamp": "2026-05-24T11:07:41.344639+00:00",
      "first_price": 90.92,
      "last_price": 86.54,
      "high": 93.63,
      "low": 81.57,
      "range_pct": 14.784847,
      "net_change_pct": -4.817422,
      "max_up_step_pct": 1.300716,
      "max_down_step_pct": -2.079925
    },
    "daily": {
      "2026-05-14": {
        "rows": 1537,
        "open": 90.92,
        "close": 92.15,
        "high": 93.63,
        "low": 90.61,
        "range_pct": 3.332965,
        "max_up_step_pct": 0.527847,
        "max_down_step_pct": -0.482729
      },
      "2026-05-15": {
        "rows": 2864,
        "open": 92.17,
        "close": 89.23,
        "high": 92.62,
        "low": 88.67,
        "range_pct": 4.45472,
        "max_up_step_pct": 0.515348,
        "max_down_step_pct": -0.715084
      },
      "2026-05-16": {
        "rows": 2864,
        "open": 89.12,
        "close": 86.54,
        "high": 89.39,
        "low": 85.56,
        "range_pct": 4.476391,
        "max_up_step_pct": 1.196422,
        "max_down_step_pct": -1.250287
      },
      "2026-05-17": {
        "rows": 2865,
        "open": 86.59,
        "close": 85.14,
        "high": 87.19,
        "low": 83.8,
        "range_pct": 4.045346,
        "max_up_step_pct": 1.300716,
        "max_down_step_pct": -2.079925
      },
      "2026-05-18": {
        "rows": 2864,
        "open": 85.04,
        "close": 85.31,
        "high": 85.72,
        "low": 83.49,
        "range_pct": 2.670979,
        "max_up_step_pct": 1.183786,
        "max_down_step_pct": -0.818311
      },
      "2026-05-19": {
        "rows": 2865,
        "open": 85.39,
        "close": 84.21,
        "high": 85.81,
        "low": 83.79,
        "range_pct": 2.410789,
        "max_up_step_pct": 0.414495,
        "max_down_step_pct": -0.377003
      },
      "2026-05-20": {
        "rows": 2865,
        "open": 84.18,
        "close": 86.09,
        "high": 86.91,
        "low": 83.84,
        "range_pct": 3.661737,
        "max_up_step_pct": 0.913349,
        "max_down_step_pct": -0.916686
      },
      "2026-05-21": {
        "rows": 2864,
        "open": 86.06,
        "close": 87.17,
        "high": 87.84,
        "low": 85.31,
        "range_pct": 2.965655,
        "max_up_step_pct": 0.666054,
        "max_down_step_pct": -0.947429
      },
      "2026-05-22": {
        "rows": 2865,
        "open": 87.19,
        "close": 84.37,
        "high": 87.77,
        "low": 84.0,
        "range_pct": 4.488095,
        "max_up_step_pct": 1.241135,
        "max_down_step_pct": -1.352612
      },
      "2026-05-23": {
        "rows": 2863,
        "open": 84.3,
        "close": 85.67,
        "high": 87.32,
        "low": 81.57,
        "range_pct": 7.04916,
        "max_up_step_pct": 1.03777,
        "max_down_step_pct": -1.734731
      },
      "2026-05-24": {
        "rows": 1327,
        "open": 85.73,
        "close": 86.54,
        "high": 86.86,
        "low": 85.55,
        "range_pct": 1.531268,
        "max_up_step_pct": 0.381371,
        "max_down_step_pct": -0.345383
      }
    }
  },
  "events_analysis": {
    "total_rows": 19221,
    "rule_counts": {
      "SELL_STANDARD": 17549,
      "BUY_STANDARD": 2,
      "SELL_PANIC": 1653
    },
    "daily_rule_counts": {
      "2026-05-14": {
        "SELL_STANDARD": 5069
      },
      "2026-05-15": {
        "SELL_STANDARD": 8729
      },
      "2026-05-16": {
        "SELL_STANDARD": 3750
      },
      "2026-05-17": {
        "BUY_STANDARD": 1,
        "SELL_PANIC": 30
      },
      "2026-05-18": {
        "SELL_PANIC": 774
      },
      "2026-05-19": {
        "SELL_PANIC": 274
      },
      "2026-05-20": {
        "SELL_PANIC": 246
      },
      "2026-05-22": {
        "BUY_STANDARD": 1
      },
      "2026-05-23": {
        "SELL_PANIC": 329,
        "SELL_STANDARD": 1
      }
    },
    "buy_sell_cycles": {
      "count": 2,
      "avg_return_pct": -2.096572,
      "median_return_pct": -2.096572,
      "min_return_pct": -2.495879,
      "max_return_pct": -1.697264,
      "samples": [
        {
          "buy_ts": "2026-05-17T04:05:04.085371+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 86.61,
          "sell_ts": "2026-05-17T23:59:01.915226+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.14,
          "return_pct": -1.697264
        },
        {
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "sell_ts": "2026-05-23T13:11:03.791026+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 82.82,
          "return_pct": -2.495879
        }
      ]
    },
    "sell_buy_cycles": {
      "count": 18872,
      "avg_move_pct": -3.864992,
      "median_move_pct": -4.446161,
      "min_move_pct": -7.448173,
      "max_move_pct": 1.227209,
      "samples": [
        {
          "sell_ts": "2026-05-20T14:38:43.109031+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:45.106444+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:47.104235+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:49.107113+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:51.105743+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:53.105825+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:55.112380+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:57.106167+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:38:59.106346+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        },
        {
          "sell_ts": "2026-05-20T14:39:01.107688+00:00",
          "sell_rule": "SELL_PANIC",
          "sell_price": 85.26,
          "buy_ts": "2026-05-22T20:52:04.061952+00:00",
          "buy_rule": "BUY_STD",
          "buy_price": 84.94,
          "move_pct": -0.375323
        }
      ]
    },
    "suggestions": {
      "suggested_std_threshold_pct": 6.246,
      "profitless_dominance": 0,
      "panic_event_count": 1653,
      "suggested_thresholds": {
        "std_sell": {
          "value_pct": 6.246,
          "status": "estimated",
          "sample_count": 0,
          "source": "overall_market_move"
        },
        "profitless_sell": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_profitless_sell_event"
        },
        "panic_sell": {
          "value_pct": 2.097,
          "status": "measured",
          "sample_count": 2,
          "source": "panic_sell_events"
        },
        "std_buy": {
          "value_pct": 4.446,
          "status": "measured",
          "sample_count": 18872,
          "source": "std_buy_events"
        },
        "profitless_buy": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_profitless_buy_event"
        },
        "panic_buy": {
          "value_pct": null,
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "no_panic_buy_event"
        }
      },
      "note": "Ha a PROFITLESS események dominálnak, akkor a profitless szabály túl gyakran aktiválódhat. A becsült értékek kevés adat mellett még csak előzetes javaslatok."
    }
  },
  "source_summaries": {
    "lab": {
      "ui_ready": true,
      "source": "lab",
      "generated_at": "2026-05-25T03:52:34.389260+00:00",
      "prices_rows": 28643,
      "events_rows": 19221,
      "overall_range_pct": "14.785%",
      "net_change_pct": "-4.817%",
      "buy_sell_avg_return_pct": "-2.097%",
      "sell_buy_avg_move_pct": "-3.865%",
      "rule_counts": {
        "SELL_STANDARD": 17549,
        "BUY_STANDARD": 2,
        "SELL_PANIC": 1653
      },
      "threshold_rows": [
        {
          "label": "SELL_STANDARD",
          "value": "6.246%",
          "status": "estimated",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "PROFITLESS SELL",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "SELL_PANIC",
          "value": "2.097%",
          "status": "measured",
          "sample_count": 2,
          "source": "lab"
        },
        {
          "label": "BUY_STANDARD",
          "value": "4.446%",
          "status": "measured",
          "sample_count": 18872,
          "source": "lab"
        },
        {
          "label": "PROFITLESS BUY",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        },
        {
          "label": "BUY_PANIC",
          "value": "—",
          "status": "insufficient_data",
          "sample_count": 0,
          "source": "lab"
        }
      ],
      "note": "Ha a PROFITLESS események dominálnak, akkor a profitless szabály túl gyakran aktiválódhat. A becsült értékek kevés adat mellett még csak előzetes javaslatok."
    },
    "canonical": {
      "ui_ready": true,
      "source": "canonical",
      "generated_at": "2026-05-25T03:52:34.389260+00:00",
      "prices_rows": 28643,
      "events_rows": 19221,
      "overall_range_pct": "14.785%",
      "net_change_pct": "-4.817%",
      "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": "PROFITLESS SELL",
          "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": "PROFITLESS BUY",
          "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."
    }
  }
}