{"basis":"recorded","months":[{"month":"2026-05","trades":{"value":104,"unit":"count","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"COUNT(*) grouped by month of closed_at (UTC)","methodology_version":"1.0.0"},"wins":{"value":61,"unit":"count","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"COUNT(*) WHERE recorded_roi_pct > 0","methodology_version":"1.0.0"},"win_rate_pct":{"value":58.6538,"unit":"percent","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"wins / trades * 100","methodology_version":"1.0.0"},"roi_points_sum":{"value":-580.5612,"unit":"roi_points","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"sum of per-trade leveraged ROI percentages. THIS IS NOT A MONTHLY PORTFOLIO RETURN — it is the sum of independent per-trade percentages.","methodology_version":"1.0.0"},"avg_roi_per_trade_pct":{"value":-5.5823,"unit":"percent_of_margin","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"mean leveraged ROI per trade in month","methodology_version":"1.0.0"},"compounded_return_pct":{"value":-11.6177,"unit":"percent","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"geometric compounding within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"max_drawdown_pct":{"value":-18.444,"unit":"percent","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"peak-to-trough within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"profit_factor":{"value":0.7894,"unit":"ratio","denominator":104,"denominator_label":"closed gradeable trades in month","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"sum(positive ROI) / |sum(negative ROI)|","methodology_version":"1.0.0"},"avg_leverage":{"value":15.2115,"unit":"x","denominator":104,"denominator_label":"trades in month with a recorded positions.leverage","window_start":"2026-05-17T15:13:12+00:00","window_end":"2026-05-31T22:15:27+00:00","method":"mean positions.leverage over rows where it is recorded — published because leverage changed over time and ROI is leverage-scaled. Rows with a NULL or zero leverage are excluded from the mean rather than counted as 1x.","methodology_version":"1.0.0"}},{"month":"2026-06","trades":{"value":467,"unit":"count","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"COUNT(*) grouped by month of closed_at (UTC)","methodology_version":"1.0.0"},"wins":{"value":280,"unit":"count","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"COUNT(*) WHERE recorded_roi_pct > 0","methodology_version":"1.0.0"},"win_rate_pct":{"value":59.9572,"unit":"percent","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"wins / trades * 100","methodology_version":"1.0.0"},"roi_points_sum":{"value":1474.195,"unit":"roi_points","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"sum of per-trade leveraged ROI percentages. THIS IS NOT A MONTHLY PORTFOLIO RETURN — it is the sum of independent per-trade percentages.","methodology_version":"1.0.0"},"avg_roi_per_trade_pct":{"value":3.1567,"unit":"percent_of_margin","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"mean leveraged ROI per trade in month","methodology_version":"1.0.0"},"compounded_return_pct":{"value":33.6167,"unit":"percent","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"geometric compounding within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"max_drawdown_pct":{"value":-6.9305,"unit":"percent","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"peak-to-trough within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"profit_factor":{"value":1.4835,"unit":"ratio","denominator":467,"denominator_label":"closed gradeable trades in month","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"sum(positive ROI) / |sum(negative ROI)|","methodology_version":"1.0.0"},"avg_leverage":{"value":11.9722,"unit":"x","denominator":467,"denominator_label":"trades in month with a recorded positions.leverage","window_start":"2026-06-01T00:35:05+00:00","window_end":"2026-06-30T15:50:10+00:00","method":"mean positions.leverage over rows where it is recorded — published because leverage changed over time and ROI is leverage-scaled. Rows with a NULL or zero leverage are excluded from the mean rather than counted as 1x.","methodology_version":"1.0.0"}},{"month":"2026-07","trades":{"value":480,"unit":"count","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"COUNT(*) grouped by month of closed_at (UTC)","methodology_version":"1.0.0"},"wins":{"value":296,"unit":"count","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"COUNT(*) WHERE recorded_roi_pct > 0","methodology_version":"1.0.0"},"win_rate_pct":{"value":61.6667,"unit":"percent","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"wins / trades * 100","methodology_version":"1.0.0"},"roi_points_sum":{"value":-356.4025,"unit":"roi_points","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"sum of per-trade leveraged ROI percentages. THIS IS NOT A MONTHLY PORTFOLIO RETURN — it is the sum of independent per-trade percentages.","methodology_version":"1.0.0"},"avg_roi_per_trade_pct":{"value":-0.7425,"unit":"percent_of_margin","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"mean leveraged ROI per trade in month","methodology_version":"1.0.0"},"compounded_return_pct":{"value":-7.1954,"unit":"percent","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"geometric compounding within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"max_drawdown_pct":{"value":-10.9081,"unit":"percent","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"peak-to-trough within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"profit_factor":{"value":0.9038,"unit":"ratio","denominator":480,"denominator_label":"closed gradeable trades in month","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"sum(positive ROI) / |sum(negative ROI)|","methodology_version":"1.0.0"},"avg_leverage":{"value":11.7375,"unit":"x","denominator":480,"denominator_label":"trades in month with a recorded positions.leverage","window_start":"2026-07-01T01:40:05+00:00","window_end":"2026-07-31T18:40:14+00:00","method":"mean positions.leverage over rows where it is recorded — published because leverage changed over time and ROI is leverage-scaled. Rows with a NULL or zero leverage are excluded from the mean rather than counted as 1x.","methodology_version":"1.0.0"}},{"month":"2026-08","trades":{"value":105,"unit":"count","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"COUNT(*) grouped by month of closed_at (UTC)","methodology_version":"1.0.0"},"wins":{"value":59,"unit":"count","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"COUNT(*) WHERE recorded_roi_pct > 0","methodology_version":"1.0.0"},"win_rate_pct":{"value":56.1905,"unit":"percent","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"wins / trades * 100","methodology_version":"1.0.0"},"roi_points_sum":{"value":-480.668,"unit":"roi_points","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"sum of per-trade leveraged ROI percentages. THIS IS NOT A MONTHLY PORTFOLIO RETURN — it is the sum of independent per-trade percentages.","methodology_version":"1.0.0"},"avg_roi_per_trade_pct":{"value":-4.5778,"unit":"percent_of_margin","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"mean leveraged ROI per trade in month","methodology_version":"1.0.0"},"compounded_return_pct":{"value":-9.184,"unit":"percent","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"geometric compounding within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"max_drawdown_pct":{"value":-9.2564,"unit":"percent","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"peak-to-trough within the month; at allocation_pct=2 (caller-chosen sizing assumption, default 2, range 0.1-10; changing it changes this number — see equity_assumption.sizing_dependence_note)","methodology_version":"1.0.0","sizing_dependent":true,"allocation_pct":2.0},"profit_factor":{"value":0.1418,"unit":"ratio","denominator":105,"denominator_label":"closed gradeable trades in month","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"sum(positive ROI) / |sum(negative ROI)|","methodology_version":"1.0.0"},"avg_leverage":{"value":11.8286,"unit":"x","denominator":105,"denominator_label":"trades in month with a recorded positions.leverage","window_start":"2026-08-01T09:35:11+00:00","window_end":"2026-08-15T23:00:37+00:00","method":"mean positions.leverage over rows where it is recorded — published because leverage changed over time and ROI is leverage-scaled. Rows with a NULL or zero leverage are excluded from the mean rather than counted as 1x.","methodology_version":"1.0.0"}}],"month_count":4,"sizing_dependent_metrics":["compounded_return_pct","max_drawdown_pct","sharpe_ratio","calmar_ratio","total_return_pct","final_equity","peak_equity","trough_equity","daily_returns"],"assumption":{"model":"fixed_fraction_margin","allocation_pct":2.0,"allocation_pct_is_caller_selectable":true,"allocation_pct_default":2.0,"allocation_pct_range":[0.1,10.0],"sizing_dependent_metrics":["compounded_return_pct","max_drawdown_pct","sharpe_ratio","calmar_ratio","total_return_pct","final_equity","peak_equity","trough_equity","daily_returns"],"sizing_dependence_note":"allocation_pct is an assumption chosen by whoever called this endpoint, not a fact measured from the data. Every metric listed in sizing_dependent_metrics moves with it and each one restates the value used in its own method string. At a small allocation the compounded curve approaches the arithmetic sum of per-trade ROI and can be positive while a larger allocation is negative, because losses compound. The per-trade record — win rate, profit factor, expectancy, the ledger — does NOT depend on it.","sizing_dependence_note_fa":"مقدار allocation_pct یک «فرض» است که درخواست‌کننده انتخاب می‌کند، نه عددی که از داده اندازه‌گیری شده باشد. هر معیاری که در فهرست sizing_dependent_metrics آمده با تغییر این مقدار تغییر می‌کند و مقدار به‌کاررفته در توضیح روش خودِ همان معیار نوشته شده است. نرخ برد، ضریب سود، امید ریاضی و دفتر معاملات به این فرض وابسته نیستند.","starting_equity":100.0,"starting_equity_unit":"index (dimensionless, 100 = start)","compounding":"geometric","sequencing":"one trade at a time, ordered by closed_at; concurrent positions are not modelled","formula":"equity_n = equity_(n-1) * (1 + allocation_pct/100 * leveraged_roi_pct/100)","roi_basis":"recorded","fees_modelled":false,"funding_modelled":false,"statement_fa":"این منحنی یک مدل است، نه موجودی حساب. فرض: در هر معامله 2٪ از سرمایه به‌عنوان مارجین تخصیص داده می‌شود، معاملات پشت‌سرهم و بدون هم‌پوشانی اجرا می‌شوند، و کارمزد و فاندینگ لحاظ نشده است. عدد شروع 100 یک شاخص است، نه دلار.","statement_en":"This curve is a model, not an account balance. Assumption: each trade allocates 2% of current equity as margin, trades are taken sequentially with no overlap, and fees and funding are not modelled. The starting value of 100 is an index, not dollars.","why_not_usdt":"positions.quantity, positions.pnl_usdt and positions.exit_price are 100% NULL across all 1,495 rows of positions. Position size was never recorded, so absolute profit in USDT is not computable from this dataset and is never published.","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."},"field_notes":{"roi_points_sum":"Sum of independent per-trade leveraged ROI percentages. This is NOT a monthly portfolio return and must never be labelled as one.","compounded_return_pct":"The monthly portfolio return under the stated fixed-fraction assumption.","avg_leverage":"Published because average leverage and stop distance changed materially over the period, which makes raw ROI incomparable across months."},"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":1495,"closed_gradeable_trades":1156,"excluded_housekeeping_rows":339,"trades_with_telegram_message":905,"trades_with_observed_exit_price":1084,"trades_with_nonreconciling_exit_price":760,"trades_with_partial_fills":87,"trades_without_recorded_leverage":0,"tp_hit_events":818,"distinct_symbols":93,"event_log_rows":14573,"event_log_rows_after_position_close":31,"event_log_rows_before_position_start":0,"positions_with_event_log_drift":28},"data_loaded_at":"2026-08-16T01:21:39.335896+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."}}