Strasmore Research
آموزش Matt Connorتوسط Matt Connor

چگونه سابقه معاملاتی AI را راستی‌آزمایی کنیم؟

شش مدرک برای سنجش سابقه معاملاتی عمومی AI، از زمان‌مهر و معیار مقایسه تا هزینه معاملات و طول نمونه؛ یک فصل سودآور به‌تنهایی چیزی را ثابت نمی‌کند.

سابقه معاملاتی یک سامانه AI زمانی قابل‌راستی‌آزمایی است که فردی بی‌طرف بتواند آن را از روی سوابقی بازسازی کند که پیش از وقوع نتایج وجود داشته‌اند. بسیار اندک از مطالب منتشرشده آنلاین این معیار را برآورده می‌کنند. چک‌لیست زیر را می‌توان در حدود دو دقیقه بررسی کرد و چهار مورد آن با داده‌های بازار پشتیبانی می‌شود: معیار مقایسه، زمان‌مهرها، هزینه‌های معامله و طول نمونه.

چه چیزی سابقه معاملاتی AI را قابل‌راستی‌آزمایی می‌کند؟

شش ویژگی. هرکدام چیزی است که می‌توان آن را بررسی کرد، نه موضوعی برای قضاوت شخصی.

  1. ورودی‌ها پیش از مشخص‌شدن نتیجه منتشر شده باشند. زمان‌مهر باید در محلی ثبت شده باشد که نویسنده نتواند آن را بازنویسی کند؛ مانند commit ارسال‌شده در همان زمان یا صورت‌حساب کارگزار. فایلی که معاملات گذشته را فهرست می‌کند، ادعایی درباره گذشته است، نه سابقه‌ای از آن.
  2. یک معیار مقایسه که از ابتدا مشخص شده و هرگز تغییر نکرده باشد. عبارت «بازار را شکست» تا زمانی که مقایسه به یک صندوق مشخص در یک بازه مشخص محدود نشود، معنایی ندارد.
  3. هزینه‌ها داخل ارقام گزارش‌شده باشند. کمیسیون، کارمزدهای نظارتی، هزینه استقراض موقعیت‌های فروش استقراضی و spread پرداخت‌شده هنگام ورود و خروج.
  4. راهنمای اجرایی نسخه‌بندی شده باشد، نه ویرایش‌شده. اگر یک مخزن عمومی پشتوانه سابقه است، پیوند مفید باید به یک نسخه برچسب‌گذاری‌شده یا hash یک commit اشاره کند. پیوند به شاخه پیش‌فرض، استراتژی امروز را نشان می‌دهد؛ این استراتژی ممکن است همان استراتژی معامله‌شده در ماه مارس نباشد.
  5. همه موقعیت‌ها و همه حساب‌ها، از جمله زیان‌ده‌ها، نمایش داده شوند. انتشار سابقه یک حساب از میان پنج حساب فعال، نوعی انتخاب‌گری است.
  6. سرمایه اولیه برای اجرای سفارش‌ها به‌اندازه کافی بزرگ باشد. ارزش اسمی چندصد دلاری ممکن است بتواند موقعیت‌هایی را «نگهداری» کند که هیچ سفارش واقعی با قیمت درج‌شده در آن‌ها اجرا نمی‌شد.

نبودن یکی از این موارد، به‌طور پیش‌فرض به معنای نادرست‌بودن سابقه نیست. اما آن سابقه قابل‌راستی‌آزمایی نیست؛ وضعیتی که رایج‌تر است و برای خواننده به همان اندازه بی‌فایده محسوب می‌شود.

چرا معیار مقایسه باید از پیش مشخص شود؟

انتخاب معیار مقایسه پس از مشخص‌شدن نتایج، ارزان‌ترین مزیت در بازارهای مالی است. بازده قیمتی شش صندوق شاخص گسترده آمریکا در شش ماه یکسان از سال 2026:

پرس‌وجوانتخاب معیار: بازده قیمتی شش صندوق شاخصی آمریکا، بازه زمانی یکسان: ۲ ژانویه تا ۳۰ ژوئن ۲۰۲۶
کد دقیق SQL پشت هر عدد
WITH rets AS (
    SELECT ticker,
           round(100 * (toFloat64(argMax(close, window_start))
                        / toFloat64(argMin(close, window_start)) - 1), 2) AS return_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'DIA', 'RSP', 'MDY')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker
)
SELECT ticker,
       return_pct,
       round(return_pct - min(return_pct) OVER (), 2) AS points_above_worst
FROM rets
ORDER BY return_pct DESC
Run this yourself

IWM بازدهی 21.12% داشت و DIA به 8.42% رسید؛ در نتیجه، میان بالاترین و پایین‌ترین عملکرد در 6 طی بازه‌ای یکسان، 12.7 واحد اختلاف ایجاد شد. انتخاب صندوقی که پس از پایان بازه باید با آن مقایسه شود، به‌اندازه کل این فاصله ارزش دارد و هیچ استراتژی‌ای برای به‌دست‌آوردن آن لازم نیست. این ارقام بازدهی قیمتی پیش از سود سهام هستند؛ بنابراین باید قاعده اندازه‌گیری دوم نیز از ابتدا مشخص شود (نحوه اندازه‌گیری بازدهی‌های ماهانه محاسبات بازدهی کل را توضیح می‌دهد).

چرا زمان‌مهر ورود، اصل کل ادعاست؟

ورودی که پس از حرکت بازار ظاهر شود، توصیفی از نمودار است. فاصله‌ای که بازار در یک جلسه طی می‌کند آن‌قدر زیاد است که تفاوت میان «انتشار در ساعت 09:35» و «انتشار در ساعت 15:55» بیشتر مزیت‌های ادعاشده را تحت‌الشعاع قرار می‌دهد. این فاصله، که از نخستین معامله هر جلسه اندازه‌گیری شده، در نیمه نخست سال 2026 چنین بوده است:

پرس‌وجوحرکت SPY از قیمت آغازین، به تفکیک نیم‌ساعت به وقت شرق آمریکا (ET)، نیمه نخست ۲۰۲۶
کد دقیق SQL پشت هر عدد
WITH minute_px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toTimeZone(window_start, 'America/New_York') AS et,
           toFloat64(close) AS px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
),
opens AS (
    SELECT session_date, argMin(px, et) AS open_px
    FROM minute_px
    GROUP BY session_date
),
buckets AS (
    SELECT session_date,
           toStartOfInterval(et, INTERVAL 30 MINUTE) AS bucket,
           argMax(px, et) AS bucket_px
    FROM minute_px
    GROUP BY session_date, bucket
)
SELECT formatDateTime(b.bucket, '%H:%i') AS et_time,
       count() AS session_count,
       round(quantileDeterministic(0.5)(abs(100 * (b.bucket_px / o.open_px - 1)),
                                        cityHash64(b.session_date)), 3) AS median_abs_move_pct
FROM buckets AS b
INNER JOIN opens AS o ON b.session_date = o.session_date
GROUP BY et_time
ORDER BY et_time
Run this yourself

در بازه 09:30 به وقت ET، میانه فاصله پایان جلسه از نخستین قیمت معامله 0.216% بود. در بازه 15:30، این فاصله میانه به 0.415% رسید. هر اطلاعاتی که یک عامل در زمان گشایش در اختیار داشته باشد، تقریباً تمام این مسیر را حذف می‌کند. سابقه commitها یا یک خوراک عمومی تاریخ‌دار، ترتیب زمانی را اثبات می‌کند (گزارش‌های روزانه تحقیقات بازار AI نیز به همین ویژگی وابسته‌اند). تصویر صفحه‌نمایش از منحنی ارزش سهام چنین اثباتی ارائه نمی‌دهد.

چه چیزهایی باید داخل ارقام باشد؟

بازدهی ناخالص، عملکرد سبدی را توصیف می‌کند که هیچ‌کس نمی‌توانسته واقعاً نگهداری کند. هر ورود و خروج از bid-ask spread عبور می‌کند؛ یعنی فاصله میان بهترین قیمت خرید و بهترین قیمت فروش. این فاصله در همه نمادها یکسان نیست:

پرس‌وجومیانگین میانه فاصله مظنه و هزینه رفت‌وبرگشت معامله ۲۵٬۰۰۰ دلاری: ساعت میانی روز، ۱۵ ژوئیه ۲۰۲۶
کد دقیق SQL پشت هر عدد
SELECT ticker,
       round(quantileDeterministic(0.5)(20000 * (toFloat64(ask_price) - toFloat64(bid_price))
                                        / (toFloat64(ask_price) + toFloat64(bid_price)),
                                        cityHash64(sip_timestamp)), 2) AS median_spread_bps,
       round(25000 * quantileDeterministic(0.5)(2 * (toFloat64(ask_price) - toFloat64(bid_price))
                                                / (toFloat64(ask_price) + toFloat64(bid_price)),
                                                cityHash64(sip_timestamp)), 2) AS round_trip_cost_per_25k_usd
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'MSTR')
  AND sip_timestamp >= toDateTime('2026-07-15 15:00:00')
  AND sip_timestamp < toDateTime('2026-07-15 16:00:00')
  AND bid_price > 1
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps DESC
Run this yourself

در همان یک ساعت میانی روز، میانه spread اعلام‌شده برای MSTR برابر با 10.08 واحد پایه بود، در حالی که برای SPY به 0.27 می‌رسید. هر واحد پایه یک‌صدم واحد درصد است. در موقعیتی به ارزش 25٬000 دلار، عبور از spread در هر دو جهت، پیش از کمیسیون، در انتهای پرهزینه این فهرست $25.2 و در انتهای کم‌هزینه آن $0.66 هزینه دارد. سبدی که هفته‌ای یک‌بار به‌طور کامل گردش کند، تقریباً پنجاه بار در سال این هزینه را می‌پردازد؛ سابقه‌ای که آن را حذف کند، این مبالغ را بی‌سروصدا به حساب خود منظور کرده است (هزینه معامله سهام سایر اجزای این صورت‌حساب را بررسی می‌کند).

چه مدت باید بگذرد تا نتایج معاملات واقعی معنا پیدا کند؟

یک فصل معامله واقعی، تنها یک برداشت از توزیعی گسترده است و گستره آن قابل‌اندازه‌گیری است. همه پنجره‌های هم‌پوشان با طول مشخص از ژانویه 2015 برای SPY، بزرگ‌ترین صندوق دنبال‌کننده S&P 500، بر اساس صدک مرتب شده‌اند:

پرس‌وجونتایج دوره نگهداری SPY از سال ۲۰۱۵: صدک پنجم، میانه، صدک ۹۵
کد دقیق SQL پشت هر عدد
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toFloat64(argMax(close, window_start)) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session_date
),
series AS (
    SELECT groupArray(close_px) AS px
    FROM (SELECT close_px FROM daily ORDER BY session_date)
),
horizons AS (
    SELECT arrayJoin([21, 63, 126, 252]) AS sessions, px
    FROM series
),
windows AS (
    SELECT sessions,
           arrayJoin(arrayMap(i -> (i, 100 * (px[i + sessions] / px[i] - 1)),
                              range(1, length(px) - sessions + 1))) AS w
    FROM horizons
),
measured AS (
    SELECT sessions,
           w.1 AS window_index,
           w.2 AS window_return_pct
    FROM windows
)
SELECT multiIf(sessions = 21, '1 month',
               sessions = 63, '3 months',
               sessions = 126, '6 months',
               '12 months') AS holding_period,
       count() AS window_count,
       round(quantileDeterministic(0.05)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS p05_return_pct,
       round(quantileDeterministic(0.50)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS median_return_pct,
       round(quantileDeterministic(0.95)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS p95_return_pct,
       round(quantileDeterministic(0.95)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions))
             - quantileDeterministic(0.05)(window_return_pct,
                                           cityHash64(window_index * 1000 + sessions)), 1) AS spread_pct,
       round(stddevSamp(window_return_pct), 1) AS stdev_pct
FROM measured
GROUP BY sessions
ORDER BY sessions
Run this yourself

در میان 2826 پنجره سه‌ماهه هم‌پوشان، میانه نتیجه نگهداری دارایی و انجام‌ندادن هیچ معامله‌ای 3.9% بود؛ صدک پنجم -8.8% و صدک 95 برابر با 12.2% بود. این دامنه 21.1 واحد وسعت داشت. هر نتیجه فصلی منفرد در این دامنه با مالکیت شاخص و رفتن به تعطیلات سازگار است. اگر بیست عامل را راه‌اندازی کنید، آن‌ها را یک فصل اجرا کنید و بهترین عملکرد را منتشر کنید، عدد نمایش‌داده‌شده ذاتاً از بالای چنین دامنه‌ای انتخاب شده است.

محاسبه طول نمونه سخت‌گیرانه است. نتایج 12ماهه در همین سری زمانی، انحراف معیار 13.6 واحد را نشان می‌دهد. تشخیص یک مزیت واقعی از نویز، تقریباً به (2 × تغییرپذیری ÷ مزیت)² سال نتیجه معاملات واقعی نیاز دارد. با این سطح از تغییرپذیری، یک مزیت فرضی سه‌واحدی در سال به چند دهه زمان نیاز دارد و حتی مزیت 10واحدی نیز به سال‌ها، نه ماه‌ها، زمان نیازمند است. پنجره‌های بالا هم‌پوشان‌اند؛ بنابراین 2826 تعداد پنجره‌هاست، نه تعداد نمونه‌های مستقل.

آیا 25٬000 دلار پول واقعی موضوع را حل می‌کند؟

پول واقعی از یک جهت مشخص، شواهد را تقویت می‌کند. معامله کاغذی با قیمت‌هایی اجرا می‌شود که هیچ طرف مقابلی با آن‌ها موافقت نکرده است و هیچ سفارشی نیز رد نمی‌شود. حساب تأمین‌شده 25٬000 دلاری در برابر مظنه‌های زنده معامله می‌کند و کمیسیون واقعی می‌پردازد. این معاملات در صورت‌حساب‌هایی ثبت می‌شوند که شخص ثالث می‌تواند آن‌ها را حسابرسی کند و اندازه موقعیت‌ها به‌اندازه‌ای هست که اجرای سفارش‌ها عادی باشد، نه خیالی.

اما مشکل نمونه را حل نمی‌کند. معامله با 25٬000 دلار به مدت چهار ماه همچنان فقط یک برداشت از توزیع بالا است. همچنین ممکن است حساب واقعی پس از افت سرمایه بسته و با سابقه‌ای تازه دوباره افتتاح شود. اندازه حساب، واقعی‌بودن اجرای سفارش‌ها را نشان می‌دهد. تنها گذشت زمان است که نتایج را معنادار می‌کند.

چهار خطای رایج که باید شناخت

  • آزمونی گذشته‌نگر با ظاهر سابقه معاملاتی. نتایج شبیه‌سازی‌شده بر اساس داده‌های گذشته، فرضیه‌هایی درباره گذشته‌اند. سوگیری نگاه به آینده نشان می‌دهد که یک شبیه‌سازی چگونه اطلاعاتی را جذب می‌کند که استراتژی در آن زمان نمی‌توانسته در اختیار داشته باشد. ساده‌ترین نشانه نیز منحنی ارزشی است که سال‌ها پیش از نوشته‌شدن کد آغاز شده باشد.
  • تنها بازمانده روی صحنه. ده عامل راه‌اندازی شده‌اند، اما فقط یکی منتشر می‌شود. سامانه‌های معاملاتی چندعاملی AI به‌طور تصادفی انجام این کار را آسان می‌کنند؛ زیرا همان چارچوبی که ده نسخه را اجرا می‌کند، نسخه‌ای را که ارزش نوشتن دارد نیز انتخاب می‌کند.
  • راه‌اندازی دوباره. افت سرمایه، توقف، افتتاح حسابی تازه و منحنی‌ای که از تاریخ شروع دوباره آغاز می‌شود. پرسش تعیین‌کننده این است: منحنی ارزش را از نخستین دلار حساب اول نشان دهید.
  • راهنمای اجرایی بازنویسی‌شده. دستورها و محدودیت‌های موقعیت میان زمان معامله و زمان نگارش گزارش ویرایش شده‌اند. عوامل آلفای تولیدشده با LLM را می‌توان به هزاران شکل تولید کرد؛ بنابراین قاعده انتخاب باید پیش از انتخاب منتشر شود. در غیر این صورت، سابقه به داستانی درباره عواملی تبدیل می‌شود که اتفاقاً عملکرد خوبی داشته‌اند.

پرسش‌های متداول

آیا سابقه معاملاتی AI قابل‌راستی‌آزمایی است؟

بله؛ مشروط بر اینکه ورودی‌ها پیش از مشخص‌شدن نتایج منتشر شده باشند، معیار مقایسه از ابتدا ثابت شده باشد، هزینه‌ها داخل ارقام قرار گرفته باشند و همه حساب‌ها نمایش داده شوند. بررسی آن مکانیکی است و چند دقیقه زمان می‌برد. بیشتر سوابق منتشرشده در همان مورد اول شکست می‌خورند.

سابقه معاملات واقعی AI باید چه مدت ادامه داشته باشد؟

طولانی‌تر از تقریباً هر سابقه منتشرشده. نتایج 12ماهه شاخص در پنجره‌های بررسی‌شده، انحراف معیار 13.6 واحد داشتند. بنابراین تفکیک یک مزیت متوسط از شانس، با سطح اطمینان متعارف، دست‌کم به چند سال و برای مزیت‌های کوچک به چند دهه زمان نیاز دارد.

آیا 25٬000 دلار برای معنادارشدن نتایج یک سبد AI کافی است؟

این مبلغ برای واقعی‌کردن اجرای سفارش‌ها کافی است: مظنه‌های زنده، کمیسیون واقعی و صورت‌حساب‌های قابل‌حسابرسی. اما برای معنادارشدن آماری نتایج چند ماه کافی نیست؛ این موضوع به مدت زمان سپری‌شده مربوط است، نه اندازه حساب.

تفاوت آزمون گذشته‌نگر و سابقه معاملاتی چیست؟

آزمون گذشته‌نگر، قواعد را روی داده‌هایی اعمال می‌کند که از قبل وجود دارند. سابقه معاملاتی، مجموعه‌ای از تصمیم‌هایی است که پیش از مشخص‌شدن نتایج آن‌ها منتشر شده‌اند. فقط مورد دوم را می‌توان با رخدادهای بعدی رد کرد و همین ویژگی آن را به شواهد تبدیل می‌کند.

چرا انتخاب معیار مقایسه تا این حد اهمیت دارد؟

در نیمه نخست سال 2026، این شش صندوق شاخص در بازدهی قیمتی، بدون احتساب سود سهام، 12.7 واحد با یکدیگر فاصله داشتند. معیاری که پس از پایان بازه انتخاب شود، می‌تواند کل این فاصله را بدون دخالت هیچ استراتژی‌ای ایجاد کند.


هر عدد در این صفحه از یک stored query روی داده‌های بازار به دست آمده است و SQL آن زیر هر پنل قرار دارد. همین پنجره‌ها را برای تاریخ‌های مدنظر خود در پایانه Strasmore اجرا کنید.

#ai agents#track record#live trading#backtesting#quant