{"window":{"key":"all","requested_start":null,"requested_end":null,"observed_start":"2026-05-17T15:13:12+00:00","observed_end":"2026-08-17T01:30:08+00:00","days":91.43},"trades":1160,"announced":{"value":905,"unit":"count","denominator":1160,"denominator_label":"closed gradeable trades in window","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-08-17T01:30:08+00:00","method":"COUNT(*) WHERE positions.telegram_message_id IS NOT NULL","methodology_version":"1.0.0"},"announced_share_pct":{"value":78.0172,"unit":"percent","denominator":1160,"denominator_label":"closed gradeable trades in window","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-08-17T01:30:08+00:00","method":"trades with a Telegram message id / all trades * 100","methodology_version":"1.0.0"},"outcome_replies":{"value":684,"unit":"count","denominator":822,"denominator_label":"TP_HIT events in window","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-08-17T01:30:08+00:00","method":"COUNT(*) WHERE position_events.telegram_reply_id IS NOT NULL — each fill was posted as a reply under the original signal message","methodology_version":"1.0.0"},"channels":[{"channel_id":"-1004290234404","trades":453,"first_closed_at":"2026-06-26T03:45:12+00:00","last_closed_at":"2026-08-14T18:45:08+00:00"},{"channel_id":"-1002724500048","trades":452,"first_closed_at":"2026-05-17T15:13:12+00:00","last_closed_at":"2026-06-25T14:10:07+00:00"}],"selection_bias_check":{"announced_avg_roi_pct":{"value":0.5099,"unit":"percent_of_margin","denominator":905,"denominator_label":"announced trades","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-08-17T01:30:08+00:00","method":"mean recorded leveraged ROI of trades that carry a Telegram message id","methodology_version":"1.0.0"},"unannounced_avg_roi_pct":{"value":-1.6933,"unit":"percent_of_margin","denominator":255,"denominator_label":"trades with no Telegram message id","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-08-17T01:30:08+00:00","method":"mean recorded leveraged ROI of trades that carry no Telegram message id","methodology_version":"1.0.0"},"why":"Published so the obvious accusation can be checked: if only the winners had been announced, the announced average would sit far above the unannounced one. Both sets are in the ledger either way — nothing is excluded for not having been posted."},"what_this_proves":"A message id plus a channel id is a public, timestamped, third-party-hosted record that the signal existed before its outcome did. It does not prove the fill, the size or the fee — there is no exchange data in this dataset at all.","what_this_does_not_prove_fa":"شناسه پیام تلگرام فقط ثابت می‌کند که سیگنال پیش از مشخص‌شدن نتیجه منتشر شده است. این رکورد، اجرای سفارش در صرافی، حجم معامله یا کارمزد را اثبات نمی‌کند؛ چنین داده‌ای در پایگاه داده ما وجود ندارد.","provenance":{"methodology_version":"1.0.0","methodology_url":"/api/v1/public/performance/methodology","source":"positions + signal_quality_metrics + partial_close_log + position_events","row_counts":{"positions_table_rows":1499,"closed_gradeable_trades":1160,"excluded_housekeeping_rows":339,"trades_with_telegram_message":905,"trades_with_observed_exit_price":1088,"trades_with_nonreconciling_exit_price":763,"trades_with_partial_fills":89,"trades_without_recorded_leverage":0,"tp_hit_events":822,"distinct_symbols":93,"event_log_rows":14587,"event_log_rows_after_position_close":32,"event_log_rows_before_position_start":0,"positions_with_event_log_drift":29},"data_loaded_at":"2026-08-17T04:25:04.355410+00:00","cache_ttl_seconds":60.0,"snapshot_age_header":"X-Snapshot-Age-Seconds","consistency":"Every number on this surface is computed by one module, so no two endpoints can apply different definitions of a win, a window or a universe. The data SNAPSHOT is cached per worker process for 60 seconds and the API runs several workers, so two endpoints can be answered from snapshots up to one TTL apart and differ by whatever closed in between. Compare provenance.data_loaded_at on the two responses before comparing their numbers — that field exists so the skew is measurable rather than deniable.","timestamp_policy":"Every timestamp published by this module is ISO-8601 in UTC (+00:00). Source columns are TEXT in mixed formats: positions.created_at/activated_at/closed_at and partial_close_log.executed_at always carry an explicit UTC offset; position_events.occurred_at is written naive in Asia/Tehran local time by app.trading.utils.now_sql_naive(). A naive value is therefore interpreted as Asia/Tehran and converted to UTC. There is exactly one conversion function, so no two timestamps in one payload can be in different zones.","money_figures_available":false,"money_note":"positions.pnl_usdt, positions.quantity and positions.exit_price are 100% NULL. Absolute profit in USDT is not computable from this dataset and is never published."}}