Lịch sử giao dịch AI có thể kiểm chứng không?
Bạn có thể kiểm tra lịch sử giao dịch AI bằng sáu bằng chứng: lệnh ghi trước kết quả, benchmark, thời điểm và chi phí, để tránh tin vào một quý đẹp mắt.
Một lịch sử giao dịch bằng AI có thể kiểm chứng khi một người ngoài cuộc có thể dựng lại lịch sử đó từ các hồ sơ đã tồn tại trước khi kết quả xuất hiện. Rất ít nội dung được công bố trên mạng đáp ứng tiêu chuẩn này. Dưới đây là checklist bạn có thể dùng trong khoảng hai phút, với dữ liệu thị trường cho bốn mục: benchmark, mốc thời gian, chi phí giao dịch và độ dài mẫu.
Điều gì khiến lịch sử giao dịch bằng AI có thể kiểm chứng?
Sáu đặc điểm. Mỗi đặc điểm đều có thể được kiểm tra, thay vì phụ thuộc vào nhận định chủ quan.
- Các lệnh vào vị thế được công bố trước khi biết kết quả. Mốc thời gian phải nằm ở nơi tác giả không thể sửa lại, chẳng hạn một commit được đẩy lên đúng thời điểm hoặc sao kê từ broker. Một tệp liệt kê các giao dịch trong quá khứ chỉ là lời khẳng định về quá khứ, không phải hồ sơ ghi nhận quá khứ.
- Một benchmark được nêu ngay từ đầu và không bao giờ thay đổi. “Đánh bại thị trường” không có ý nghĩa cho đến khi phép so sánh được gắn với một quỹ cụ thể trong một khoảng thời gian cụ thể.
- Chi phí được tính trong các con số đã báo cáo. Bao gồm hoa hồng, phí quản lý, phí theo quy định, chi phí vay đối với vị thế short và spread phải trả khi vào lẫn thoát vị thế.
- Runbook được quản lý theo phiên bản thay vì chỉnh sửa tùy ý. Khi một repository công khai làm cơ sở cho hồ sơ, liên kết hữu ích phải trỏ đến một bản phát hành đã gắn thẻ hoặc một commit hash. Liên kết đến nhánh mặc định chỉ cho thấy chiến lược hiện tại, có thể không phải chiến lược đã giao dịch trong tháng Ba.
- Mọi vị thế và mọi tài khoản đều được công bố, bao gồm cả các vị thế thua lỗ. Công bố một tài khoản trong số năm tài khoản đang vận hành là một hình thức lựa chọn.
- Vốn khởi điểm đủ lớn để các mức khớp lệnh có tính khả thi. Vài trăm USD giá trị danh nghĩa có thể “nắm giữ” các vị thế mà không có lệnh thực tế nào có thể khớp tại mức giá được in ra.
Một hồ sơ thiếu một trong các yếu tố này không mặc định là gian dối. Hồ sơ đó không thể kiểm chứng. Trường hợp này phổ biến hơn và cũng vô ích không kém đối với người đọc.
Vì sao phải xác định benchmark trước?
Chọn benchmark sau khi đã có kết quả là lợi thế rẻ nhất trên thị trường tài chính. Sáu quỹ chỉ số Mỹ diện rộng, cùng một giai đoạn sáu tháng trong năm 2026, chỉ tính biến động giá:
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCIWM đạt mức sinh lời 21.12%, còn DIA đạt 8.42%, tạo ra khoảng cách 12.7 điểm giữa mức cao nhất và thấp nhất trong 6 qua cùng một khoảng thời gian. Việc chọn quỹ để đối chiếu sau khi giai đoạn đã kết thúc có giá trị đúng bằng toàn bộ khoảng cách đó, trong khi chiến lược không cần làm gì để đạt được lợi thế này. Đây là mức sinh lời theo giá trước cổ tức. Đây cũng là một quy tắc đo lường cần được nêu từ đầu (cách đo lường lợi nhuận hằng tháng trình bày phần tính toán total return).
Vì sao mốc thời gian vào vị thế là toàn bộ cơ sở của tuyên bố?
Một lệnh vào vị thế xuất hiện sau khi giá đã biến động chỉ là mô tả về một biểu đồ. Khoảng đường thị trường đi được trong một phiên đủ lớn để chênh lệch giữa “được đăng lúc 09:35” và “được đăng lúc 15:55” lấn át phần lớn lợi thế được tuyên bố. Dưới đây là khoảng cách đó, đo từ print đầu tiên của mỗi phiên, trong nửa đầu năm 2026:
Câu lệnh SQL chính xác đằng sau mỗi con số
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_timeTrong nhóm 09:30 theo ET, khoảng cách trung vị giữa kết quả cuối phiên và mức giá mở cửa là 0.216%. Trong nhóm 15:30, khoảng cách trung vị là 0.415%. Bất kỳ thông tin nào một agent biết được tại thời điểm mở cửa đều không bao gồm gần như toàn bộ quãng biến động đó. Lịch sử commit hoặc một nguồn dữ liệu công khai có ngày giờ là bằng chứng về thứ tự thời gian (các báo cáo nghiên cứu thị trường hằng ngày bằng AI cũng phụ thuộc vào yếu tố này). Ảnh chụp đường cong vốn không cung cấp bằng chứng đó.
Các con số phải bao gồm những gì?
Lợi nhuận gộp mô tả một danh mục mà không ai có thể thực sự nắm giữ. Mỗi lần vào và thoát vị thế đều phải vượt qua bid-ask spread, tức khoảng cách giữa mức giá tốt nhất để mua và mức giá tốt nhất để bán. Khoảng cách này không giống nhau đối với mọi mã:
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCTrong một giờ giữa phiên đó, spread được báo giá trung vị là 10.08 điểm cơ bản đối với MSTR, so với 0.27 đối với SPY. Một điểm cơ bản bằng một phần trăm của một điểm phần trăm. Với vị thế $25,000, việc vượt qua spread một lần theo mỗi chiều sẽ tốn $25.2 ở đầu có spread rộng trong danh sách này và $0.66 ở đầu có spread hẹp, chưa tính hoa hồng. Một danh mục được xoay vòng hoàn toàn một lần mỗi tuần phải trả chi phí này khoảng năm mươi lần mỗi năm. Hồ sơ không tính khoản này đã âm thầm cộng số tiền đó vào kết quả của mình (chi phí giao dịch một cổ phiếu phân tích các khoản còn lại).
Cần bao lâu trước khi kết quả giao dịch thực tế có ý nghĩa?
Một quý giao dịch thực tế chỉ là một lần rút mẫu từ một phân phối rộng, và độ rộng đó có thể đo lường. Với SPY, quỹ lớn nhất mô phỏng S&P 500, mọi cửa sổ chồng lấn có cùng độ dài kể từ tháng 1/2015 được sắp xếp theo phân vị:
Câu lệnh SQL chính xác đằng sau mỗi con số
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 sessionsTrong 2826 cửa sổ ba tháng chồng lấn, kết quả trung vị của việc chỉ nắm giữ và không làm gì là 3.9%. Phân vị thứ 5 là -8.8% và phân vị thứ 95 là 12.2%, tạo thành một biên độ rộng 21.1 điểm. Bất kỳ kết quả quý nào nằm trong biên độ này đều phù hợp với việc sở hữu chỉ số rồi đi nghỉ. Khởi chạy hai mươi agent, vận hành trong một quý và công bố agent tốt nhất sẽ tạo ra một con số nằm ở đầu một biên độ như vậy theo đúng cơ chế lựa chọn.
Phép tính về độ dài mẫu không khoan nhượng. Kết quả trong mười hai tháng của cùng chuỗi dữ liệu có độ lệch chuẩn 13.6 điểm. Để phân biệt lợi thế thực với nhiễu, cần khoảng (2 × mức biến động ÷ lợi thế)² năm kết quả giao dịch thực tế. Với mức biến động đó, một lợi thế giả định ba điểm mỗi năm cần nhiều thập kỷ, còn lợi thế mười điểm vẫn cần nhiều năm thay vì vài tháng. Các cửa sổ ở trên chồng lấn, vì vậy 2826 là số cửa sổ, không phải số mẫu độc lập.
$25,000 tiền thật có giải quyết được vấn đề không?
Tiền thật cải thiện chất lượng bằng chứng theo một cách cụ thể. Giao dịch mô phỏng được khớp tại các mức giá mà không có đối tác nào chấp nhận và lệnh cũng không bao giờ bị từ chối. Một tài khoản $25,000 có vốn thực được khớp với báo giá trực tiếp và chịu hoa hồng thực tế. Các giao dịch xuất hiện trên sao kê mà bên thứ ba có thể kiểm toán. Quy mô vị thế cũng đủ lớn để các mức khớp lệnh là thông thường, thay vì chỉ tồn tại trên lý thuyết.
Điều đó không giải quyết vấn đề về mẫu. Giao dịch $25,000 trong bốn tháng vẫn chỉ là một lần rút mẫu từ phân phối ở trên. Một tài khoản thực tế cũng có thể bị đóng sau một đợt drawdown rồi mở lại, với hồ sơ bắt đầu từ đầu. Quy mô khiến các mức khớp lệnh trở nên đáng tin. Chỉ có thời gian mới khiến kết quả có ý nghĩa.
Bốn dạng sai lệch cần nhận diện
- Backtest khoác lên mình bộ dạng của một lịch sử giao dịch. Kết quả mô phỏng trên dữ liệu quá khứ là giả thuyết về quá khứ. Sai lệch nhìn trước dữ liệu cho thấy một mô phỏng có thể hấp thụ thông tin mà chiến lược không thể biết tại thời điểm đó. Dấu hiệu rõ nhất là đường cong vốn bắt đầu nhiều năm trước khi mã nguồn được viết.
- Chỉ công bố agent sống sót. Mười agent được khởi chạy nhưng chỉ một agent được công bố. Các hệ thống giao dịch AI đa agent khiến điều này dễ xảy ra ngoài ý muốn, vì framework vận hành mười biến thể cũng đồng thời chọn ra biến thể đáng được viết về.
- Khởi động lại hồ sơ. Một đợt drawdown, một khoảng dừng, một tài khoản mới và một đường cong bắt đầu từ ngày khởi động lại. Câu hỏi có thể giải quyết vấn đề là: hãy cho thấy đường cong vốn từ đồng USD đầu tiên của tài khoản đầu tiên.
- Runbook bị viết lại. Prompt và giới hạn vị thế được chỉnh sửa giữa thời điểm giao dịch và thời điểm viết báo cáo. Các yếu tố alpha do LLM tạo ra có thể được tạo ra hàng nghìn biến thể. Vì vậy, quy tắc lựa chọn phải được công bố trước khi lựa chọn diễn ra. Nếu không, hồ sơ sẽ trở thành câu chuyện về những yếu tố tình cờ hoạt động hiệu quả.
FAQ
Lịch sử giao dịch bằng AI có thể được kiểm chứng không?
Có, nếu các lệnh vào vị thế được công bố trước khi biết kết quả, benchmark được cố định từ đầu, chi phí được tính trong các con số và mọi tài khoản đều được công bố. Việc kiểm tra mang tính cơ học và chỉ mất vài phút. Phần lớn hồ sơ được công bố thất bại ngay ở tiêu chí đầu tiên.
Lịch sử giao dịch AI thực tế phải kéo dài bao lâu?
Dài hơn gần như mọi hồ sơ được công bố hiện nay. Kết quả mười hai tháng của chỉ số có độ lệch chuẩn 13.6 điểm trong các cửa sổ được đo ở đây. Vì vậy, để tách một lợi thế vừa phải khỏi may mắn với mức độ tin cậy thông thường, tối thiểu cần nhiều năm và một lợi thế nhỏ có thể cần nhiều thập kỷ.
$25,000 có đủ để khiến kết quả của một danh mục AI có ý nghĩa không?
Số tiền này đủ để các mức khớp lệnh là thực tế: báo giá trực tiếp, hoa hồng thực tế và sao kê có thể kiểm toán. Nhưng số tiền này không đủ để khiến kết quả của vài tháng có ý nghĩa thống kê. Đây là vấn đề về thời gian trôi qua, không phải quy mô tài khoản.
Backtest khác lịch sử giao dịch như thế nào?
Backtest áp dụng các quy tắc vào dữ liệu đã tồn tại. Lịch sử giao dịch là chuỗi quyết định được công bố trước khi biết kết quả. Chỉ loại thứ hai mới có thể bị bác bỏ bởi những gì xảy ra tiếp theo. Đây là yếu tố khiến nó trở thành bằng chứng.
Vì sao lựa chọn benchmark lại quan trọng đến vậy?
Trong nửa đầu năm 2026, sáu quỹ chỉ số ở trên kết thúc cách nhau 12.7 điểm nếu chỉ tính biến động giá. Một benchmark được chọn sau khi giai đoạn kết thúc có thể cung cấp toàn bộ biên lợi nhuận đó mà không cần chiến lược làm gì.
Mọi con số trên trang này đều là kết quả của một stored query chạy trên dữ liệu thị trường, và câu lệnh SQL nằm bên dưới từng panel. Bạn có thể áp dụng cùng các cửa sổ đó cho những ngày mình chọn trên terminal Strasmore.