jvinhit//lab

Search posts

Type to search across journal entries.

navigate open esc close

Đầu tư Cổ phiếu · Phần 24 — Từ trader cảm tính đến trading playbook viết được

Biến một ý tưởng giao dịch thành playbook có thể kiểm chứng: thị trường, bối cảnh, setup, trigger, entry, invalidation, exit, sizing và điều kiện không giao dịch. Không phải lời khuyên đầu tư.

Hai trader nhìn cùng một biểu đồ. Người thứ nhất nói: “Cổ phiếu khỏe, chỉnh đẹp, có dòng tiền; mua được.” Người thứ hai viết:

Chỉ xem xét long nếu:
1. Chỉ số thị trường nằm trên MA200 đang dốc lên.
2. Cổ phiếu thuộc universe thanh khoản đã định và không có sự kiện loại trừ.
3. Giá nằm trên MA50 và MA200; MA50 cao hơn MA200.
4. Sau khi lập đỉnh 20 phiên, giá pullback 2–5 phiên nhưng không đóng dưới MA20.
5. Trigger là giá đóng cửa vượt đỉnh phiên trước với volume đạt điều kiện.
6. Entry, stop, position size và time stop được tính trước khi gửi lệnh.

Người thứ nhất có thể đúng. Người thứ hai cũng có thể sai. Khác biệt quan trọng là quyết định của người thứ hai có thể được tái hiện, ghi nhận, bác bỏ và cải thiện. Đó là điểm bắt đầu của một trading playbook.

Đây là Phần 24 — bài thứ hai của Volume 3: Phòng lab thực chiến. Mục tiêu không phải trao cho bạn một “kèo” hay một bộ chỉ báo thần kỳ. Mục tiêu là giúp bạn biến một ý tưởng mơ hồ thành quy trình đủ rõ để:

  • Hai người độc lập phân loại cùng một biểu đồ gần giống nhau.
  • Bạn biết mình sẽ làm gì trước khi tiền và cảm xúc xuất hiện.
  • Mỗi giao dịch tạo ra dữ liệu có thể review.
  • Một chiến lược tệ bị loại bỏ bằng bằng chứng thay vì được cứu bằng lời giải thích sau sự kiện.

Playbook mẫu trong bài chưa được chứng minh có lợi thế. Nó chỉ minh họa cú pháp của một hệ thống. Ở Phần 25 ta sẽ xử lý market regime và đa khung thời gian; Phần 26 mới backtest; Phần 27 mới đi sâu execution; Phần 28 mới ghép rủi ro nhiều vị thế.

Lưu ý rủi ro — đọc trước mọi quy tắc vào lệnh

Bài này chỉ phục vụ giáo dục, không phải khuyến nghị mua/bán hay lời hứa lợi nhuận. Giao dịch ngắn hạn có thể gây mất vốn nhanh. FINRA Rule 2270 cảnh báo day trading cực kỳ rủi ro, không phù hợp với người có nguồn lực, kinh nghiệm hoặc khả năng chịu rủi ro hạn chế; chi phí, lỗi hệ thống, đòn bẩy và cạnh tranh với trader chuyên nghiệp đều có thể khuếch đại thua lỗ. Dù bài này dùng ví dụ swing trading không đòn bẩy, nguyên tắc thận trọng vẫn áp dụng.

CFTC khuyến nghị chỉ dùng risk capital — số tiền bạn có thể mất mà vẫn giữ được an toàn tài chính. Không dùng quỹ khẩn cấp, tiền học, tiền thuê nhà, tiền trả nợ hoặc khoản cần cho mục tiêu thiết yếu. Nếu chưa có dữ liệu kiểm chứng và kinh nghiệm execution, hãy làm bài tập trên dữ liệu lịch sử rồi paper trade trước; paper trade cũng không thể mô phỏng đầy đủ trượt giá, thanh khoản và áp lực tâm lý.


Chuẩn đầu ra: “chuyên nghiệp” nghĩa là gì?

Một trader chuyên nghiệp không phải người luôn thắng, đoán đúng đỉnh đáy hay dùng nhiều màn hình. Trong phạm vi bài này, “chuyên nghiệp” là năng lực vận hành:

  MASTERY GATE — TRADING PLAYBOOK
  ☐ Nói được thị trường, universe, hướng giao dịch và holding period
  ☐ Tách hypothesis, setup, trigger, order và position
  ☐ Viết điều kiện bằng dữ liệu quan sát được, không dùng tính từ mơ hồ
  ☐ Biết invalidation nằm ở đâu trước entry
  ☐ Tính position size từ rủi ro, không từ mức độ tự tin
  ☐ Viết exit cho đúng, sai, đi ngang và gap bất lợi
  ☐ Có điều kiện no-trade và kill switch
  ☐ Chụp lại quyết định tại thời điểm ra quyết định
  ☐ Chấm chất lượng quy trình độc lập với P&L
  ☐ Chấp nhận rằng playbook chưa có edge cho tới khi được kiểm chứng

Lợi nhuận là kết quả chịu ảnh hưởng của kỹ năng, may rủi, chế độ thị trường, chi phí và cỡ mẫu. Khả năng lặp lại và kiểm toán quyết định mới là thứ bạn có thể xây trước.

1. Trading playbook là gì — và không phải là gì?

Trading playbook là tập hợp các mẫu giao dịch đã được đặc tả, cùng quy tắc nhận diện, vào lệnh, quản trị, thoát lệnh và giới hạn rủi ro. Mỗi “play” giải quyết một hiện tượng hẹp trong một bối cảnh hẹp.

Nó không phải:

  • Danh sách mã “đáng mua”.
  • Album ảnh các lệnh thắng đẹp nhất.
  • Bộ indicator càng nhiều càng tốt.
  • Nhật ký kể lại cảm xúc mà không có dữ liệu.
  • Một chiến lược chỉ tồn tại trong đầu tác giả.
  • Bằng chứng rằng quá khứ sẽ lặp lại.

Một playbook tốt trả lời ba lớp câu hỏi:

LớpCâu hỏiVí dụ đầu ra
Nhận diệnKhi nào mẫu này tồn tại?Regime, universe, setup, trigger
Hành độngKhi tồn tại thì làm gì?Entry, order type, stop, exit, size
Kiểm soátKhi nào không làm hoặc dừng làm?No-trade, portfolio heat, kill switch

Hãy coi playbook như giao thức thí nghiệm. Nếu bạn thay tiêu chí sau khi thấy kết quả, bạn không còn kiểm tra giả thuyết ban đầu.

2. Đừng trộn đầu tư với trading

Cùng một cổ phiếu có thể là khoản đầu tư hợp lý nhưng là giao dịch tệ, hoặc ngược lại. Khác biệt nằm ở luận điểm, chân trời thời gian và điều kiện đổi ý.

Đầu tư theo doanh nghiệpSwing trade theo giá
Câu hỏi chínhGiá trị và sức sinh lời dài hạn thay đổi thế nào?Mẫu hành vi giá có edge trong vài phiên/tuần không?
Dữ liệu trọng tâmBCTC, ngành, quản trị, định giáGiá, volume, volatility, regime, catalyst
InvalidationLuận điểm kinh doanh/định giá hỏngCấu trúc giá hoặc thời gian kỳ vọng hỏng
Holding periodTháng đến nămVài phiên đến vài tuần trong ví dụ này
ExitKhi giá vượt giá trị, thesis đổi, cơ hội khác tốt hơnStop, target/trailing rule, time stop

Câu nguy hiểm nhất sau một lệnh swing thất bại là: “Tôi chuyển sang nắm giữ dài hạn.” Đó không phải linh hoạt; đó là đổi trò chơi sau khi thua. Nếu muốn vừa đầu tư vừa trading cùng mã, tách tài khoản logic, thesis, size và nhật ký ngay từ đầu.

3. Chuỗi quyết định hoàn chỉnh

Một lệnh không bắt đầu ở nút Buy. Nó đi qua một pipeline:

Market & direction

Universe → liquidity/event filters

Regime & context

Setup → điều kiện chuẩn bị

Trigger → sự kiện kích hoạt

Entry & order type

Invalidation → initial risk R

Position size + portfolio constraints

Management & exit

Journal → review → keep / revise / retire

Thiếu một mắt xích, phần còn lại dễ bị cảm xúc điền vào. “Setup đẹp” mà không có trigger khiến bạn vào quá sớm. Có trigger mà không có invalidation khiến bạn không biết khi nào sai. Có stop mà không sizing khiến cùng một lỗi có thể làm tài khoản tổn thương quá mức.

Năm khái niệm thường bị trộn

Hypothesis — giả thuyết: lý do kinh tế/hành vi khiến mẫu có thể có edge. Ví dụ: trong xu hướng tăng rộng, một pullback ngắn sau breakout có thể phản ánh chốt lời tạm thời hơn là thay đổi cung–cầu dài hơn.

Setup — trạng thái chuẩn bị: tập điều kiện tồn tại trước khi hành động. Nó nói “hãy theo dõi”, chưa nói “hãy mua”.

Trigger — sự kiện kích hoạt: quan sát mới khiến setup chuyển thành ứng viên vào lệnh.

Order — chỉ thị cho broker: market, limit, stop hoặc biến thể được thị trường/broker hỗ trợ. Order là cơ chế execution, không phải thesis.

Position — rủi ro thực tế sau khớp: giá khớp, số lượng, stop, phí, gap và tương quan với vị thế khác quyết định exposure thật.

Một câu viết tốt sẽ phân biệt chúng:

Nếu bối cảnh A và setup B tồn tại, khi trigger C xuất hiện tôi gửi order D với size E; thesis giao dịch bị vô hiệu tại F và vị thế thoát theo G.

4. Từ tính từ mơ hồ đến tiêu chí có thể kiểm tra

“Xu hướng mạnh”, “volume đẹp”, “hỗ trợ cứng”, “breakout uy tín” đều có thể hữu ích khi một chuyên gia nhìn nhanh. Nhưng chúng chưa đủ làm dữ liệu.

Câu mơ hồPhiên bản vận hành được
Thị trường khỏeIndex đóng trên MA200; MA200 hôm nay cao hơn 20 phiên trước
Cổ phiếu thanh khoản tốtTrung vị giá trị giao dịch 20 phiên ≥ ngưỡng đã định
Xu hướng tăngClose > MA50 > MA200, và MA50 cao hơn 10 phiên trước
Pullback lành mạnhKéo dài 2–5 phiên; đáy không thấp hơn ngưỡng cấu trúc; range/volume nằm trong giới hạn
Volume xác nhậnVolume trigger ≥ 1,2 lần trung vị volume 20 phiên trước đó
Không đuổi giáKhông entry nếu giá mở cửa vượt mức trigger quá 0,5 ATR

Các ngưỡng trên chỉ là ví dụ. Đừng nhầm đo được với đúng. 1,2× không tự nhiên tốt hơn 1,17×; MA50 không có quyền năng vật lý. Ta chọn định nghĩa để tạo dữ liệu nhất quán, sau đó kiểm tra độ nhạy ở vùng lân cận. Nếu hiệu quả biến mất chỉ vì đổi 1,20 thành 1,19, chiến lược có thể đang overfit.

Quy tắc ba phép thử

Mỗi điều kiện phải vượt qua:

  1. Quan sát được: có dữ liệu tại thời điểm quyết định, không dùng tương lai.
  2. Phân loại được: người khác có thể trả lời Yes/No hoặc một giá trị cụ thể.
  3. Lưu được: có trường dữ liệu trong journal để audit.

“Tôi cảm thấy thị trường sắp chạy” trượt cả ba. “Index close > MA200 tại cuối phiên hôm qua” vượt cả ba.


5. Playbook mẫu hoàn chỉnh: Pullback tiếp diễn xu hướng tăng

Phần này xây một play từ đầu đến cuối. Đây là case study giả định, không phải khuyến nghị hay chiến lược đã được xác nhận. Tất cả tham số cần được backtest với dữ liệu point-in-time, gồm phí, trượt giá, cổ phiếu hủy niêm yết và các quy tắc thị trường tương ứng.

5.1 Mandate — ta đang chơi trò gì?

Tên play:             Trend Pullback Continuation — TPC-01
Phiên bản:            v0.1, Research Only
Instrument:           Cổ phiếu phổ thông, long-only
Holding period:       Dự kiến 3–15 phiên
Decision frequency:   Một lần sau khi có dữ liệu cuối ngày
Execution:            Phiên kế tiếp; không giả định khớp tại close đã biết
Leverage:             Không
Short selling:        Không
Mục tiêu nghiên cứu:  Kiểm tra continuation sau pullback ngắn trong uptrend
Trạng thái:           Chưa đủ bằng chứng để giao dịch tiền thật

Mandate bảo vệ bạn khỏi style drift: thấy mẫu intraday rồi nhét vào play swing; thấy cổ phiếu kém thanh khoản nhưng “câu chuyện hay” rồi bỏ filter; hoặc giữ 60 ngày một play được thiết kế cho 15 ngày.

5.2 Market và universe

Trước khi tìm setup, xác định tập tài sản có thể giao dịch:

Universe tại mỗi ngày t:
  ☐ Đang niêm yết và đủ dữ liệu tối thiểu 250 phiên tại t
  ☐ Giá đóng cửa ≥ ngưỡng giá tối thiểu do researcher đặt trước
  ☐ Trung vị giá trị giao dịch 20 phiên ≥ ngưỡng thanh khoản
  ☐ Không bị đình chỉ/hạn chế giao dịch theo dữ liệu point-in-time
  ☐ Không có sự kiện doanh nghiệp thuộc danh sách loại trừ trong 2 phiên tới

Ngưỡng giá và thanh khoản phải phù hợp quy mô tài khoản, thị trường và dữ liệu bạn có. Dùng giá trị giao dịch thay vì chỉ số cổ phiếu giúp so sánh tốt hơn giữa mã giá cao và thấp. Khi backtest, universe phải phản ánh những gì đã biết ở ngày đó; dùng danh sách cổ phiếu còn tồn tại hôm nay sẽ tạo survivorship bias.

5.3 Regime filter

Play v0.1 chỉ hoạt động trong chế độ “risk-on” định nghĩa trước:

REGIME_ON(t) =
  index_close(t-1) > index_MA200(t-1)
  AND index_MA200(t-1) > index_MA200(t-21)

Ta dùng dữ liệu t-1 vì quyết định cho phiên t không được nhìn close cuối phiên t trước khi giao dịch. Nếu regime off, không mở vị thế mới theo play này; quy tắc xử lý vị thế đang mở phải được ghi riêng, không mặc định bán tất cả.

Đây là filter thô. Phần 25 sẽ phân biệt trend, volatility, breadth và tương quan để tránh gói cả thị trường vào một đường trung bình.

5.4 Context của cổ phiếu

Tại cuối ngày t-1, cổ phiếu phải thỏa:

  close > MA50 > MA200
  MA50(t-1) > MA50(t-11)
  close không cao hơn MA20 quá 3 ATR20

Trong đó ATR phải có một định nghĩa cố định. Ví dụ Wilder ATR(20) tính true range từ high, low và previous close. Đừng trộn ATR từ các nền tảng có initialization khác nhau mà không kiểm tra.

Điều kiện cuối tránh xem các mã đã quá xa nền giá là pullback candidate. Nó không bảo đảm mã “rẻ” hoặc không thể đảo chiều.

5.5 Setup

Một setup đủ điều kiện khi:

  1. Trong 10 phiên gần nhất đã có một ngày đóng cửa cao hơn mức cao nhất của 20 phiên trước ngày breakout.
  2. Sau breakout là 2–5 phiên pullback liên tiếp tính đến t-1.
  3. Trong pullback, không phiên nào đóng dưới MA20.
  4. Độ sâu pullback từ breakout close đến lowest low không vượt 1,5 ATR tại ngày breakout.
  5. Trung vị volume pullback không vượt trung vị volume 20 phiên trước breakout.
  6. Khoảng từ entry dự kiến đến invalidation không nhỏ hơn 0,8 ATR và không lớn hơn 2,0 ATR; ngoài vùng này setup bị loại.

“Pullback liên tiếp” cần định nghĩa để máy và người giống nhau. Ở v0.1:

Một ngày thuộc pullback nếu close ≤ highest close kể từ breakout.
Chuỗi kết thúc khi có trigger hoặc khi quá 5 phiên.
Một nến xanh nhỏ không tự động làm hỏng chuỗi nếu chưa trigger.

Định nghĩa có vẻ cứng nhắc vì ta đang tạo bản v0.1 có thể test. Sau dữ liệu, bạn có thể tạo v0.2; không được âm thầm sửa v0.1 rồi trộn kết quả.

5.6 Trigger

Tại cuối phiên t, trigger xảy ra nếu tất cả điều kiện sau đúng:

  close(t) > high(t-1)
  close(t) > open(t)
  volume(t) ≥ 1,2 × median_volume(t-20 ... t-1)
  setup vẫn hợp lệ tại thời điểm close(t)

Trigger chỉ tạo tín hiệu cuối ngày. Không được backtest entry tại chính close(t) nếu quy trình thực tế chỉ tính indicator sau close. Cách thận trọng hơn là tạo order cho phiên t+1 và mô hình hóa gap/slippage.

5.7 Entry và order

Quy tắc nghiên cứu v0.1:

trigger_price = high(t)
max_entry      = trigger_price + 0,20 × ATR20(t)

Trong phiên t+1:
  - Dùng buy-limit với giới hạn max_entry theo khả năng của broker/thị trường.
  - Nếu giá không giao dịch ở mức có thể khớp trong phạm vi cho phép: bỏ lệnh.
  - Nếu open > trigger_price + 0,50 × ATR: hủy, không đuổi.
  - Lệnh chưa khớp hết hết hiệu lực cuối phiên; không tự chuyển sang ngày sau.

Đây vẫn là mô hình đơn giản. Investor.gov giải thích market order ưu tiên khả năng thực hiện nhưng không bảo đảm giá; limit order kiểm soát mức giá nhưng không bảo đảm khớp; stop order khi kích hoạt thường trở thành market order. Loại lệnh thực tế, phiên khớp và quy tắc biên độ phụ thuộc sở giao dịch và broker. Phần 27 sẽ xử lý spread, queue, partial fill và market impact.

5.8 Invalidation và initial stop

Với play mẫu:

structural_stop = lowest_low của toàn bộ pullback - 0,10 × ATR20(t)
initial_stop    = structural_stop

Loại setup nếu:
  entry - initial_stop < 0,80 × ATR20(t)
  OR entry - initial_stop > 2,00 × ATR20(t)

Stop không phải nơi “chắc chắn giá sẽ đảo chiều”. Nó là nơi giả thuyết ngắn hạn không còn đủ hấp dẫn để tiếp tục chịu rủi ro theo play này.

Không được nới stop xuống sau entry. Có thể thiết kế trailing stop siết lên, nhưng thay đổi đó phải theo quy tắc viết trước. Nếu giá gap xuyên stop, lỗ thực tế có thể lớn hơn 1R; stop không phải bảo hiểm giá.

5.9 Định nghĩa R và position sizing

1R là rủi ro kế hoạch của một giao dịch trước phí và gap:

account_equity       = vốn tài khoản tại đầu ngày
risk_fraction        = 0,50% trong ví dụ giáo dục
risk_budget          = account_equity × risk_fraction
stop_distance/share  = planned_entry - initial_stop
raw_shares           = risk_budget / stop_distance_per_share

Sau đó lấy nhỏ nhất trong các giới hạn:

final_shares = min(
  raw_shares,
  giới hạn % vốn cho một vị thế,
  giới hạn theo thanh khoản/ADV,
  giới hạn portfolio heat còn lại,
  giới hạn broker và quy mô lô
)

Làm tròn xuống theo lô giao dịch. Nếu phí và slippage đáng kể, hãy trừ buffer khỏi risk budget hoặc cộng chúng vào loss estimate. Không làm tròn lên chỉ để “đủ vị thế”.

Ví dụ số

Giả sử hoàn toàn hư cấu:

Vốn tài khoản:                 200.000.000 VND
Risk/trade:                              0,50%
Risk budget:                   1.000.000 VND
Planned entry:                    50.000 VND/cp
Initial stop:                     47.500 VND/cp
Stop distance:                     2.500 VND/cp
Raw size:                     1.000.000 / 2.500 = 400 cp
Notional:                        20.000.000 VND = 10% tài khoản

Nếu quy mô lô cho phép 100 cổ phiếu, 400 cổ phiếu hợp lệ. Nhưng đây chưa phải kết luận cuối: nếu 400 cổ phiếu vượt hạn mức thanh khoản, portfolio heat hoặc notional, phải giảm tiếp.

Nếu giá khớp thực tế là 50.300 nhưng stop vẫn 47.500:

Actual distance = 2.800 VND/cp
Actual planned loss at 400 cp = 1.120.000 VND

Risk đã vượt 12%. Quy trình phải tính lại size theo fill hoặc đặt tolerance trước. Nếu gap xuống và thoát ở 46.500, chưa kể phí:

Realized loss = (50.300 - 46.500) × 400 = 1.520.000 VND
Realized R = -1,52R nếu R-budget ban đầu là 1.000.000

Đó là gap risk: sizing theo stop không giới hạn tuyệt đối khoản lỗ.

5.10 Portfolio heat

Ngay cả khi mỗi lệnh chỉ rủi ro 0,5%, năm cổ phiếu cùng ngành có thể thực chất là một cược. Ở bản mẫu, ta đặt guardrail nghiên cứu:

planned_open_risk = tổng rủi ro từ giá hiện tại/entry tới stop của mọi vị thế
portfolio_heat_cap = 2,0% equity

Không mở lệnh nếu risk mới làm planned_open_risk vượt cap.
Không mở quá 2 vị thế trong cùng một nhóm ngành đã định.

Đây chưa phải mô hình tương quan hoàn chỉnh. Phần 28 sẽ phân biệt gross/net exposure, factor concentration, correlation spike và stress test.

5.11 Exit: đúng, sai, đi ngang và bất thường

Một playbook chưa hoàn chỉnh nếu chỉ biết vào. TPC-01 v0.1 có bốn nhánh:

Sai nhanh — initial stop

Nếu giá chạm/kích hoạt stop theo cơ chế order đã định → thoát.
Không hủy stop vì tin tức, “hỗ trợ gần đây” hay kỳ vọng hồi.

Đúng và chạy — trailing exit

Khi close đạt entry + 2R:
  từ phiên sau, trailing stop = max(stop hiện tại, lowest low 10 phiên trước)
Không hạ trailing stop.

Không sai nhưng không chạy — time stop

Nếu sau 10 phiên kể từ fill, MFE chưa đạt +0,5R:
  thoát ở phiên kế tiếp theo quy tắc execution đã định.

Bất thường — operational exit

Nếu dữ liệu sai, mã bị hạn chế giao dịch, broker/order gặp sự cố,
hoặc sự kiện ngoài danh sách xuất hiện:
  ưu tiên kiểm soát rủi ro theo runbook sự cố;
  ghi riêng là operational exception, không sửa nhãn setup.

MFE là maximum favorable excursion — mức lời lớn nhất từng đạt tính theo R. MAE là maximum adverse excursion. Hai biến này giúp đánh giá stop/exit mà không chỉ nhìn P&L cuối.

5.12 No-trade conditions

Không giao dịch là một quyết định hợp lệ. TPC-01 từ chối lệnh mới nếu bất kỳ điều kiện nào đúng:

  • Regime filter off.
  • Dữ liệu thiếu, điều chỉnh bất thường hoặc không xác minh được corporate action.
  • Có công bố kết quả kinh doanh hoặc sự kiện doanh nghiệp thuộc blacklist trong hai phiên kế tiếp, theo lịch point-in-time.
  • Gap mở cửa vượt giới hạn chase.
  • Stop distance ngoài vùng 0,8–2,0 ATR.
  • Thanh khoản dưới ngưỡng hoặc estimated participation vượt hạn mức.
  • Portfolio heat/cụm ngành vượt giới hạn.
  • Số lệnh mới trong ngày đã đạt cap.
  • Trader không thể theo dõi/đặt exit theo kế hoạch vì đi công tác, mất kết nối hoặc broker không ổn định.
  • Đã kích hoạt daily/weekly kill switch.

No-trade list làm giảm tự do tại khoảnh khắc hấp dẫn nhất — chính vì vậy nó có giá trị.

5.13 Kill switch

Kill switch không phải “ngừng khi sợ”. Nó là ngưỡng vận hành viết trước. Ví dụ để nghiên cứu:

Tạm dừng mở lệnh mới và review nếu một trong các điều kiện xảy ra:
  - 3 vi phạm quy trình trong 20 giao dịch gần nhất;
  - dữ liệu/order feed không đáng tin;
  - realized + open loss trong tuần chạm -3R;
  - 5 lệnh liên tiếp có slippage vượt tolerance;
  - có thay đổi quy tắc thị trường/broker chưa được cập nhật vào playbook.

Chỉ mở lại sau khi:
  nguyên nhân được ghi nhận,
  dữ liệu/operations đã kiểm tra,
  và quyết định restart có ngày, người duyệt, phiên bản.

Ngưỡng -3R không phải con số phổ quát. Điều cốt lõi là tách tạm dừng vận hành khỏi việc tùy hứng chỉnh chiến lược sau chuỗi thua bình thường.


6. Decision tree trước khi gửi lệnh

START

  ├─ Regime ON? ── No → NO TRADE

  ├─ Mã thuộc universe point-in-time? ── No → NO TRADE

  ├─ Context + setup đủ mọi điều kiện? ── No → WATCH / REJECT

  ├─ Có trigger hợp lệ? ── No → WAIT; quá hạn setup → REJECT

  ├─ Event, gap, liquidity, data đều OK? ── No → NO TRADE

  ├─ Entry và invalidation xác định được? ── No → NO TRADE

  ├─ Size sau mọi cap > minimum lot? ── No → NO TRADE

  ├─ Portfolio heat sau lệnh ≤ cap? ── No → REDUCE / NO TRADE

  ├─ Order khớp trong tolerance? ── No → CANCEL / RECOMPUTE

  └─ POSITION OPEN → manage đúng play → journal → review

Nếu một nhánh cần câu “tùy tình hình”, playbook đang thiếu định nghĩa. Ngoại lệ thật sự có thể tồn tại, nhưng phải mang nhãn discretionary/exception và không được trộn với sample hệ thống.

7. Checklist ba thời điểm

Trước lệnh

PRE-TRADE
☐ Play ID và version
☐ Dữ liệu tính tới timestamp nào?
☐ Regime và universe pass?
☐ Setup từng điều kiện pass?
☐ Trigger xuất hiện lúc nào?
☐ Event/corporate-action check?
☐ Planned entry, max entry, order type
☐ Initial stop và lý do cấu trúc
☐ Risk budget, raw size, final size
☐ Portfolio heat trước/sau
☐ Exit branches và kill-switch status
☐ Screenshot KHÔNG có dữ liệu tương lai

Trong lệnh

IN-TRADE
☐ Fill, phí, slippage, partial fill
☐ Stop đã active/xác nhận?
☐ Không nới stop
☐ Mọi thay đổi theo rule hay exception?
☐ Corporate event mới?
☐ MFE/MAE có thể tái dựng từ dữ liệu

Sau lệnh

POST-TRADE
☐ Exit timestamp, giá, lý do, phí
☐ Planned R và realized R
☐ MFE, MAE, holding period
☐ Setup/trigger có thật sự hợp lệ?
☐ Tuân thủ entry, size, stop, exit?
☐ Lỗi data, signal, execution hay behavior?
☐ Screenshot tại exit
☐ Một bài học có thể hành động; không kể chuyện chung chung

8. Chấm quy trình độc lập với kết quả

Một lệnh chuẩn quy trình vẫn có thể lỗ. Một lệnh phá luật vẫn có thể lời. Nếu thưởng cho mọi lệnh lời, bạn đang huấn luyện bản thân phá luật khi may mắn.

Scorecard 100 điểm

Hạng mụcĐiểm tối đaTiêu chí
Regime & universe10Dữ liệu point-in-time, mọi filter hợp lệ
Setup & trigger20Không thiếu điều kiện, timestamp đúng
Entry & execution15Đúng order/tolerance, ghi fill/slippage
Risk & sizing20Stop trước entry, size đúng, heat đúng
Management & exit20Không nới stop, exit đúng nhánh
Journal & evidence15Đủ trường, ảnh trước/sau, không hindsight

Xếp loại gợi ý:

A: 90–100   Quy trình đạt chuẩn
B: 80–89    Lỗi nhỏ, chưa làm thay đổi rủi ro cốt lõi
C: 70–79    Cần review trước lệnh mới cùng play
F: <70      Vi phạm trọng yếu; không dùng P&L làm bằng chứng play có edge

Ma trận bốn ô

P&L dươngP&L âm
Process tốtLệnh tốt, kết quả thuận lợiLệnh tốt, variance bất lợi
Process tệLệnh nguy hiểm nhất: sai được thưởngLỗi rõ; sửa quy trình trước khi sửa setup

Không phải mọi loss đều “variance”; play có thể không có edge. Nhưng muốn biết điều đó, trước hết sample phải được thực hiện đủ nhất quán.

9. Journal tối thiểu để tạo dữ liệu

Một dòng giao dịch nên có các trường:

IDENTITY
trade_id, play_id, play_version, symbol, market, direction

TIME
signal_timestamp, order_timestamp, fill_timestamp, exit_timestamp

CONTEXT
regime_state, universe_pass, sector, event_flag

SIGNAL
setup_pass, trigger_pass, ATR, volume_ratio, setup_age

RISK
equity, risk_fraction, planned_entry, fill_price,
initial_stop, risk_budget, shares, portfolio_heat_before/after

OUTCOME
exit_price, exit_reason, fees, slippage,
gross_pnl, net_pnl, planned_R, realized_R, MFE_R, MAE_R

PROCESS
checklist_score, rule_violation, exception_code,
pre_screenshot, post_screenshot, notes

Công thức cốt lõi

Net P&L = proceeds - cost basis - fees - taxes (nếu áp dụng)

Realized R = Net P&L / planned risk budget

Slippage buy = actual fill - reference price
Slippage sell = reference price - actual fill

Phải lưu cả play_version. Nếu v0.1 và v0.2 có exit khác nhau nhưng bị gộp, expectancy của cả hai không còn diễn giải được.

Evidence snapshot chống hindsight

Ảnh “trước lệnh” phải được chụp tại thời điểm quyết định, ẩn dữ liệu tương lai và ghi timestamp. Vẽ lại chart sau ba tháng rất dễ khiến một setup bình thường trông hiển nhiên. Tốt hơn nữa, lưu snapshot dữ liệu hoặc hash/version của nguồn dữ liệu.


10. Bài tập 30 biểu đồ: kiểm tra độ rõ trước khi kiểm tra lợi nhuận

Trước backtest lớn, hãy kiểm tra xem định nghĩa có đủ rõ.

Chuẩn bị

  1. Chọn 30 cửa sổ lịch sử, gồm cả xu hướng tăng, giảm, đi ngang và volatility khác nhau.
  2. Mỗi cửa sổ kết thúc tại ngày quyết định; che toàn bộ tương lai.
  3. Bao gồm candidate đẹp, gần đạt và rõ ràng không đạt.
  4. Giữ tỷ lệ base rate hợp lý; đừng chọn toàn “chart sách giáo khoa”.

Gắn nhãn độc lập

Bạn và một người thứ hai không trao đổi, cùng điền:

regime_pass:       Y/N
universe_pass:     Y/N/UNKNOWN
context_pass:      Y/N
setup_pass:        Y/N
trigger_pass:      Y/N
planned_entry:     number/NA
initial_stop:      number/NA
no_trade_reason:   code/NA

Tính mức đồng thuận

Với biến nhị phân đơn giản:

Agreement = số nhãn giống nhau / tổng số chart

Mục tiêu vòng đầu: ít nhất 80% ở từng trường cốt lõi, không phải 80% tổng đã che lỗi. Nếu regime_pass đạt 100% nhưng setup_pass chỉ 53%, vấn đề nằm ở định nghĩa setup.

Agreement thô có thể cao khi phần lớn chart đều là No. Nếu muốn nghiêm túc hơn, dùng Cohen’s kappa và xem confusion matrix. Dù dùng thống kê nào, phải đọc từng bất đồng:

Bất đồngHành động
Thuật ngữ mơ hồViết lại định nghĩa và thêm ví dụ biên
Dữ liệu thiếuThêm trạng thái UNKNOWN, không ép thành No
Hai nền tảng tính indicator khácChuẩn hóa data vendor/công thức
Corporate action chưa điều chỉnhSửa pipeline dữ liệu
Người gắn nhãn bỏ sótCải thiện checklist/QA

Sau khi sửa, đóng băng v0.2 và dùng 30 chart mới. Nếu dùng lại cùng tập cho tới khi đạt 100%, bạn đã học thuộc bộ kiểm tra.

11. Bài tập R và sizing

Câu 1

Tài khoản 500 triệu, risk/trade 0,4%, planned entry 80.000, stop 76.000. Bỏ qua phí và lô, raw size là bao nhiêu?

Risk budget = 500.000.000 × 0,4% = 2.000.000
Distance = 4.000
Raw size = 500 cổ phiếu

Câu 2

Size theo stop cho phép 500 cổ phiếu, nhưng cap notional 7% tài khoản chỉ cho:

35.000.000 / 80.000 = 437,5 cổ phiếu

Nếu lô 100, size cuối là 400, không phải 500. Rủi ro kế hoạch giảm còn 1,6 triệu.

Câu 3

Entry 80.000, stop 76.000, exit do gap ở 74.000. Trước phí, outcome là bao nhiêu R trên mỗi cổ phiếu?

Initial risk/share = 4.000
Loss/share = 6.000
Outcome = -1,5R

Stop không hứa hẹn -1R tối đa.

Câu 4

Ba vị thế đang mở có open risk lần lượt 0,35%, 0,40% và 0,45% equity. Heat cap 2%. Lệnh mới dự kiến 0,5%. Có vượt cap không?

Heat sau lệnh = 0,35% + 0,40% + 0,45% + 0,50% = 1,70%

Không vượt theo phép tính đơn giản. Nhưng vẫn phải kiểm tra concentration và correlation; heat không thấy được gap đồng thời của các mã cùng ngành.

12. Các lỗi khiến playbook trông khoa học nhưng không đáng tin

Hindsight masquerading as a rule

“Mua breakout tốt, bỏ breakout xấu” chỉ phân loại được sau kết quả. Quy tắc phải dùng thông tin có tại thời điểm quyết định.

Indicator stacking

Thêm RSI, MACD, Bollinger Bands, stochastic, ADX và năm moving average có thể chỉ đếm lại cùng dữ liệu giá nhiều lần. Mỗi filter phải có giả thuyết, contribution riêng và test ablation.

Quá nhiều ngoại lệ

Nếu mỗi lệnh có một lý do khác để bỏ luật, bạn đang discretionary trade nhưng gắn nhãn systematic. Điều đó không cấm discretion; chỉ cần tách sample và đánh giá đúng.

Moving the goalpost

Stop 47.500 biến thành 46.000 vì “có hỗ trợ”, rồi 44.000 vì “định giá rẻ”. Đây là tăng rủi ro sau khi thông tin bất lợi xuất hiện.

Averaging down không có play riêng

Mua thêm làm giá vốn thấp hơn nhưng exposure lớn hơn. Nếu scale-in là chiến lược, tổng risk, các nấc entry và stop phải viết trước; nếu không, đó là vi phạm.

Outcome bias

Lệnh thắng không chứng minh quyết định tốt. Một sample thắng cũng chưa chứng minh edge nếu có selection bias, chi phí bị bỏ qua hoặc nhiều biến thể được thử nhưng chỉ báo cáo biến thể tốt nhất.

Data leakage

Dùng close hôm nay để giả định entry đúng close hôm nay; dùng danh sách index công bố sau đó; dùng BCTC đã restate mà không biết ngày công bố; dùng lịch sự kiện hoàn chỉnh trong backtest — đều có thể nhìn thấy tương lai.

Paper fill hoàn hảo

Giả định mọi limit đều khớp toàn bộ ở giá đẹp, mọi stop thoát đúng mức, không phí và không slippage sẽ biến execution thành nguồn lợi nhuận giả.

Sample mixing

Trộn long/short, bull/bear, daily/intraday và các play version rồi báo một win rate khiến con số gần như vô nghĩa.

13. Template trading playbook có thể sao chép

PLAY ID / VERSION:
STATUS: Research / Paper / Pilot / Live / Paused / Retired
OWNER / REVIEWER:
CREATED / LAST REVIEWED:

1. MANDATE
Market/instrument:
Direction:
Timeframe:
Expected holding period:
Decision frequency:
Leverage/shorting:

2. HYPOTHESIS
Ai có thể bị ép/mất kiên nhẫn?
Vì sao hành vi đó có thể tồn tại?
Điều gì khiến edge suy giảm?

3. DATA & UNIVERSE
Data source/version:
Point-in-time requirements:
Liquidity/price/listing filters:
Corporate-action treatment:
Event exclusions:

4. REGIME & CONTEXT
Exact conditions:
Timestamp availability:
Unknown/missing-data treatment:

5. SETUP
Every condition:
Setup start/end/expiry:
Borderline examples:

6. TRIGGER
Exact event:
Signal timestamp:
Trigger expiry:

7. ENTRY & EXECUTION
Order type:
Reference price:
Max/min acceptable fill:
Partial fill/cancel rule:
Gap rule:

8. INVALIDATION & RISK
Initial stop:
Risk budget formula:
Size formula:
Notional/liquidity cap:
Portfolio heat/cluster cap:
Gap/stress assumption:

9. MANAGEMENT & EXIT
Initial stop handling:
Profit/trailing rule:
Time stop:
Event/operational exit:
No discretionary widening:

10. NO-TRADE & KILL SWITCH
No-trade conditions:
Daily/weekly limits:
Pause triggers:
Restart authority/process:

11. JOURNAL SCHEMA
Required fields:
Screenshots/snapshots:
Exception codes:
Process score:

12. VALIDATION PLAN
Labeling agreement target:
Backtest sample/OOS split:
Costs/slippage model:
Sensitivity/ablation tests:
Paper/pilot graduation gate:

13. CHANGELOG
Version, date, change, reason, approved by:

14. Graduation gate — khi nào được chuyển bước?

Đừng chuyển từ một ý tưởng thô sang tiền thật trong một bước.

IDEA
  ↓ hypothesis có thể bác bỏ
SPECIFICATION
  ↓ 30-chart agreement đạt chuẩn
BACKTEST
  ↓ out-of-sample + costs + robustness đạt tiêu chí
PAPER TRADE
  ↓ tín hiệu và operations khớp thiết kế
SMALL PILOT
  ↓ fill/slippage/risk nằm trong tolerance
SCALED LIVE
  ↓ tăng dần theo dữ liệu, có kill switch
PAUSE / RETIRE nếu edge hoặc vận hành hỏng

Một gate mẫu trước khi paper trade:

  • Playbook không còn từ mơ hồ quan trọng.
  • Hai người đạt ≥80% agreement từng trường cốt lõi trên tập chưa xem.
  • Mọi signal có thể tái dựng từ dữ liệu point-in-time.
  • Có quy tắc cho missing data, gap, partial fill và sự kiện.
  • Sizing có ít nhất ba cap: stop-risk, notional/liquidity, portfolio.
  • Journal schema và process score đã sẵn sàng.

Gate trước live còn nghiêm hơn: backtest có out-of-sample, chi phí; paper trade xác nhận pipeline; small pilot xác nhận fill. Không có số giao dịch thần kỳ áp dụng cho mọi play; cần xem độ hiếm tín hiệu, phân phối, regime và uncertainty.

15. Bài kiểm tra cuối bài

Tình huống A

Mọi điều kiện đúng, lệnh khớp đúng size, stop đúng rule và kết thúc -1R. Trader tự chấm “lệnh tệ vì thua”.

Đáp án: sai. Đây có thể là lệnh tốt về quy trình. Cần đưa vào sample và đánh giá edge trên nhiều lệnh.

Tình huống B

Setup thiếu volume trigger nhưng trader vào vì sợ lỡ, sau đó lời +3R.

Đáp án: process violation. Gắn nhãn exception/discretionary, không đưa vào sample chuẩn của play; review vì hành vi sai được thưởng.

Tình huống C

Backtest dùng close ngày trigger làm entry, nhưng signal chỉ tính xong sau close.

Đáp án: look-ahead/execution bias. Dịch execution sang thời điểm thực tế có thể hành động và mô hình hóa gap, fill, phí.

Tình huống D

Hai người đồng thuận 95% về regime nhưng chỉ 60% về setup.

Đáp án: chưa đủ điều kiện backtest tự động tin cậy. Viết lại setup, thêm edge cases và kiểm tra trên tập mới.

Tình huống E

Một mã thỏa mọi technical rule nhưng kết quả kinh doanh công bố sáng mai; playbook loại sự kiện trong hai phiên.

Đáp án: no trade. Nếu muốn nghiên cứu earnings trade, tạo play riêng với gap-risk và dữ liệu sự kiện riêng; không phá play hiện tại.


Nguồn chuẩn và đọc thêm

Nguồn trên cung cấp cảnh báo và cơ chế giao dịch nền tảng; chúng không xác nhận play TPC-01 có lợi nhuận. Quy tắc sở giao dịch, thuế, phí, loại lệnh và bảo vệ nhà đầu tư thay đổi theo thị trường và thời điểm; kiểm tra tài liệu chính thức đang có hiệu lực nơi bạn giao dịch.

Bạn vừa xây được gì?

Bạn đã chuyển từ “chart này có vẻ đẹp” sang một cấu trúc có thể audit:

  • Biết mình giao dịch thị trường, universe, hướng và horizon nào.
  • Tách bối cảnh, setup, trigger, order và position.
  • Xác định invalidation trước entry và size từ risk budget.
  • Viết nhánh exit cho sai, đúng, đi ngang và sự cố.
  • Có no-trade list, portfolio heat và kill switch.
  • Chấm process độc lập với P&L.
  • Dùng bài tập 30 chart để phát hiện ngôn ngữ mơ hồ trước khi backtest.
  • Quản lý play bằng version và graduation gate.

Điểm cốt lõi: playbook không loại bỏ bất định; nó làm cho bất định có thể đo và quyết định có thể review. Một trader cảm tính hỏi “lệnh này có thắng không?”. Một operator trưởng thành hỏi: “Đây có đúng play không, rủi ro đã biết chưa, thực thi có đúng không, và dữ liệu sau lệnh sẽ giúp ta cập nhật điều gì?”

Phần tiếp theo, Phần 25 — Market regime và phân tích đa khung thời gian, sẽ giải quyết một thất bại phổ biến: cùng một setup hoạt động khác hẳn trong trend, range, volatility thấp, volatility shock và correlation spike. Ta sẽ xây regime dashboard tối giản, phân vai cho từng timeframe và ngăn việc đổi timeframe chỉ để né stop.