Type/to search
2
Follow
484
Followers
Chiến lược định lượng lọc đường trung bình động: Một thực hành định lượng dựa trên tư tưởng của Harness Engineer
Discussions
Created 2026-04-17 11:55:34  Updated 2026-04-21 09:00:18
 0
 374

img

Giới thiệu: Tư duy Harness Engineer

Gần đây, trong cộng đồng kỹ thuật AI/ML, một cách tư duy ngày càng được thảo luận rộng rãi – Harness Engineer.

Ý tưởng cốt lõi của nó rất đơn giản:

Thay vì tự mình nghĩ ra câu trả lời, hãy dựng một khung (framework), để dữ liệu và thí nghiệm tự tìm ra câu trả lời.

Cách làm của kỹ sư truyền thống: Tôi cho rằng tham số A là tốt, tôi viết code để thực hiện A. Cách làm của Harness Engineer: Tôi không biết A, B, C cái nào tốt, tôi dựng một khung để A, B, C cùng chạy, dữ liệu sẽ cho tôi câu trả lời.

Kỹ sư chịu trách nhiệm định nghĩa không gian tìm kiếmtiêu chí đánh giá, hệ thống chịu trách nhiệm tự động tối ưu trong không gian đó. Tư duy này trong ML tương ứng với walk-forward optimization, AutoML; trong giao dịch định lượng, nó cũng có những tình huống ứng dụng tự nhiên.

img

Coin yêu quái (Yêu Coin): Chiến trường xu hướng rõ ràng nhất

Trong thị trường hợp đồng tiền mã hóa, có một loại coin đáng được quan tâm đặc biệt – những "coin yêu quái" có khối lượng giao dịch cực lớn.

Loại coin này có một số đặc điểm chung:

  • Vốn tập trung cao, hành vi của tổ chức lớn (main force) rõ ràng
  • Tính tiếp diễn của xu hướng tương đối mạnh, một khi đã khởi động thường kéo dài khá lâu
  • Biến động cao, một số coin có khối lượng giao dịch lớn trong những giai đoạn nhất định thể hiện xu hướng mạnh, chiến lược đường trung bình (MA) trên các coin này trong backtest lịch sử cho thấy hiệu suất tương đối tốt

Chính vì vậy, sử dụng chiến lược giao cắt hai đường MA cổ điển trên các coin này là một điểm vào hợp lý và đơn giản. Đường nhanh cắt lên đường chậm, xu hướng bắt đầu, theo dõi; đường nhanh cắt xuống đường chậm, xu hướng đảo chiều, thoát ra. Logic đơn giản, nhưng trên các coin có xu hướng rõ ràng, hiệu suất lịch sử thường không tệ.

Chỉ có một vấn đề: Coin nào là yêu quái? Dùng bộ tham số MA nào?

Hai vấn đề này, nếu dựa vào đánh giá thủ công, sẽ mang tính chủ quan quá cao, đổi người khác có thể đưa ra kết quả hoàn toàn khác. Và thị trường là động, coin yêu quái hôm nay chưa chắc là coin yêu quái ngày mai, bộ tham số hiệu quả hôm nay cũng có thể mất hiệu quả vào ngày mai.

Đây chính là lúc tư duy Harness Engineer lên ngôi.

Thay vì chọn coin thủ công và điều chỉnh tham số thủ công, hãy giao cả hai vấn đề này cho framework giải quyết – định nghĩa tiêu chí đánh giá, để dữ liệu lịch sử tự chạy ra câu trả lời trong không gian ứng cử. Con người chỉ cần quyết định dùng tiêu chuẩn nào để đo lường tốt xấu, phần còn lại giao cho hệ thống.

Dựa trên ý tưởng này, toàn bộ chiến lược được thiết kế thành một khung sàng lọc luân phiên (rolling screening framework), hoạt động ở ba tầng.

img

Kiến trúc chiến lược: Hai lớp cơ chế đua ngựa

Tầng 1: Xây dựng tập coin ứng cử

Từ toàn bộ các hợp đồng giao dịch trên thị trường, lấy top 150 coin theo thứ tự giảm dần khối lượng giao dịch USD làm tập ứng cử.

Tại sao lại chọn khối lượng giao dịch? Vì nơi có khối lượng giao dịch lớn, vốn tập trung nhất, xu hướng dễ hình thành nhất, và coin yêu quái cũng tập trung nhất. Bước này không có phán đoán chủ quan, hoàn toàn để thị trường bỏ phiếu bằng vốn, coin nào có khối lượng giao dịch lớn thì vào tập.

javascript
const filtered = tickers .filter(t => t.Symbol.endsWith('USDT.swap')) .map(t => ({ symbol: t.Symbol, quoteVolume: t.Last * t.Volume })) .sort((a, b) => b.quoteVolume - a.quoteVolume) .slice(0, topN) .map(t => t.symbol);

Logic rất trực tiếp: lọc các hợp đồng USDT, tính khối lượng giao dịch USD, sắp xếp giảm dần, lấy N cái đầu tiên. Không có bất kỳ phán đoán chủ quan nào, thị trường tự bỏ phiếu bằng vốn.

Tầng 2: Hai lớp đua ngựa chọn lọc

Đây là phần cốt lõi nhất của toàn bộ chiến lược, cũng là nơi tư duy Harness thể hiện rõ nhất.

Thứ tự thực hiện đúng là như sau:

img

⚠️ Lưu ý: sử dụng điểm số của tham số tối ưu để đại diện cho năng lực của coin, bản thân nó tiềm ẩn một số rủi ro overfit – tham số hoạt động tốt nhất trong lịch sử, chưa chắc hiệu quả tương tự trong tương lai. Hạn chế này sẽ được thảo luận thêm ở phần sau của bài viết.

Quá trình backtest

Đối với mỗi coin trong tập ứng cử, đồng thời chạy nhiều bộ tham số MA, mỗi bộ tham số chạy độc lập trên nến lịch sử, mô phỏng logic vào lệnh/thoát lệnh theo giao cắt thực tế:

javascript
// Duyệt từng coin × từng bộ tham số for (const params of maParamsList) { const bt = backtest_MA(records, params.fast, params.slow); // Mỗi lần backtest độc lập cho ra: tỷ lệ thắng, tỷ lệ lợi nhuận/rủi ro, drawdown tối đa, số lần tín hiệu }

Logic cốt lõi của mỗi lần backtest là giao cắt hai đường MA tiêu chuẩn:

javascript
const crossUp = fastMA[i-1] <= slowMA[i-1] && fastMA[i] > slowMA[i]; const crossDown = fastMA[i-1] >= slowMA[i-1] && fastMA[i] < slowMA[i]; if (crossUp) position = { side: 'long', entryPrice: records[i].Close }; if (crossDown) position = { side: 'short', entryPrice: records[i].Close };

Tính điểm tổng hợp

Sau khi backtest hoàn tất, tính điểm tổng hợp cho kết quả backtest của mỗi bộ tham số. Điểm số gồm hai phần:

Điểm trọng số chuẩn hóa (hệ số tổng cộng 0.80):

javascript
const score = Math.min(bt.winRate * 100, 100) * 0.30 // Tỷ lệ thắng, giới hạn trên 100 + Math.min(bt.profitFactor * 20, 60) * 0.30 // Tỷ lệ lợi nhuận/rủi ro, giới hạn trên 60 + Math.max(0, 1 - bt.maxDrawdown / maxMDD) * 100 * 0.20 // Kiểm soát drawdown tối đa + volPct * volPctBonus // Thưởng phân vị biến động

Thưởng phân vị biến động: Mục cuối volPct × volPctBonus (hệ số mặc định là 10) là mục thưởng độc lập bên ngoài hệ thống trọng số, dùng để trong điều kiện điểm số tương đương, ưu tiên chọn coin có biến động hiện tại ở phân vị lịch sử cao – vì loại coin này thường có xu hướng hoạt động mạnh hơn.

Cần nói rõ, bộ trọng số và hệ số thưởng này đều là thiết lập kinh nghiệm, không phải từ tối ưu hóa, trong thực tế sử dụng có thể điều chỉnh thêm tùy theo môi trường thị trường.

Lớp cạnh tranh thứ nhất: Cạnh tranh tham số

Nhiều bộ tham số của cùng một coin tự tính điểm, lấy bộ có điểm cao nhất làm điểm đại diện và tham số tối ưu của coin đó:

javascript
if (score > bestScore) { bestScore = score; bestResult = bt; bestParams = params; // Ghi lại bộ tham số có hiệu suất lịch sử tốt nhất }

Lớp cạnh tranh thứ hai: Cạnh tranh coin

Tất cả các coin đưa ra điểm tối ưu của riêng mình, sắp xếp và lấy Top N vào danh sách trắng:

javascript
results.sort((a, b) => b.score - a.score); const whitelist = results.slice(0, topCoins).map(r => r.coin);

Kết quả cuối cùng là mỗi coin trong danh sách trắng có bộ tham số MA tối ưu riêng, chứ không dùng một bộ tham số cho tất cả.

Tầng 3: Thực thi và quản lý rủi ro thực tế

Sử dụng cấu hình đã sàng lọc để giao dịch thực tế, đồng thời kết hợp nhiều lớp cơ chế quản lý rủi ro:

Kích hoạt tín hiệu: Phát hiện trạng thái giao cắt MA của các coin trong danh sách trắng theo thời gian thực, golden cross mua lên, death cross bán xuống:

javascript
const crossUp = fastPrev <= slowPrev && fastCur > slowCur; const crossDown = fastPrev >= slowPrev && fastCur < slowCur; if (crossUp) longList.push(sym); if (crossDown && allowShort) shortList.push(sym);

Trailing stop chốt lời động: Khi lợi nhuận thả nổi đạt ngưỡng kích hoạt thì khởi động, và ngưỡng pullback sẽ thắt chặt dần khi lợi nhuận thả nổi tăng. Ba ngưỡng là thiết lập kinh nghiệm, logic cốt lõi là lợi nhuận thả nổi càng cao, mức chịu đựng pullback càng nhỏ, để khóa lợi nhuận đã có:

javascript
function getDynamicTrailDrawdown(maxPnl) { if (maxPnl >= 7) return 3; // Lợi nhuận thả nổi cao, thắt chặt khả năng chịu pullback if (maxPnl >= 4) return 2; return 1.5; // Lợi nhuận thả nổi thấp, cho thị trường thêm không gian }

Nhận biết trạng thái thị trường: Phát hiện phân vị biến động của BTC, môi trường biến động cao tự động giảm hệ số vị thế, thị trường cực đoan trực tiếp cấm bán khống:

javascript
if (marketState === 'volatile') positionScaleDown = 0.5; else if (marketState === 'high_vol') positionScaleDown = 0.8; else if (marketState === 'low_vol') positionScaleDown = 0.7;

Toàn bộ quy trình sàng lọc được chạy lại luân phiên định kỳ, không cố định một bộ cấu hình nào, cập nhật danh sách trắng và tham số động theo thị trường.


Giả định nền tảng: Tính tiếp diễn của xu hướng

Framework này có thể hoạt động được, dựa vào một giả định cốt lõi:

Các coin và tham số hoạt động tốt trong lịch sử gần đây, có khả năng tiếp diễn nhất định trong ngắn hạn tiếp theo.

Đây không phải là mê tín, phía sau có sự hỗ trợ logic thị trường nhất định — quán tính dòng tiền, sự kéo dài của tâm lý thị trường, tính liên tục trong hành vi của các nhà đầu tư lớn, tất cả đều khiến xu hướng duy trì hiệu quả trong một khung thời gian nhất định.

Nhưng cần phải thành thật: giả định này chưa được xác nhận thống kê nghiêm ngặt, nó thiên về phán đoán kinh nghiệm hơn. Liệu khung chiến lược có thể duy trì hiệu quả trong giao dịch thực tế hay không, cuối cùng vẫn phải được kiểm chứng bằng dữ liệu giao dịch thực tế.


Sự khác biệt so với Harness Engineer thực thụ

Phải nói rõ điều này.

Chiến lược này có hình thức của Harness, nhưng so với hệ thống Harness Engineer thực thụ, vẫn còn khoảng cách rõ rệt:

Khía cạnhHarness thực thụChiến lược này
Phân chia mẫuTập huấn luyện + Tập xác nhận + Tập kiểm tra holdoutBacktest trên toàn bộ dữ liệu lịch sử, không có xác nhận ngoài mẫu
Phòng chống overfittingCó kiểm tra tính tổng quát rõ ràngPhụ thuộc vào sự đa dạng tham số để đối phó một phần, không hoàn chỉnh
Cách ly thí nghiệmMỗi biến thể chạy độc lập, không ảnh hưởng lẫn nhauDùng chung cùng một cây nến, có sự ràng buộc ngầm
Ngưỡng lên sànPhải vượt qua validation mới được triển khaiĐiểm cao nhất trực tiếp lên sàn, không có lớp xác nhận thứ cấp
Tích lũy sai sốĐánh giá từng lớp độc lậpHai lớp đua ngựa đều dựa trên tối ưu lịch sử, sai số tích lũy

Khác biệt cốt lõi: Harness thực thụ sẽ đặt câu hỏi "kết quả này còn đúng trên mẫu ngoài không?", trong khi chiến lược này chọn ra "tối ưu" qua hai lớp đua ngựa, thực chất đều là tối ưu lịch sử — overfitting ở cấp tham số, chồng lên overfitting ở cấp đồng coin, liệu có thể kéo dài đến tương lai hay không, luôn là một câu hỏi mở.


Kết luận: Khắc thuyền tìm kiếm, hay đáng để thử?

Trong thế giới định lượng, dự đoán luôn là một việc cực kỳ khó.

Nhiều người sẽ nói, việc dùng dữ liệu lịch sử chọn tham số rồi giao dịch thực tế, thực chất là khắc thuyền tìm kiếm — kiếm đã rơi xuống nước, vết khắc trên thuyền không thể giúp bạn tìm thấy nó. Thị trường sẽ thay đổi, tham số hiệu quả sẽ mất hiệu lực, đồng coin hot hôm nay ngày mai có thể trở nên bình thường, đường trung bình tối ưu hôm qua hôm nay có thể là nhiễu.

Lời phê bình này không phải vô lý.

Nhưng nói đi cũng phải nói lại, những gì nên thử, thì vẫn nên thử.

Bản chất của định lượng, không bao giờ là tìm ra một câu trả lời đúng mãi mãi, mà là nâng cao xác suất chiến thắng một cách hệ thống trong điều kiện bất định. Dù là khắc thuyền tìm kiếm, bạn cũng cần có một con thuyền, trước hết phải khắc lên vết đó — định vị chiến lược (con thuyền), chính là khởi đầu của định lượng.

Tất nhiên, bản thân khung chiến lược không đảm bảo lợi nhuận. Có khung chỉ là điểm khởi đầu, giá trị thực sự nằm ở việc thực thi và lặp lại liên tục: danh sách trắng có thể điều chỉnh, trọng số điểm có thể thay đổi, không gian tham số có thể mở rộng, chốt lời cắt lỗ có thể tối ưu. Mỗi lần điều chỉnh, là một thí nghiệm mới, là làm cho khung này đến gần hơn với Harness thực thụ.

Con đường là do bước đi tạo ra, không phải do nghĩ ra.

Mã nguồn chiến lược: Harness Engineer Chiến lược định lượng lọc đường trung bình

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)