روششناسی: این اعداد چطور شمرده میشوند
هر چیزی که در این صفحه میبینید مستقیماً از همان موتوری خوانده میشود که اعداد سایت را میسازد. اگر تعریفی عوض شود، این صفحه هم عوض میشود — چون هیچکدام از این جملهها اینجا تایپ نشدهاند.
نسخه روششناسی 1.0.0 · تولید این پاسخ:
۸۹ روز · ۲۷ اردیبهشت ۱۴۰۵ ساعت ۱۸:۴۳ تا ۲۳ مرداد ۱۴۰۵ ساعت ۲۲:۱۵
متنهای فنی این صفحه را موتور به انگلیسی منتشر میکند. برگردان فارسی آنها برای نسخهی 1.0.0 نوشته شده و متن اصلی انگلیسی زیر هر بخش باز میشود.
چه معاملهای وارد آمار میشود
یک معامله وقتی وارد کارنامهی عمومی میشود که بسته شده باشد (closed_at IS NOT NULL)، بازده محققشدهی ثبتشده داشته باشد (pnl_percent_on_close IS NOT NULL AND <> 0) و با یک اقدام نگهدارندهی موتور ریسک بسته نشده باشد. برد یعنی معاملهای که بازده ثبتشدهاش اکیداً بزرگتر از صفر باشد. هیچ فیلتر دیگری در کار نیست — تمام ضررها در فهرست هستند.
متن اصلی و مرجع (انگلیسی)
A trade enters the public record when it has closed (closed_at IS NOT NULL), has a recorded realised ROI (pnl_percent_on_close IS NOT NULL AND <> 0), and was not closed by a risk-engine housekeeping action. A win is a trade whose recorded ROI is strictly greater than zero. Nothing else is filtered — every loss is included.
تعریف برد
برد یعنی یک معاملهی بستهشدهی قابلارزیابی که بازده محققشدهی ثبتشدهاش (positions.pnl_percent_on_close) اکیداً بزرگتر از صفر است. این تعریف عمداً حد ضرر متحرکی را که در سود بسته شده برد میشمارد و حد ضرر سربهسر را باخت، چون آنچه دنبالکننده تجربه کرده «نتیجه» است، نه برچسب وضعیت.
متن اصلی و مرجع (انگلیسی)
A win is a closed gradeable trade whose recorded realised ROI (positions.pnl_percent_on_close) is strictly greater than zero. This deliberately counts a trailing stop that closed in profit as a win and a break-even stop as a loss, because the outcome, not the status token, is what a follower experienced.
تعریف باخت
هر معاملهی بستهشدهی قابلارزیابی با بازده ثبتشدهی کوچکتر یا مساوی صفر. همهی آنها منتشر میشوند.
متن اصلی و مرجع (انگلیسی)
Any closed gradeable trade with recorded ROI <= 0. All of them are published.
چه چیزی حذف میشود و چرا
ردیفهای حذفشده پوزیشنهایی هستند که موتور ریسک به دلایلی بیارتباط با ایدهی معامله بسته است: سقف اکسپوژر، نگهبان همبستگی، قطعکنندهی مدار، بلکاوت خبری و throttleهای تطبیقی. اینها دقیقاً روی pnl_percent_on_close = 0 بسته میشوند چون هیچ نتیجهی بازاری محقق نشده است. برد شمردنشان نرخ برد را باد میکند و باخت شمردنشان آن را میخواباند. بهجای هر دو، تعدادشان منتشر میشود تا این حذف قابل حسابرسی باشد.
متن اصلی و مرجع (انگلیسی)
Excluded rows are positions the risk engine flattened for reasons unrelated to the trade thesis (exposure caps, correlation guards, circuit breakers, news blackouts, adaptive throttles). They close at exactly pnl_percent_on_close = 0 because no market outcome was realised. Counting them as wins would inflate the win rate; counting them as losses would deflate it. They are reported as a count so the exclusion is auditable.
دلایل بستهشدنی که حذف میشوند
- EXPOSURE_CAP
- ADMIN_BULK_CLOSE_P10
- SIGNAL_GUARD
- CORR_GUARD
- CIRCUIT_BREAKER
- CLAUDE_VETO
- CLAUDE_L5_ABORT
- TF_HIERARCHY
- NEWS_BLACKOUT
- LIQUIDITY
- MAX_HOLD_MANUAL_EXPOSURE_UNBLOCK
- ADAPTIVE:* (any adaptive throttle)
۳۳۹ ردیف بستهشده به این دلایل از آمار کنار گذاشته شده و همینجا شمرده میشود.
مبنای محاسبهی بازده
- ستون منبع
- positions.pnl_percent_on_close
- نوشتهشده توسط
- app/trading/monitor.py via app.trading.utils.roi_percent()
- فرمول
- ((exit - entry)/entry for LONG, (entry - exit)/entry for SHORT) * leverage * 100
- واحد
- percent of margin (leveraged ROI)
هشدار مهم
این عدد از پیش اهرم را در خود دارد. ضرب دوبارهی آن در اهرم همان محاسبهی دوبارهای است که برای یک معاملهی −19.21% نمایش −192 USD تولید کرد.
متن اصلی و مرجع (انگلیسی)
This number ALREADY includes leverage. Multiplying it by leverage again is the double-count that produced the -192 USD display for a -19.21% trade.
تغییر قیمت بدون اهرم
تغییر قیمت بدون اهرم. این مقدار بهصورت جبری از همان بازده ثبتشدهی مرجع بهدست میآید، نه از محاسبهی دوباره روی قیمتهای خروج ذخیرهشده — دلیلش را در محدودیتهای شناختهشده بخوانید.
متن اصلی و مرجع (انگلیسی)
The unleveraged price move. Derived algebraically from the authoritative recorded ROI rather than recomputed from stored exit prices — see known_limitations.
leveraged_roi_pct / leverage
منحنی سرمایه — یک مدل، نه موجودی حساب
این منحنی یک مدل است، نه موجودی حساب. فرض: در هر معامله 2٪ از سرمایه بهعنوان مارجین تخصیص داده میشود، معاملات پشتسرهم و بدون همپوشانی اجرا میشوند، و کارمزد و فاندینگ لحاظ نشده است. عدد شروع ۱۰۰ یک شاخص است، نه دلار.
equity_n = equity_(n-1) * (1 + allocation_pct/100 * leveraged_roi_pct/100)
مقدار allocation_pct یک «فرض» است که درخواستکننده انتخاب میکند، نه عددی که از داده اندازهگیری شده باشد. هر معیاری که در فهرست sizing_dependent_metrics آمده با تغییر این مقدار تغییر میکند و مقدار بهکاررفته در توضیح روش خودِ همان معیار نوشته شده است. نرخ برد، ضریب سود، امید ریاضی و دفتر معاملات به این فرض وابسته نیستند.
چرا هیچ رقم دلاری منتشر نمیشود
positions.quantity، positions.pnl_usdt و positions.exit_price در هر ۱٬۴۹۵ ردیف جدول پوزیشنها صددرصد خالیاند. اندازهی پوزیشن هرگز ثبت نشده است، بنابراین سود مطلق به دلار از این مجموعهداده قابل محاسبه نیست و هرگز منتشر نمیشود.
متن اصلی و مرجع (انگلیسی)
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.
معیارهای ریسک
- profit_factor
- sum(positive ROI-points) / |sum(negative ROI-points)|
- expectancy
- mean leveraged ROI per trade
- max_drawdown
- peak-to-trough of the compounded equity curve, expressed in percent
- sharpe
- annualised on calendar-daily returns of the compounded curve, sqrt(365), risk-free rate 0, days with no closed trade count as 0%. Requires >= 30 days.
- calmar
- annualised compounded return / |max drawdown|. Requires >= 30 days of history.
- sizing_dependence
- profit_factor, expectancy and the win rate are properties of the trade record and do not move with any assumption. max_drawdown, sharpe and calmar are computed on the compounded curve and therefore DO move with allocation_pct, which the caller chooses. Every one of those envelopes restates the allocation_pct it used in its own method string and carries sizing_dependent=true.
محدودیتهای شناختهشده
این فهرست را پنهان نمیکنیم و کوتاهش نمیکنیم. هر مورد شناسه، شدت و توضیح فنی خودش را دارد.
L1 — هیچ رقم دلاری در پایگاه داده وجود ندارد بحرانی
positions.pnl_usdt، positions.exit_price، positions.quantity و positions.order_id در هر ۱٬۴۹۵ ردیف صددرصد خالیاند. اندازهی پوزیشن هرگز ثبت نشده، پس سود مطلق به دلار قابل محاسبه نیست. هیچ اندپوینتی در این بخش رقم دلاری برنمیگرداند و هر صفحهای که چنین رقمی نشان دهد اشتباه است.
متن اصلی و مرجع (انگلیسی)
positions.pnl_usdt, positions.exit_price, positions.quantity and positions.order_id are 100% NULL across all 1,495 rows. Position size was never recorded, so absolute profit in USDT is not computable. No endpoint on this surface returns a USDT figure, and any page that shows one is wrong.
L2 — قیمت خروج ثبتشده با ROI ثبتشده همخوانی ندارد زیاد
signal_quality_metrics.exit_price قیمت بازار در لحظهای است که شرط خروج تشخیص داده شده. در خروجهای حد ضرر، موتور عمداً بازده را روی یک پرشدن مدلشده در فاصلهی sl ± 0.10% ثبت میکند. اندازهگیری زنده روی همین مجموعهداده: این دو در ۷۵۹ مورد از ۱٬۰۸۳ معاملهای که هر دو مقدار را دارند بیش از ۰٫۵ واحد بازده اختلاف دارند و این اختلاف بهطور سیستماتیک به نفع سری مشاهدهشده است. بنابراین همهی تجمیعها فقط از بازده ثبتشده استفاده میکنند و قیمت خروج مشاهدهشده بهصورت تکمعامله همراه با پرچم همخوانی منتشر میشود.
متن اصلی و مرجع (انگلیسی)
signal_quality_metrics.exit_price is the market price observed when the exit condition was detected. On stop exits the engine deliberately books the ROI at a modelled fill of sl +/- 0.10% instead (app/trading/monitor.py, P7 2026-05-30). Measured live from the current dataset: the two disagree by more than 0.5 ROI-points on 759 of the 1,083 trades that have both, and the disagreement is systematically flattering to the observed series. Aggregates therefore use the recorded ROI only; the observed exit price is published per-trade with a reconciliation flag.
L3 — ROI ثبتشده، برداشتهای پلهای سود را لحاظ نمیکند زیاد
pnl_percent_on_close فقط پای آخر خروج را ثبت میکند. از ۳۰ ژوئیهی ۲۰۲۶ نردبان حد سود پوزیشنها را پلهپله میبندد. برای آن معاملهها، عدد ثبتشده نتیجهی واقعی را کمتر از آنچه هست نشان میدهد. مبنای blended آن را بازسازی میکند، اما مبنای پیشفرض recorded است — محافظهکارانهترین حالت، و همانی که در همان زمان در تلگرام اعلام شده بود. شمارش زنده: ۸۶ معامله از ۱٬۱۵۵ معاملهی بستهشدهی قابلارزیابی دستکم یک بستن پلهای ثبتشده دارند.
متن اصلی و مرجع (انگلیسی)
pnl_percent_on_close records only the final exit leg. Since 2026-07-30 the TP ladder closes positions in parts (partial_close_log). For those trades the recorded number UNDER-states the real result. basis=blended reconstructs sum(close_pct * roi_at_close) + (1 - sum(close_pct)) * recorded. The default basis is 'recorded' — the conservative one, and the one that matches what was announced on Telegram at the time. Live count: 86 of the 1,155 closed gradeable trades have at least one recorded partial fill.
L4 — ROI در بازههای زمانی مختلف قابل مقایسه نیست زیاد
فاصلهی حد ضرر در مرداد ۱۴۰۵ از حدود ۵ تا ۸ درصد به حدود ۱٫۲ تا ۱٫۵ درصد تنگ شد و میانگین اهرم از ۱۵٫۲ به ۱۱٫۸ افت کرد. یک معاملهی اردیبهشت و یک معاملهی مرداد با دو خطکش متفاوت اندازه گرفته شدهاند. میانگین اهرم به تفکیک ماه منتشر میشود تا این شکست دیده شود، نه پنهان بماند.
متن اصلی و مرجع (انگلیسی)
Stop distance was tightened from roughly 5-8% to roughly 1.2-1.5% during 2026-08 and average leverage fell from 15.2x to 11.8x. A May trade and an August trade are measured with different rulers. avg_leverage is published per month so the break is visible rather than hidden.
L5 — کارنامه سیگنال است، نه صورتحساب حسابرسیشده متوسط
اینها نتیجهی سیگنالهای منتشرشده است، آنطور که مانیتور خودمان ثبت کرده — نه صورتحساب حسابرسیشده. در این مجموعهداده هیچ شناسهی سفارش صرافی، هیچ پرشدن واقعی، هیچ کارمزد و هیچ هزینهی فاندینگ وجود ندارد و نتیجهی واقعی یک دنبالکننده متفاوت خواهد بود. آنچه واقعاً قابل راستیآزمایی است «انتشار» است: row_counts.trades_with_telegram_message را ببینید — هرکدام از آن معاملهها شناسهی پیامی را دارد که پیش از معلومشدن نتیجه آن را در کانال اعلام کرده است.
متن اصلی و مرجع (انگلیسی)
These are the outcomes of published signals as recorded by our own monitor. There is no exchange order id, no fill, no fee and no funding cost in the dataset. A follower's real result will differ. What IS verifiable is publication: see row_counts.trades_with_telegram_message — each of those trades carries the id of the message that announced it in the channel before the outcome was known.
L6 — زمانها بهصورت متن و در سه قالب متفاوت ذخیره شدهاند متوسط
همهی ستونهای زمانی این مجموعهداده متناند، نه timestamptz. اندازهگیری ۱۵ اوت ۲۰۲۶: positions.created_at (۱۴۹۵ از ۱۴۹۵)، activated_at (۱۳۸۲ از ۱۳۸۲) و closed_at (۱۴۹۴ از ۱۴۹۴) همیشه اختلاف ساعت صریح دارند. استثنا position_events.occurred_at است: ۱۴٬۹۳۵ ردیف از ۱۴٬۹۳۷ ردیف بدون منطقهی زمانی و به وقت تهراناند. خواندن آنها بهعنوان UTC کل گزارش رویدادها را ۳٫۵ ساعت جلو میبرد و صفحههایی میساخت که ورودشان بعد از خروج خودشان بود؛ این رفع شده و اکنون دقیقاً یک تابع تبدیل وجود دارد. هر چیزی که منتشر میشود UTC است و سطلهای ماهانه هم در UTC ساخته میشوند، پس مرز ماه تقویمی روی ۰۳:۳۰ تهران میافتد، نه نیمهشب.
متن اصلی و مرجع (انگلیسی)
Every timestamp column in this dataset is TEXT, not a timestamptz. Measured 2026-08-15: positions.created_at (1495/1495), activated_at (1382/1382) and closed_at (1494/1494) always carry an explicit UTC offset — '+03:30' from app.trading.utils.now_iso(), or '+00' on the 70 rows written by the 2026-05-30 admin bulk close. partial_close_log.executed_at (125/125) always carries '+03:30'. position_events.occurred_at is the exception: 14,935 of 14,937 rows are NAIVE and are Tehran local time, because db_positions.py writes them with now_sql_naive(). Reading those as UTC shifted the whole event log 3.5 hours forward and produced per-trade pages whose entry came after their own exit; that is fixed, and there is now exactly one conversion function. Everything published is UTC and month buckets are computed in UTC, so the calendar-month boundary sits at 03:30 Tehran, not midnight.
L7 — همپوشانی معاملات در منحنی سرمایه مدل نشده متوسط
منحنی مرکب، معاملهها را به ترتیب بستهشدن و پشتسرهم اعمال میکند. در واقعیت چند پوزیشن همزمان باز بودهاند، پس مسیر واقعی سرمایهی یک دنبالکننده متفاوت خواهد بود. این منحنی مدلی از توالی معاملههاست، نه بازسازی یک حساب.
متن اصلی و مرجع (انگلیسی)
The compounded curve applies trades sequentially in close order. In reality several positions were open at once, so the real path of a follower's equity would differ. The curve is a model of the trade sequence, not a reconstruction of an account.
L8 — گاهی رویداد پایانی چند ثانیه پس از بستهشدن ثبت شده است کم
ردیفهای position_events را حلقهی مانیتور بعد از آنکه positions.closed_at را ثبت کرده مینویسد، پس رویداد پایانی میتواند کمی پس از بستهشدن ثبت شود. اندازهگیری ۱۵ اوت ۲۰۲۶ روی کل جامعهی قابلارزیابی: هیچ رویدادی پیش از باز شدن پوزیشن نبوده، سه رویداد پس از بستهشدن بوده و هر سه در بازهی ۱۲۵ ثانیه (یک پوزیشن). آستانهی منتشرشده ۳۰۰ ثانیه است و صفحهی هر معامله بلوک سازگاری خط زمانی را نشان میدهد تا هر رویداد خارج از آستانه دیده شود، نه پنهان.
متن اصلی و مرجع (انگلیسی)
position_events rows are written by the monitor loop after it has already stamped positions.closed_at, so a closing event can trail the close slightly. Measured 2026-08-15 across the whole gradeable universe: 14,568 events, none before the position opened, three after it closed and all three within 125 seconds (one position, TYR-260520-IQZ3E1S0). The published allowance is 300 seconds; /trade/{code} ships a timeline_consistency block that lists any event outside it instead of hiding it.
L9 — دو اندپوینت ممکن است از دو عکس لحظهای متفاوت پاسخ دهند کم
همهی محاسبات از همین یک ماژول میآید، پس دو سطح مختلف سایت هرگز نمیتوانند «تعریفهای» متفاوتی به کار ببرند. عکس لحظهای اما فرق دارد: مجموعهی معاملات در هر پردازهی کارگر ۶۰ ثانیه کش میشود و API چند کارگر دارد، پس /summary و /ledger میتوانند از دو عکس لحظهای تا یک TTL فاصله پاسخ داده شوند. هر پاسخ provenance.data_loaded_at و provenance.cache_ttl_seconds را منتشر میکند تا این اختلاف همیشه از خود پاسخها قابل اندازهگیری باشد.
متن اصلی و مرجع (انگلیسی)
All arithmetic comes from this single module, so no two surfaces can ever apply different DEFINITIONS. The snapshot is a different matter: the trade set is cached per worker process for 60 seconds and the API runs several workers, so /summary and /ledger can be answered from snapshots up to one TTL apart and differ by whatever closed in between. Every payload publishes provenance.data_loaded_at and provenance.cache_ttl_seconds, so the skew is always measurable from the responses themselves; compare those two fields before comparing two numbers.
سیاست زمانها
هر زمانی که این ماژول منتشر میکند ISO-8601 و به وقت UTC است. ستونهای منبع از نوع متن و در قالبهای مختلطاند: positions.created_at / activated_at / closed_at و partial_close_log.executed_at همیشه اختلاف ساعت صریح دارند؛ position_events.occurred_at بدون منطقهی زمانی و به وقت محلی تهران نوشته میشود. بنابراین مقدار بدون منطقهی زمانی، «تهران» تفسیر و به UTC تبدیل میشود. دقیقاً یک تابع تبدیل وجود دارد، پس دو زمان در یک پاسخ نمیتوانند در دو منطقهی زمانی متفاوت باشند.
متن اصلی و مرجع (انگلیسی)
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.
شمارش ردیفها در همین لحظه
| شمارنده | مقدار |
|---|---|
| positions_table_rows | 1,495 |
| closed_gradeable_trades | 1,155 |
| excluded_housekeeping_rows | 339 |
| trades_with_telegram_message | 905 |
| trades_with_observed_exit_price | 1,083 |
| trades_with_nonreconciling_exit_price | 759 |
| trades_with_partial_fills | 86 |
| trades_without_recorded_leverage | 0 |
| tp_hit_events | 816 |
| distinct_symbols | 93 |
بازهی داده: – · ۹۳ نماد
همین دادهها بهصورت ماشینخوان
همهی این آدرسها عمومی و بدون احراز هویتاند. میتوانید هر عدد این سایت را خودتان بازتولید کنید.
- summary: /api/v1/public/performance/summary?window=7d|30d|90d|all
- equity: /api/v1/public/performance/equity?window=&basis=&allocation_pct=
- monthly: /api/v1/public/performance/monthly
- ledger: /api/v1/public/performance/ledger?limit=&offset=&symbol=&direction=&timeframe=&result=&from=&to=&sort=&order=
- ledger_csv: /api/v1/public/performance/ledger?format=csv
- trade: /api/v1/public/performance/trade/{unique_code}
- by_symbol: /api/v1/public/performance/by-symbol
- by_timeframe: /api/v1/public/performance/by-timeframe
- by_direction: /api/v1/public/performance/by-direction
- tp_ladder: /api/v1/public/performance/tp-ladder?window=
- execution_quality: /api/v1/public/performance/execution-quality?window=
- proof_of_publication: /api/v1/public/performance/proof-of-publication?window=
هر عدد این بخش را یک ماژول محاسبه میکند، بنابراین دو اندپوینت نمیتوانند تعریف متفاوتی از برد، بازه یا جامعهی آماری داشته باشند. «عکس لحظهای» داده داستان دیگری است: مجموعهی معاملات در هر پردازهی کارگر ۶۰ ثانیه کش میشود و API چند کارگر دارد، پس دو اندپوینت ممکن است از دو عکس لحظهای تا یک TTL فاصله پاسخ دهند و به اندازهی هرچه در این فاصله بسته شده تفاوت داشته باشند. پیش از مقایسهی دو عدد، provenance.data_loaded_at هر دو پاسخ را مقایسه کنید؛ این فیلد دقیقاً برای همین هست که این اختلاف قابل اندازهگیری باشد، نه قابل انکار.
متن اصلی و مرجع (انگلیسی)
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.