1. Mô Tả Chiến Lược MARKET STRUCTURE TREND [MST]
Phát hiện đảo chiều cấu trúc thị trường (ChoCh) bằng pivot high/low, gắn kèm một Trailing Stop theo ATR chỉ chạy thuận xu hướng và một "thang mục tiêu vô hạn" tự động giãn theo ATR để đánh dấu % lợi nhuận đạt được tại từng mốc.
1.1 Khái Niệm Chỉ Báo
Chỉ báo này kết hợp 3 khái niệm price-action/quant kinh điển vào một hệ thống duy nhất:
- Change of Character (ChoCh): khi giá đóng cửa phá vỡ đỉnh/đáy swing (pivot) gần nhất theo hướng ngược với xu hướng hiện tại, lý thuyết price-action coi đây là bằng chứng "tính cách" (character) của thị trường đã thay đổi - phe kiểm soát trước đó đã mất quyền kiểm soát, khả năng cao một xu hướng mới vừa bắt đầu.
- ATR Trailing Stop kiểu "ratchet" (chỉ chạy 1 chiều): một mức dừng lỗ động, cách giá một khoảng = ATR × hệ số nhân, nhưng chỉ được phép di chuyển CÓ LỢI cho xu hướng (đi lên khi tăng, đi xuống khi giảm) - không bao giờ lùi lại, tương tự cơ chế Chandelier Exit.
- Thang Mục Tiêu Vô Hạn (Infinite Target Ladder): thay vì chỉ đặt 1 mục tiêu cố định, chỉ báo tự động đặt hàng loạt mức mục tiêu cách đều nhau theo bội số ATR, và cứ mỗi khi giá đạt một mức, ngay lập tức đặt mức tiếp theo xa hơn - tạo thành một "thang" mục tiêu kéo dài vô hạn theo xu hướng, mỗi nấc thang đều được dán nhãn % lợi nhuận đạt được tính từ mức cấu trúc bị phá vỡ (entry theo lý thuyết ChoCh).
Nói cách khác: ChoCh trả lời câu hỏi "khi nào vào lệnh", Trailing Stop trả lời "khi nào nên coi là xu hướng vẫn còn an toàn", còn Thang Mục Tiêu trả lời "đã lời bao nhiêu % và mức chốt lời tiếp theo ở đâu" - tất cả tự động cập nhật theo thời gian thực, không cần vẽ tay.
1.2 Chức Năng Chỉ Báo
- Đường & Nhãn ChoCh: một đường ngang nối từ bar pivot bị phá vỡ đến bar xác nhận phá vỡ, kèm nhãn "ChoCh ↑" (xanh) hoặc "ChoCh ↓" (hồng) đặt tại điểm giữa đường - đánh dấu chính xác sự kiện đảo chiều cấu trúc.
-
Thang Mục Tiêu (Target Ladder):
- Mục tiêu đang chờ: đường mảnh, nét liền, kéo dài 10 nến về phía tương lai, thể hiện mức mục tiêu kế tiếp chưa đạt tới.
- Mục tiêu đã đạt: khi giá chạm tới, đường chuyển nét đứt và kéo dài lùi về đúng bar bắt đầu xu hướng, kèm nhãn phần trăm lợi nhuận (VD "+2.15%") tính từ mức cấu trúc entry.
- Nút bật/tắt "Show Target History": khi TẮT, toàn bộ mục tiêu đã đạt của xu hướng cũ bị xoá sạch ngay khi có ChoCh mới, chỉ giữ lại mục tiêu đang hoạt động của xu hướng hiện tại.
- ATR Trailing Stop + Vùng Tô Màu: một đường trailing stop chạy dọc theo xu hướng (chỉ đi lên khi tăng, chỉ đi xuống khi giảm), kèm một vùng tô màu mờ giữa giá đóng cửa và đường stop giúp nhìn trực quan khoảng đệm rủi ro hiện tại. Nút "Show Trailing Stop" bật/tắt cả đường lẫn vùng tô.
- Không có Alert: chỉ báo này thuần hiển thị trực quan, không có alertcondition() nào được lập trình sẵn.
1.3 Cách Dùng Chỉ Báo
- Vào lệnh khi có ChoCh: khi đường + nhãn "ChoCh ↑" xuất hiện → MUA theo hướng tăng; khi "ChoCh ↓" xuất hiện → BÁN theo hướng giảm.
- Dùng đường Trailing Stop làm SL động: vì đường này chỉ chạy có lợi cho xu hướng (ratchet), có thể dùng trực tiếp làm mức dừng lỗ dời dần theo giá thay vì SL cố định.
- Chốt lời theo Thang Mục Tiêu: mỗi khi một mức mục tiêu đang chờ được giá chạm tới (đường chuyển nét đứt + xuất hiện nhãn %), đây là điểm tham khảo để chốt lời từng phần - mức tiếp theo trên thang sẽ tự động xuất hiện ngay sau đó nếu xu hướng còn tiếp diễn.
- Điều chỉnh độ nhạy cấu trúc bằng "Market Structure Length": tăng để chỉ bắt các đỉnh/đáy swing lớn, mạnh (ít ChoCh hơn nhưng đáng tin hơn); giảm để bắt cấu trúc nhỏ, nhạy hơn nhưng dễ nhiễu.
- Điều chỉnh độ rộng SL/mục tiêu bằng "ATR Multiplier" và "Target Step": tăng "ATR Multiplier" cho SL rộng hơn (chịu nhiễu tốt hơn nhưng rủi ro/lệnh cao hơn); tăng "Target Step" để các nấc thang mục tiêu cách xa nhau hơn (ít chốt lời hơn nhưng mỗi lần chốt lời nhiều hơn).
- Tắt "Show Target History" khi trade live để biểu đồ gọn, chỉ thấy mục tiêu đang hoạt động; bật lại khi cần review lại toàn bộ các mức đã chốt lời trong quá khứ để đánh giá hiệu suất.
1.4 Cách Hoạt Động Của Chỉ Báo
Đầu vào & vai trò
- msLen (Số nguyên, mặc định: 10): số nến hai bên (trái + phải) dùng để xác nhận một pivot high/low làm cấu trúc thị trường. Ví dụ: msLen=10 nghĩa là một đỉnh chỉ được xác nhận sau khi đã có đủ 10 nến sau nó đều thấp hơn - nên tín hiệu cấu trúc luôn có độ trễ tối thiểu 10 nến so với thời điểm đỉnh thực sự hình thành. Tăng → chỉ bắt đỉnh/đáy lớn, ChoCh hiếm hơn nhưng đáng tin hơn. Giảm → bắt cấu trúc nhỏ, ChoCh nhiều hơn nhưng dễ nhiễu và trễ ít hơn.
- atrLength (Số nguyên, mặc định: 14): số nến dùng để tính Average True Range (ATR) - làm nền cho cả khoảng cách trailing stop lẫn khoảng cách giữa các mục tiêu.
- atrMult (Số thập phân, mặc định: 4.0): hệ số nhân với ATR để xác định khoảng cách của trailing stop so với giá. Ví dụ: ATR=0.0050, atrMult=4.0 → trailing stop cách giá 0.0050×4=0.02 (200 pip nếu là cặp JPY, hoặc tương ứng đơn vị giá). Tăng → stop rộng hơn, ít bị quét bởi nhiễu nhưng chịu rủi ro/lệnh lớn hơn. Giảm → stop chặt hơn, bảo toàn lợi nhuận tốt hơn nhưng dễ bị quét sớm khi thị trường giằng co.
- targetStepMult (Số thập phân, mặc định: 2.0): hệ số nhân với ATR để xác định khoảng cách dọc giữa 2 mục tiêu liên tiếp trên thang. Ví dụ: ATR=0.0050, targetStepMult=2.0 → mỗi nấc thang cách nhau 0.0050×2=0.01. Tăng → mỗi lần chốt lời cách xa nhau hơn (ít lần chốt hơn nhưng mỗi lần được nhiều hơn). Giảm → chốt lời dày hơn, mỗi lần ít hơn.
- bullColor, bearColor (Màu, mặc định: xanh lá rgb(52,230,126) / hồng rgb(255,82,241)): màu dùng cho toàn bộ đường ChoCh, mục tiêu, trailing stop và vùng tô theo từng hướng xu hướng.
- showHistory (Boolean, mặc định: true): khi TẮT, mọi đường + nhãn mục tiêu đã đạt của xu hướng CŨ sẽ bị xoá ngay khi có ChoCh mới (xu hướng hiện tại luôn giữ nguyên, không bị ảnh hưởng bởi nút này).
- showStop (Boolean, mặc định: true): bật/tắt đồng thời đường trailing stop VÀ vùng tô màu giữa giá và đường stop.
Các Khối Logic Chính
🎯 Luồng 1: Phát Hiện Pivot / Cấu Trúc Thị Trường
- Mỗi nến, chỉ báo kiểm tra ta.pivothigh(msLen, msLen) và ta.pivotlow(msLen, msLen) - một đỉnh/đáy chỉ được xác nhận khi đã đủ msLen nến ở CẢ HAI BÊN đều thấp hơn (đỉnh) hoặc cao hơn (đáy).
- Khi có pivot high mới: lưu phVal = giá high của đúng bar pivot đó (lùi lại msLen nến), phIndx = vị trí bar đó. Tương tự cho pivot low với plVal/plIndx. Cả 2 giá trị này được GIỮ NGUYÊN cho đến khi có pivot mới xác nhận - đóng vai trò "mức cấu trúc gần nhất đang chờ bị phá vỡ".
- Ví dụ: msLen=10. Đỉnh giá cao nhất tại bar 500 (giá 1.2700). Phải đợi tới bar 510 (10 nến sau) mới xác nhận đây là pivot hợp lệ → lúc đó phVal:=1.2700, phIndx:=500. Mức 1.2700 tiếp tục được theo dõi cho tới khi có đỉnh mới xuất hiện.
🎯 Luồng 2: Phát Hiện ChoCh & Đảo Chiều Xu Hướng
- ChoCh tăng: khi close cắt lên trên phVal (ta.crossover) VÀ xu hướng hiện tại đang là giảm (not direction): chuyển direction := true, reset trailing stop atrTS := close - atr×atrMult, entryPrice := phVal (mức cấu trúc vừa bị phá, KHÔNG phải giá đóng cửa thực tế lúc phá vỡ), currentTarget := entryPrice + atr×targetStepMult, trendStart := bar hiện tại.
- Vẽ đường ngang từ phIndx đến bar hiện tại tại mức phVal (màu bullColor, độ dày 2) + nhãn "ChoCh ↑" tại điểm giữa đường. Xoá đường mục tiêu cũ (nếu có) và tạo đường mục tiêu mới từ bar hiện tại kéo dài 10 nến về tương lai tại mức currentTarget.
- ChoCh giảm đối xứng: khi close cắt xuống dưới plVal VÀ xu hướng hiện tại đang là tăng → direction:=false, atrTS:=close+atr×atrMult, entryPrice:=plVal, currentTarget:=entryPrice-atr×targetStepMult, vẽ đường + nhãn "ChoCh ↓" (màu bearColor).
- Ví dụ: phVal=1.2700, atr=0.0050, atrMult=4.0, targetStepMult=2.0. Tại bar 530, close=1.2705 vừa cắt lên trên 1.2700 và đang ở xu hướng giảm → ChoCh tăng xác nhận: atrTS=1.2705-0.02=1.2685, entryPrice=1.2700, currentTarget=1.2700+0.01=1.2710, trendStart=530. Đường ChoCh vẽ từ bar 500 (nơi đỉnh hình thành) tới bar 530.
🎯 Luồng 3: Dọn Dẹp Lịch Sử Khi Đổi Xu Hướng
- directionChange = xu hướng bar này khác xu hướng bar trước (tức vừa có ChoCh). Nếu đúng VÀ showHistory đang TẮT: xoá toàn bộ đường + nhãn mục tiêu ĐÃ ĐẠT của xu hướng vừa kết thúc khỏi mảng lưu trữ - giữ biểu đồ sạch, chỉ còn mục tiêu của xu hướng mới.
🎯 Luồng 4: Cập Nhật ATR Trailing Stop (mỗi nến, kiểu ratchet)
- Khi đang xu hướng tăng: atrTS := max(atrTS trước đó, close - atr×atrMult) - chỉ được phép TĂNG, không bao giờ giảm. Nếu giá hồi lại khiến mức tính mới thấp hơn mức đang giữ, mức cũ (cao hơn) được giữ nguyên.
- Khi đang xu hướng giảm: đối xứng, dùng min() - chỉ được phép GIẢM, không bao giờ tăng.
- Ví dụ (xu hướng tăng): atrTS trước = 1.2650. Giá hiện tại close=1.2680, atr×atrMult=0.02 → mức tính mới = 1.2680-0.02=1.2660. Vì 1.2660 > 1.2650 → atrTS cập nhật lên 1.2660 (dời lên theo giá). Nến kế tiếp giá hồi về close=1.2670 → mức tính mới=1.2670-0.02=1.2650 < 1.2660 (mức đang giữ) → atrTS GIỮ NGUYÊN 1.2660, không bị kéo lùi lại.
🎯 Luồng 5: Tiến Trình Thang Mục Tiêu (mỗi nến, song song với Luồng 4)
- Xu hướng tăng: kiểm tra high >= currentTarget. Nếu đúng (mục tiêu bị chạm): chốt đường mục tiêu hiện tại (đặt x2 = bar hiện tại, đổi nét đứt, kéo x1 lùi về đúng trendStart), lưu đường này + một nhãn % lợi nhuận ((currentTarget - entryPrice) / entryPrice × 100) vào 2 mảng lưu trữ. Sau đó tính mục tiêu KẾ TIẾP = currentTarget + atr×targetStepMult và vẽ một đường mục tiêu mới (mờ hơn, từ trendStart kéo dài 10 nến về tương lai). Nếu CHƯA chạm mục tiêu: chỉ kéo dài đường mục tiêu hiện tại thêm về phía tương lai (giữ nguyên mức giá, luôn đi trước giá 10 nến).
- Xu hướng giảm đối xứng, dùng low <= currentTarget và trừ dần ATR×targetStepMult cho mỗi mục tiêu kế tiếp (nhãn % ra số âm).
- Ví dụ: entryPrice=1.2700, currentTarget=1.2710. Tại bar 545, high=1.2715 ≥ 1.2710 → mục tiêu bị chạm: đường chốt thành nét đứt từ bar 530 (trendStart) đến bar 545, nhãn "+0.08%" (= (1.2710-1.2700)/1.2700×100) xuất hiện tại (530, 1.2710). Mục tiêu kế tiếp = 1.2710+0.01=1.2720, đường mục tiêu mới (mờ hơn) vẽ từ bar 530 tới bar 555.
🎨 Luồng 6: Vẽ Trailing Stop & Vùng Tô Màu
- Đường ATR Trailing Stop chỉ được vẽ khi showStop bật VÀ KHÔNG PHẢI bar vừa đổi hướng (not directionChange) - trên đúng bar đổi hướng, giá trị plot bị đặt thành na, tạo một khoảng ngắt (nhờ style linebr) để tránh vẽ một đoạn nối chéo xấu giữa mức stop cũ và mức stop vừa reset.
- Vùng tô màu mờ (fill) được vẽ giữa đường giá đóng cửa và đường trailing stop, màu theo hướng xu hướng hiện tại (bullColor/bearColor, độ trong suốt 70%) - trực quan hoá "vùng đệm" giữa giá và mức dừng lỗ.
Đầu ra & vai trò trong sử dụng
- Đường + nhãn ChoCh: xác định chính xác thời điểm và mức giá xảy ra đảo chiều cấu trúc - dùng làm tín hiệu vào lệnh và mốc tham chiếu entry.
- Đường ATR Trailing Stop: mức dừng lỗ động, chỉ chạy có lợi cho xu hướng - dùng trực tiếp làm SL dời dần trong suốt vòng đời của lệnh.
- Thang mục tiêu (đang chờ + đã đạt): lộ trình chốt lời nhiều tầng, tự động giãn ra vô hạn theo ATR khi xu hướng còn tiếp diễn; nhãn % cho biết chính xác mức lợi nhuận đã đạt được tại mỗi tầng.
- Vùng tô màu giữa giá và stop: hỗ trợ quan sát nhanh khoảng đệm rủi ro hiện tại mà không cần đọc số liệu.


