Bối cảnh chiến lược
Đầu năm nay, một tin đồn về việc ai đó kiếm được cả một căn nhà chỉ sau một đêm trên Polymarket đã lan truyền rộng rãi trong cộng đồng. Tò mò, tôi tìm kiếm khung giao dịch cụ thể, nhưng tất cả chỉ là tiêu đề câu view, không có một dòng code nào. Đành phải tự làm.
Ban đầu thực sự rất mơ hồ. Polymarket là nền tảng thị trường dự đoán phi tập trung lớn nhất hiện nay, với hơn 60.000 mã niêm yết, bao gồm hầu hết các sự kiện có thể dự đoán như chính trị, thể thao, kinh tế vĩ mô. Mỗi mã về bản chất là một hợp đồng quyền chọn nhị phân – nếu kết quả xảy ra, giá sẽ hội tụ về 1; nếu không, về 0. Nói đến kiếm lời nhất, tất nhiên là tin nội gián. Nhưng người thường không biết tuần sau Elon Musk đăng bao nhiêu tweet, không biết lần tới Fed có giảm lãi suất hay không, cũng không có thời gian và sức lực để theo dõi thị trường, phân tích diễn biến và đưa ra quyết định.
Vì vậy, tôi nghĩ, có thể đổi góc nhìn: không đuổi theo thông tin, mà đuổi theo dòng vốn. Người có lợi thế thông tin sẽ vào lệnh sớm, và hành động mua nhất định sẽ để lại dấu vết trên giá cả và khối lượng. Dù không biết "nội gián", vẫn có thể suy luận liệu có ai đó đang âm thầm xây dựng vị thế hay không bằng cách quan sát hành vi của dòng vốn. Theo hướng này, tôi xây dựng một hệ thống giao dịch phân tích thông minh đa vai trò, kết nối các công việc: tìm tín hiệu từ nến K, xác thực bằng dư luận, phán đoán bằng AI, và tự động đặt lệnh cùng quản lý rủi ro thành một quy trình hoàn chỉnh.
Kiến trúc hệ thống
Toàn bộ hệ thống chạy trên nền tảng Workflow của FMZ (Fazend), bao gồm hai luồng lập lịch song song: luồng chính và luồng phụ, hoàn toàn tách rời, không chặn nhau.
| Luồng lập lịch | Tần suất kích hoạt | Module phụ trách | Nhiệm vụ cốt lõi |
|---|---|---|---|
| Luồng chính giao dịch | Mỗi 10 phút | Sàng lọc mã → Xử lý vòng lặp → AI Agent → Thực thi lệnh | Tìm kiếm cơ hội, đặt lệnh mở vị thế |
| Luồng phụ giao dịch | Mỗi 30 giây | Chốt lời cắt lỗ | Giám sát vị thế, trailing stop, mua lại khi đáo hạn |
Luồng chính chịu trách nhiệm "tìm cơ hội, mở vị thế", mỗi lần thực hiện bao gồm bốn giai đoạn tuần tự: Sàng lọc sơ bộ → Phát hiện bất thường K-line → Tìm kiếm tin tức → Phân tích đa vai trò AI, cuối cùng đưa ra tín hiệu mua và thực hiện lệnh. Luồng phụ chỉ quản lý "vị thế hiện có", chạy liên tục với chu kỳ 30 giây, bất kể luồng chính có đang xử lý tác vụ hay không, luồng phụ sẽ không dừng.
Thiết kế tách biệt này giải quyết một vấn đề thực tế: Biến động giá trên thị trường dự đoán là liên tục, nhưng phân tích chọn mã là tác vụ nặng về tính toán và có độ trễ cao. Nếu nhét giám sát cắt lỗ vào luồng chính, khi gặp phân tích AI chậm, phản ứng cắt lỗ sẽ bị trễ nghiêm trọng. Lập lịch độc lập là một sự đánh đổi kỹ thuật cần thiết.
Chi tiết các module
Sàng lọc sơ bộ: Loại bỏ các mã rác trước
Không thể phân tích lần lượt 60.000 mã, vì vậy bước đầu tiên là sàng lọc thuần túy dựa trên quy tắc, với một mục đích duy nhất: nhanh chóng loại bỏ các loại rõ ràng không đáng xem, dành tài nguyên tính toán cho các mã thực sự có giá trị.
Các điều kiện sàng lọc bao gồm: Ngưỡng dưới thanh khoản (quá thấp đồng nghĩa khó mua bán), ngưỡng dưới khối lượng giao dịch 24 giờ (mã gần như không giao dịch thiếu giá trị tham khảo), ngưỡng trên chênh lệch giá mua-bán (chênh lệch quá lớn đồng nghĩa chi phí trượt giá cao), ngưỡng trên mức độ cạnh tranh, và phạm vi giá – chỉ tập trung vào các mã có xác suất ngụ ý của thị trường nằm trong khoảng 5% – 50%. Mã quá cao đã được định giá đầy đủ, không gian tăng hạn chế; mã quá thấp độ tin cậy đáng ngờ, gần giống xổ số hơn là cơ hội chênh lệch giá.
Sau khi vượt qua sàng lọc, cùng một sự kiện thường có hai hướng Yes và No cùng niêm yết, chiến lược chỉ giữ hướng có giá thấp hơn, vì độ co giãn tỷ lệ cược ở đầu giá thấp lớn hơn, tiềm năng lợi nhuận cao hơn.
javascript
let truePrice = parseFloat(outcomePrices[outcomeIndex] || 0)
if (truePrice < CONFIG.MIN_TRUE_PRICE || truePrice > CONFIG.MAX_TRUE_PRICE) continue
let isActive = (
info.active === true && info.approved === true &&
info.closed === false && info.archived === false &&
info.acceptingOrders === true && info.pendingDeployment === false
)
if (!isActive) continue
let spreadPct = (ask - bid) / ask
if (spreadPct > CONFIG.MAX_SPREAD_PCT) continue
// Cùng một sự kiện chỉ giữ hướng có giá thấp hơn
if (!marketMap[baseSymbol]) {
marketMap[baseSymbol] = entry
} else if (truePrice < marketMap[baseSymbol].price) {
marketMap[baseSymbol] = entry
}
Tất cả các ngưỡng sàng lọc đều được hiển thị dưới dạng tham số bên ngoài qua biến $vars, có thể tự do điều chỉnh theo khẩu vị rủi ro và quy mô vốn của bạn mà không cần sửa code.
Phát hiện bất thường K-line: Tìm dấu vết của dòng vốn
Sau khi sàng lọc thô, đối với mỗi mã vượt qua, kéo 240 nến K gần nhất ở khung 60 phút và chạy năm loại phát hiện bất thường. Đây là lớp tín hiệu cốt lõi của chiến lược, cũng là điểm khác biệt căn bản nhất giữa toàn bộ hệ thống và việc "ném trực tiếp sự kiện cho AI phân tích" – chúng tôi không đoán kết quả sự kiện, chúng tôi tìm hành vi của dòng vốn.
Leo dốc chậm: Tổng mức tăng của 120 nến K gần nhất vượt quá 5%, nhưng mức tăng tối đa của một nến đơn lẻ dưới 1,5%. Đặc điểm này mô tả tư thế xây dựng vị thế cố tình kìm hãm nhịp độ, tránh thu hút sự chú ý của dòng vốn.
Tăng trưởng tuyến tính khối lượng: Thực hiện hồi quy tuyến tính trên chuỗi khối lượng của 60 nến gần nhất, độ dốc dương và R² lớn hơn 0,5, cho thấy khối lượng đang tăng liên tục và ổn định, không phải xung ngẫu nhiên. R² là yếu tố then chốt, nó lọc ra các trường hợp nhiễu "một nến khối lượng đột biến, còn lại yên tĩnh".
Thu hẹp pullback: Thống kê độ sâu tối đa của mỗi lần pullback sau đỉnh lịch sử, nếu mức pullback trung bình gần đây thấp hơn 60% so với giai đoạn đầu, điều đó cho thấy áp lực bán đang giảm, cổ phiếu đang ổn định hơn, có người đang hấp thụ. Trong mỗi lần pullback, theo dõi liên tục giá thấp nhất để lấy biên độ pullback hoàn chỉnh làm cơ sở tính toán.
Breakout đi ngang: Độ lệch MA60 và MA120 dưới 2% (trạng thái đi ngang), trong khi giá hiện tại đã vượt quá MA60 3%, được đánh giá là phá vỡ vùng kháng cự trước đó.
Đột biến khối lượng: Khối lượng trung bình 5 nến gần nhất vượt quá 2,5 lần khối lượng cơ sở 60 nến trước đó, được đánh giá là dòng vốn đang tăng tốc gia nhập.
javascript
function linearRegression(values) {
let n = values.length
let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0
for (let i = 0; i < n; i++) {
sumX += i; sumY += values[i]
sumXY += i * values[i]; sumX2 += i * i
}
let slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX)
let intercept = (sumY - slope * sumX) / n
let meanY = sumY / n
let ssTot = 0, ssRes = 0
for (let i = 0; i < n; i++) {
ssTot += Math.pow(values[i] - meanY, 2)
ssRes += Math.pow(values[i] - (slope * i + intercept), 2)
}
let r2 = ssTot === 0 ? 0 : 1 - ssRes / ssTot
return { slope, intercept, r2 }
}
function detectAnomaly(closes, volumes) {
if (closes.length < 60) return null
let anomalies = [], score = 0
let slice120 = closes.slice(-Math.min(120, closes.length))
// ── Dị thường 1: Tăng chậm ──────────────────────────────────────
let totalChange = (slice120[slice120.length - 1] - slice120[0]) / slice120[0]
let maxSingle = 0
for (let i = 1; i < slice120.length; i++) {
let change = Math.abs(slice120[i] - slice120[i - 1]) / slice120[i - 1]
if (change > maxSingle) maxSingle = change
}
if (totalChange > 0.05 && maxSingle < 0.015) {
score++
anomalies.push(`Tăng chậm Tổng tăng${(totalChange * 100).toFixed(1)}% Cây đơn lớn nhất${(maxSingle * 100).toFixed(2)}%`)
}
// ── Dị thường 2: Khối lượng giao dịch tăng tuyến tính ─────────────────────────────────
let volSlice = volumes.slice(-60)
let volReg = linearRegression(volSlice)
if (volReg.slope > 0 && volReg.r2 > 0.5) {
score++
anomalies.push(`Khối lượng giao dịch tăng tuyến tính Độ dốc${volReg.slope.toFixed(4)} R²${volReg.r2.toFixed(2)}`)
}
// ── Dị thường 3: Điều chỉnh thu hẹp (theo dõi giá thấp nhất mỗi lần điều chỉnh, tính độ sâu hoàn chỉnh)────
let pullbacks = [], localHigh = closes[0]
let inPullback = false, pullbackLow = closes[0]
for (let i = 1; i < slice120.length; i++) {
if (closes[i] > localHigh) {
if (inPullback) {
pullbacks.push((localHigh - pullbackLow) / localHigh)
inPullback = false
}
localHigh = closes[i]
} else if (closes[i] < localHigh * 0.99) {
if (!inPullback) { inPullback = true; pullbackLow = closes[i] }
else if (closes[i] < pullbackLow) { pullbackLow = closes[i] }
}
}
if (pullbacks.length >= 3) {
let first = pullbacks.slice(0, Math.floor(pullbacks.length / 2))
let last = pullbacks.slice(Math.floor(pullbacks.length / 2))
let firstAvg = first.reduce((a, b) => a + b, 0) / first.length
let lastAvg = last.reduce((a, b) => a + b, 0) / last.length
if (lastAvg < firstAvg * 0.6) {
score++
anomalies.push(`Điều chỉnh thu hẹp Giai đoạn đầu${(firstAvg * 100).toFixed(2)}% Gần đây${(lastAvg * 100).toFixed(2)}%`)
}
}
// ── Dị thường 4: Bứt phá khỏi vùng tích lũy ───────────────────────────────────────
let ma60 = closes.slice(-60).reduce((a, b) => a + b, 0) / 60
let ma120 = closes.length >= 120
? closes.slice(-120).reduce((a, b) => a + b, 0) / 120
: ma60
let currentPrice = closes[closes.length - 1]
if (Math.abs(ma60 - ma120) / ma120 < 0.02 && currentPrice > ma60 * 1.03) {
score++
anomalies.push(`Bứt phá khỏi vùng tích lũy MA60=${ma60.toFixed(3)} MA120=${ma120.toFixed(3)} Hiện tại=${currentPrice.toFixed(3)}`)
}
// ── Dị thường 5: Khối lượng đột biến ─────────────────────────────────────
let recentVol = volumes.slice(-5).reduce((a, b) => a + b, 0) / 5
let baseVol = volumes.slice(-65, -5).reduce((a, b) => a + b, 0) / 60
if (baseVol > 0 && recentVol > baseVol * 2.5) {
score++
anomalies.push(`Khối lượng đột biến Khối lượng trung bình 5 cây gần nhất gấp ${(recentVol / baseVol).toFixed(1)} lần cơ sở`)
}
return { score, anomalies }
}
Mỗi lần trúng một dạng dị thường được cộng một điểm, tối đa 5 điểm, chỉ khi tổng điểm từ 2 trở lên mới vào giai đoạn tiếp theo. Một tín hiệu đơn lẻ có thể là nhiễu ngẫu nhiên, chỉ khi chồng lấp mới cho thấy hành vi của dòng tiền có độ tin cậy nhất định – đây là giả thuyết cốt lõi của toàn bộ logic phát hiện nến K.
Tìm kiếm tin tức: Tìm lời giải thích cơ bản cho dị thường
Tín hiệu nến K là bằng chứng cho thấy "có dòng tiền đang vận động", nhưng tại sao dòng tiền lại vận động và sự vận động đó có cơ sở hay không cần được xác minh bằng thông tin cơ bản. Bước này là để tìm kiếm tin tức cho từng mục tiêu có dị thường nến K, xem có sự kiện nào hỗ trợ tương ứng hay không.
Ở đây sử dụng API Brave Search, cung cấp 2000 lượt miễn phí mỗi tháng, về cơ bản đủ dùng cho nhịp điệu chủ đề mỗi 10 phút một vòng. Từ khóa tìm kiếm được trích xuất từ symbol, loại bỏ hậu tố hướng và dấu phân cách sau đó khôi phục lại thành các từ mô tả sự kiện có thể đọc được.
javascript
const q = item.symbol
.replace("_USDC.No", "")
.replace("_USDC.Yes", "")
.replace(/-/g, "+")
const rawResponse = HttpQuery(
"https://api.search.brave.com/res/v1/web/search?q=" + q,
{ method: "GET", headers: { "X-Subscription-Token": CONFIG.BRAVE_API_KEY } }
)
// Duyệt qua tất cả các section trả về (web, news,...), trích xuất thống nhất các trường có cấu trúc
Object.keys(data).forEach(key => {
const section = data[key]
if (section && section.results && Array.isArray(section.results)) {
section.results.forEach(r => {
news.push({ type: key, title: r.title, description: r.description, age: r.age })
})
}
})
Tin tức tìm được sẽ được đóng gói cùng với dữ liệu nến, chuyển sang bước phân tích AI tiếp theo – hai luồng thông tin cùng được xác thực, đáng tin cậy hơn nhiều so với chỉ nhìn một phía.
Phân tích AI đa vai trò: Bốn góc nhìn, ngăn tự thuyết phục
Sau khi dữ liệu sẵn sàng, bước vào node phân tích AI, mô hình sẽ lựa chọn dựa trên nhu cầu riêng. Prompt định nghĩa bốn vai trò độc lập, đây là quyết định thiết kế cốt lõi nhất của toàn bộ hệ thống, đáng để giải thích riêng.
Nếu để một AI xem đồng thời nến và tin tức, nó rất dễ tự xác nhận lẫn nhau giữa hai nguồn, đưa ra kết luận có vẻ hợp lý nhưng thực tế thiếu xác thực độc lập – dùng tín hiệu vốn để bảo chứng cho tin tức, lại dùng tin tức để bảo chứng cho tín hiệu vốn, cuối cùng cho ra kết quả 'tôi nghĩ có thể mua' kiểu tự củng cố. Cô lập vai trò buộc các nguồn thông tin phải độc lập: mỗi vai trò chỉ nhìn dữ liệu của mình, chỉ đưa ra kết luận từ chiều hướng của mình, vai trò ra quyết định cuối cùng chỉ nhìn kết luận, không nhìn quá trình.
Vai trò một: Chuyên gia phân tích vốn dựa trên nến, không xem tin tức, chỉ nhìn bất thường về giá và khối lượng, đánh giá liệu có dòng vốn thực sự đang mua vào liên tục không, đưa ra cường độ tín hiệu vốn (Mạnh/Trung bình/Cơ sở).
Vai trò hai: Chuyên gia phân tích dư luận tin tức, không xem nến, chỉ đánh giá mặt thông tin, xác định xem có sự kiện tích cực nào chưa được thị trường định giá hay không, đưa ra mức độ hỗ trợ tin tức (Mạnh/Yếu/Không).
Vai trò ba: Chuyên gia phân tích định giá, tổng hợp kết luận của hai vai trò trước, ước tính khoảng xác suất thực tế của sự kiện, so sánh với giá thị trường hiện tại, đưa ra đánh giá Định giá thấp/Hợp lý/Định giá cao. Vai trò này có quy tắc trọng số thời gian đáo hạn: hơn 7 ngày ước tính bình thường; dưới 3 ngày và giá thị trường trên 0.15, buộc phải thu hẹp khoảng xác suất, cấm đưa ra 'định giá thấp nghiêm trọng'. Lý do trực tiếp – gần đến ngày đáo hạn, những người tham gia thị trường nắm giữ thông tin thời gian thực đầy đủ hơn dữ liệu huấn luyện của AI, lúc này nhận định của AI nên nhường chỗ cho giá thị trường.
Vai trò bốn: Chuyên gia quyết định cuối cùng, tổng hợp kết luận của ba vai trò trước theo ma trận quyết định, đưa ra hành động cuối cùng. Logic ma trận: tín hiệu vốn là tiên quyết, tin tức là xác thực, cả hai cùng quyết định mức độ tin cậy; nhưng dù mức độ tin cậy cao đến đâu, miễn là định giá chưa đạt mức 'định giá thấp', đều không thực hiện giao dịch.
Xác thực bằng tin tức ở đây không phải là đuổi theo thông tin, mà là để đánh giá xem hành vi dòng vốn đã có nền tảng cơ bản hay chưa. Khi dòng vốn nội gián xây dựng vị thế, thông tin sẽ không xuất hiện trên tin tức công khai, nhưng tín hiệu vốn kết hợp với hỗ trợ tin tức cho thấy thông tin đang ở giai đoạn giữa quá trình lan tỏa, thị trường vẫn còn độ trễ định giá – đây mới là khoảng thời gian chiến lược thực sự muốn nắm bắt.
| Tín hiệu vốn \ Hỗ trợ tin tức | Xác thực mạnh | Xác thực yếu | Không xác thực |
|---|---|---|---|
| Mạnh (score 4~5) | Mua, confidence=Cao | Mua, confidence=Trung bình | Không giao dịch |
| Trung bình (score 3) | Mua, confidence=Trung bình | Chờ xem | Không giao dịch |
| Cơ sở (score 2) | Chờ xem | Không giao dịch | Không giao dịch |
Định dạng đầu ra của AI là JSON nghiêm ngặt, bao gồm kết luận từng vai trò, khoảng xác suất thực tế, định giá, quyết định cuối cùng, mức độ tin cậy và danh sách rủi ro, sẵn sàng cho node thực thi tiếp theo tiêu thụ.
Thực thi giao dịch: Chỉ mua cái tốt nhất
Sau khi AI chấm điểm từng mục trong mỗi lô, lớp thực thi sẽ không đặt lệnh tất cả các tín hiệu mua – hệ thống chỉ chọn mục có điểm cao nhất. Thứ tự sắp xếp lần lượt là: Mức độ tin cậy (Cao > Trung bình > Thấp) → Định giá (Định giá thấp nghiêm trọng > Định giá thấp) → Độ rộng khoảng xác suất thực tế (càng hẹp càng chắc chắn).
javascript
const buySignals = signals.filter(s => s.signal === 'buy')
bestSignal = buySignals.sort((a, b) => {
const confDiff = (confidenceRank[b.confidence] || 0) - (confidenceRank[a.confidence] || 0)
if (confDiff !== 0) return confDiff
const assessDiff = (assessmentRank[b.priceAssessment] || 0) - (assessmentRank[a.priceAssessment] || 0)
if (assessDiff !== 0) return assessDiff
// Khoảng càng hẹp càng chắc chắn, ưu tiên chọn hẹp
const aWidth = (a.trueProb.max || 0) - (a.trueProb.min || 0)
const bWidth = (b.trueProb.max || 0) - (b.trueProb.min || 0)
return aWidth - bWidth
})[0]
Sau khi chọn được mục tiêu, lấy giá Ask real-time từ sổ lệnh, xác nhận số dư đủ, đặt lệnh giới hạn. Sau khi lệnh được gửi, thăm dò trạng thái, chờ tối đa 30 giây, quá thời gian thì hủy lệnh, đảm bảo không tồn đọng lệnh chờ. Nếu giá Ask của lượt đó nhân với khối lượng cấu hình thấp hơn ngưỡng đặt lệnh tối thiểu 1 USDC, hệ thống sẽ tự động làm tròn lên đến khối lượng khả thi tối thiểu bằng ceil(1/askPrice).
Module dừng lỗ: Dừng lỗ động + Bảo vệ tuyệt đối
Luồng phụ thực thi mỗi 30 giây, logic chia làm hai bước: trước tiên xử lý đáo hạn, sau đó kiểm tra dừng lỗ động cho các vị thế đang mở.
Polymarket có một cơ chế đặc biệt – sau khi hợp đồng đáo hạn, tiền không tự động về tài khoản, cần chủ động gọi redeem. Chiến lược ở đầu mỗi lượt luồng phụ sẽ quét một lượt các vị thế có thể mua lại, giải phóng vốn hàng loạt, tránh vốn bị khóa dài hạn.
Cốt lõi của dừng lỗ động là thiết kế đường dừng lỗ kép: Đường dừng lỗ động (giá bid cao nhất lịch sử - mức giảm cố định LOSS_AMOUNT) và Đường bảo vệ tuyệt đối (giá vào lệnh × 50%), giá dừng lỗ thực tế lấy giá trị lớn hơn.
javascript
function calcStopPrice(entryPrice, maxPrice) {
const trailingStopPrice = maxPrice - CONFIG.LOSS_AMOUNT
const absoluteStopPrice = entryPrice * CONFIG.FALLBACK_STOP_RATIO // Cố định 0.50
const usingFallback = trailingStopPrice < absoluteStopPrice
const effectiveStopPrice = usingFallback ? absoluteStopPrice : trailingStopPrice
return { effectiveStopPrice, trailingStopPrice, absoluteStopPrice, usingFallback }
}
Thiết kế kép này tương ứng với hai kịch bản giữ vị thế điển hình: Giai đoạn có lãi, đường dừng lỗ động di chuyển lên theo giá, khóa lợi nhuận nổi; khi vào lệnh đã thua lỗ, đường dừng lỗ động có thể xuống mức âm hoặc gần 0, lúc này đường bảo vệ tuyệt đối (giá vào × 50%) sẽ tiếp quản, ngăn vị thế giảm đến 0 mới thoát. Hai đường mỗi đường một nhiệm vụ, thiếu một không được.
Sau khi kích hoạt dừng lỗ, gọi bán thị trường, xóa bộ nhớ đệm giá cao nhất lịch sử của mục đó, chờ tín hiệu mở vị thế tiếp theo. Bảng điều khiển hiển thị thời gian thực khoảng cách từ mỗi vị thế đến đường dừng lỗ, phân biệt mức độ cảnh báo bằng màu sắc, thuận tiện cho việc kiểm tra thủ công.
Các quyết định thiết kế quan trọng
Tại sao dùng đa vai trò, thay vì một Prompt tổng hợp? Vấn đề này đã được đề cập một phần trong module phân tích, nhưng đáng để nói rõ hơn. Vấn đề của Prompt đơn lẻ không chỉ là 'tự thuyết phục', mà còn một rủi ro tinh vi hơn: Khi AI đồng thời xử lý dữ liệu nến và văn bản tin tức, nó có xu hướng dùng cái sau để giải thích cái trước, 'hợp lý hóa' sự bất thường của nến thành phản ánh tất yếu của tin tức, thay vì coi cả hai là tín hiệu độc lập để đánh giá riêng. Bản chất của việc cô lập vai trò là buộc đưa vào hai chuỗi thông tin độc lập, khi tổng hợp cuối cùng nếu cả hai chuỗi đều chỉ về cùng một hướng, độ tin cậy mới là thực sự.
Tại sao mỗi lượt chỉ mua một cái tốt nhất, thay vì phân tán danh mục? Phân tán danh mục trong tài chính truyền thống có nền tảng lý thuyết vững chắc, nhưng trong thị trường dự đoán, logic không hoàn toàn áp dụng được. Kết quả của các mục trên thị trường dự đoán là nhị phân, rủi ro về 0 là có thật. Nếu đồng thời nắm giữ ba mục có độ tin cậy trung bình, hai trong số đó về 0 và một tăng, tổng thể chưa chắc đã hòa vốn. Lựa chọn của chiến lược hiện tại là: thà tập trung đặt cược vào độ chính xác, còn hơn dùng số lượng để pha loãng các tín hiệu chất lượng không đồng đều. Sự đánh đổi này không nhất thiết là tối ưu, nhưng logic là nhất quán.
Tại sao quy tắc trọng số thời gian đáo hạn phải là ràng buộc cứng? Gần đến ngày đáo hạn, giá thị trường phản ánh kỳ vọng thời gian thực của những người tham gia, và một tỷ lệ lớn trong số họ nắm giữ thông tin mới hơn dữ liệu huấn luyện của AI. Nếu lúc này AI vẫn đưa ra 'giá định giá thấp nghiêm trọng, nên mua', rất có thể thông tin của nó đã lỗi thời. Làm quy tắc này thành ràng buộc thay vì khuyến nghị, là vì dựa vào AI để tự nhận ra 'thông tin của tôi không còn mới nữa' là không thực tế, cần có sự can thiệp cưỡng chế từ bên ngoài.
Quan sát thực tế
Từ hồ sơ hoạt động thực tế, tỷ lệ funnel (kênh chuyển đổi) của chiến lược khá dốc. Trong một lần chạy, có 141 mục tiêu vượt qua sàng lọc sơ bộ, sau khi phát hiện bất thường nến K chỉ còn 3 mục tiêu, và cuối cùng chỉ có 1 mục tiêu thỏa mãn đồng thời cả ba yếu tố: tín hiệu vốn, hỗ trợ tin tức và đánh giá giá để kích hoạt lệnh giao dịch. Hai mục tiêu còn lại bị bỏ qua do đánh giá giá "hợp lý" và điểm tổng hợp không đủ. Điều này cho thấy chiến lược nhìn chung khá thận trọng, thà không vào lệnh còn hơn hạ thấp tiêu chuẩn. Trong giai đoạn thị trường ổn định, không có sự kiện rõ ràng trên diễn biến dư luận, hệ thống có thể không tạo ra bất kỳ tín hiệu mua nào trong cả ngày. Đây là định hướng thiết kế, không phải lỗi. Cũng từng gặp trường hợp bất thường nến K nhưng sau đó được chứng minh là phá vỡ giả, vốn vào lệnh ngắn hạn rồi rút ra, lệnh dừng lỗ di động can thiệp thoát lệnh. Phân tích tin tức cũng tồn tại nhiễu, bản thân các báo cáo về sự kiện liên quan có thể bị chậm trễ hoặc lệch lạc, chỉ dựa vào AI không thể nhận diện hoàn toàn.
Bảng điều khiển hiển thị theo thời gian thực vốn chủ sở hữu tài khoản, trạng thái vị thế (Bid/Ask hiện tại, giá cao nhất, khoảng cách drawdown đến đường dừng lỗ, chế độ dừng lỗ) và chi tiết quyết định AI, thuận tiện cho việc kiểm tra thủ công.
Kết luận
Thành thật mà nói, hệ thống này giống một khung ý tưởng có thể chạy được hơn là một cỗ máy in tiền sẵn sàng sử dụng. Logic cốt lõi – truy nguồn hành vi vốn, xác minh hai chiều dư luận, phán đoán AI đa vai trò – có tính hợp lý nhất định về mặt ý tưởng, nhưng trên thị trường thực tế, chất lượng tín hiệu không đồng đều, phán đoán của AI cũng có thể sai, và rủi ro hội tụ giá gần ngày đáo hạn luôn tồn tại.
Có nhiều khía cạnh có thể cải thiện: đối tượng giao dịch có thể tập trung hơn vào lĩnh vực quen thuộc, lời nhắc AI có thể thiết kế lại theo phong cách giao dịch cá nhân, trọng số và ngưỡng của năm loại bất thường nến K đều có dư địa tinh chỉnh, và hệ số dừng lỗ cũng đáng để lặp lại dựa trên hiệu suất vị thế thực tế. Toàn bộ mã nguồn đều được mở, hoan nghênh sửa đổi.
Cảnh báo rủi ro
Các đối tượng thị trường dự đoán có đặc điểm kết quả nhị phân, vị thế tồn tại rủi ro về không. Tín hiệu bất thường nến K và kết luận phân tích AI đều không cấu thành lời khuyên đầu tư, hiệu suất tín hiệu quá khứ không đại diện cho lợi nhuận tương lai. Chiến lược chưa được xác thực thực tế dài hạn, cài đặt tham số ảnh hưởng đáng kể đến kết quả. Trước khi sử dụng chiến lược này để giao dịch thực tế, hãy hiểu rõ quy tắc nền tảng Polymarket, cơ chế đáo hạn hợp đồng và rủi ro thanh khoản, đồng thời tự đánh giá khả năng chịu đựng mất vốn.
Mã nguồn chiến lược: Polymarket 多角色智能分析交易策略
- 1




