VN Breakout Trade Planner — Lập kế hoạch breakout cổ phiếu Việt Nam
Tổng quan
Skill tích hợp kết hợp các skill VN khác để lập kế hoạch giao dịch breakout long hoàn chỉnh:
- Position size với lô 100, biên độ giá, phí + thuế (logic từ
vn-position-sizer)
- VN guardrails:
- Stop phải nằm trên giá sàn của phiên đầu (nếu không, biên độ sẽ chặn cắt lỗ)
- Pivot không thể nằm trên giá trần (lệnh breakout không khớp)
- Plan T+2.5: ngày đầu tiên có thể bán
- Target levels R-multiple (mặc định 1R, 2R, 3R)
- Optional ngữ cảnh:
- Sector của mã có đang dẫn dắt không? (feed từ
vn-sector-analyst)
- Room ngoại của mã có "hot" không? (feed từ
vn-foreign-room-tracker)
Khi nào dùng
- User xác định một setup breakout cụ thể trên cổ phiếu VN
- Cần kế hoạch entry/stop/target trước khi đặt lệnh
- Muốn xác minh setup không vi phạm guardrails VN (biên độ, T+2.5)
- Trước khi commit vốn cho một swing trade
Điều kiện tiên quyết
- Python 3.9+ (chỉ standard library)
- Không cần API key
- Hữu ích nếu có sẵn output của
vn-sector-analyst và vn-foreign-room-tracker
- Tham chiếu:
skills/vn-market-mechanics/references/
Workflow
Bước 1: Xác định setup
User cung cấp:
- Symbol + exchange
- Setup type:
breakout (vượt đỉnh nền), pullback (pullback tới EMA/MA), vcp (volatility contraction)
- Pivot price: mức giá breakout (entry trigger)
- Stop price: giá cắt lỗ (mức invalidate setup)
- Reference price: giá đóng cửa phiên gần nhất (để tính trần/sàn — tùy chọn, mặc định = pivot)
- Account size + risk %
- Tuỳ chọn: ATR cho stop-distance gợi ý, target_r_multiples (mặc định 1,2,3)
Bước 2: Chạy script
# Breakout cơ bản
python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \
--account-size 1000000000 \
--symbol VIC --exchange hose \
--setup-type breakout \
--pivot 45000 --stop 42000 \
--risk-pct 1.0 \
--output-dir reports/
# Pullback với ATR-based stop
python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \
--account-size 500000000 \
--symbol HPG --exchange hose \
--setup-type pullback \
--pivot 28000 --atr 800 --atr-multiplier 2.0 \
--risk-pct 1.0 --reference-price 27500 \
--output-dir reports/
# Với ngữ cảnh sector + room
python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \
--account-size 1000000000 \
--symbol FPT --exchange hose \
--setup-type breakout \
--pivot 142000 --stop 135000 \
--risk-pct 1.0 \
--sector-analysis-file reports/vn_sector_analysis_2026-05-13_*.json \
--foreign-room-file reports/vn_foreign_room_report_2026-05-13_*.json \
--output-dir reports/
Bước 3: Đọc kế hoạch
Output gồm:
- Vị thế: số CP (lô 100), giá trị vị thế, rủi ro VND, %rủi ro thực tế
- Trigger conditions:
- Buy: giá ≥ pivot (giả định breakout intraday)
- Stop: giá ≤ stop (đặt thủ công sau khi mua, hoặc cảnh báo)
- Targets:
- T1 (1R): chốt 1/3
- T2 (2R): chốt 1/3
- T3 (3R): trail stop hoặc chốt 1/3
- VN warnings:
- Stop dưới giá sàn → biên độ chặn cắt lỗ
- Pivot trên giá trần → lệnh không khớp
- Trên giá trần (giá đã chạy) → setup đã muộn
- Lịch T+:
- D0 (hôm nay): Mua nếu giá vượt pivot
- D+1, D+2 sáng: CP chưa về tài khoản, không thể bán
- D+2 chiều: CP về, có thể bán cắt lỗ tích cực
- Context (nếu có):
- Sector của mã đang
leader / laggard / stable
- Room ngoại đang
full / high_usage / released / normal
Output Format
{
"schema_version": "1.0",
"subcommand": "plan",
"as_of": "2026-05-13T10:00:00+07:00",
"symbol": "VIC",
"exchange": "hose",
"setup_type": "breakout",
"trade_plan": {
"pivot": 45000,
"stop": 42000,
"risk_per_share_vnd": 3000,
"shares": 3300,
"position_value_vnd": 148500000,
"risk_vnd": 9900000,
"risk_pct": 0.99,
"targets": [
{"name": "T1 (1R)", "price": 48000, "size_fraction": 0.33},
{"name": "T2 (2R)", "price": 51000, "size_fraction": 0.33},
{"name": "T3 (3R)", "price": 54000, "size_fraction": 0.34}
]
},
"vn_market_context": {
"reference_price": 45000,
"ceiling_price": 48150,
"floor_price": 41850,
"price_band_pct": 7.0,
"pivot_below_ceiling": true,
"stop_above_floor": true,
"pivot_above_yesterday_close_pct": 0.0
},
"fees_and_taxes_estimate": {
"buy_fee_vnd": 222750,
"sell_fee_vnd_at_pivot": 222750,
"sell_tax_vnd_at_pivot": 148500,
"round_trip_cost_vnd": 594000,
"round_trip_cost_pct": 0.4
},
"t_plus_calendar": {
"buy_date_label": "D0 (hôm nay)",
"stock_in_account_label": "D+2 chiều",
"first_sellable_label": "D+2 chiều",
"notes": [
"Không thể bán intraday vào D0",
"D+1 và sáng D+2: CP chưa về, chỉ có thể đặt lệnh chờ",
"Stop intraday giả định bằng giá đóng cửa cho đến D+2 chiều"
]
},
"context": {
"sector": {"name": "Real Estate", "status": "leader", "rs_20d": 2.5},
"foreign_room": {"status": "high_usage", "room_used_pct": 92.0, "msg": "..."}
},
"warnings": [],
"checklist": [
"Đã ghi thesis vào journal",
"Stop nằm trên giá sàn phiên đầu",
"Tổng portfolio heat (open risk) ≤ 6-8%",
"Vị thế ≤ 10% account, ngành ≤ 30%"
]
}
Resources
scripts/vn_breakout_planner.py — script chính
- Tham chiếu chéo:
skills/vn-position-sizer/ — chia sẻ logic sizing (vendor inline)
skills/vn-market-mechanics/references/vn_price_limits_orders.md — biên độ
skills/vn-sector-analyst/ — input sector context
skills/vn-foreign-room-tracker/ — input foreign room context
Nguyên tắc
- Setup invalid → reject, không cố tính — Pivot trên trần, stop dưới sàn quá xa, hay risk_per_share quá lớn vs giá → fail fast với cảnh báo rõ ràng.
- Lô 100 không tránh được — Sau khi tính shares, làm tròn xuống. Risk thực tế hơi thấp hơn target.
- R-multiple targets có ý nghĩa — Chốt 1/3 mỗi mức để vừa lock profit vừa cho phần còn lại chạy. Nếu user muốn khác, cho phép custom qua
--targets 1,2,3 hoặc --targets 2,4.
- T+2.5 phải xuất hiện trong plan — Đây là điểm khác biệt lớn nhất với Mỹ; bỏ sót dễ dẫn tới surprise.
- Context optional, không bắt buộc — User có thể chạy plan mà không cần sector + room data; chúng là bonus.
1---2name: vn-breakout-trade-planner3description: Lập kế hoạch giao dịch breakout (long) cho cổ phiếu Việt Nam — pivot, stop, target R-multiple, position size lô 100, kiểm tra giá trần/sàn, kế hoạch T+2.5 (ngày sellable đầu tiên), tích hợp ngữ cảnh sector/room ngoại. Plan VN long breakout trades — pivot, stop, R-multiple targets, lot-100 sizing, ceiling/floor checks, T+2.5 sellable-day plan, optional sector + foreign-room context. Trigger when user wants to plan a breakout/pullback/VCP entry on HOSE/HNX/UPCOM stock.4---56# VN Breakout Trade Planner — Lập kế hoạch breakout cổ phiếu Việt Nam78## Tổng quan910Skill **tích hợp** kết hợp các skill VN khác để lập kế hoạch giao dịch breakout long hoàn chỉnh:1112- **Position size** với lô 100, biên độ giá, phí + thuế (logic từ `vn-position-sizer`)13- **VN guardrails:**14 - Stop phải nằm trên giá sàn của phiên đầu (nếu không, biên độ sẽ chặn cắt lỗ)15 - Pivot không thể nằm trên giá trần (lệnh breakout không khớp)16 - Plan T+2.5: ngày đầu tiên có thể bán17- **Target levels** R-multiple (mặc định 1R, 2R, 3R)18- **Optional ngữ cảnh:**19 - Sector của mã có đang dẫn dắt không? (feed từ `vn-sector-analyst`)20 - Room ngoại của mã có "hot" không? (feed từ `vn-foreign-room-tracker`)2122## Khi nào dùng2324- User xác định một setup breakout cụ thể trên cổ phiếu VN25- Cần kế hoạch entry/stop/target trước khi đặt lệnh26- Muốn xác minh setup không vi phạm guardrails VN (biên độ, T+2.5)27- Trước khi commit vốn cho một swing trade2829## Điều kiện tiên quyết3031- Python 3.9+ (chỉ standard library)32- Không cần API key33- Hữu ích nếu có sẵn output của `vn-sector-analyst` và `vn-foreign-room-tracker`34- Tham chiếu: `skills/vn-market-mechanics/references/`3536## Workflow3738### Bước 1: Xác định setup3940User cung cấp:41- **Symbol + exchange**42- **Setup type:** `breakout` (vượt đỉnh nền), `pullback` (pullback tới EMA/MA), `vcp` (volatility contraction)43- **Pivot price:** mức giá breakout (entry trigger)44- **Stop price:** giá cắt lỗ (mức invalidate setup)45- **Reference price:** giá đóng cửa phiên gần nhất (để tính trần/sàn — tùy chọn, mặc định = pivot)46- **Account size + risk %**47- **Tuỳ chọn:** ATR cho stop-distance gợi ý, target_r_multiples (mặc định 1,2,3)4849### Bước 2: Chạy script5051```bash52# Breakout cơ bản53python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \54 --account-size 1000000000 \55 --symbol VIC --exchange hose \56 --setup-type breakout \57 --pivot 45000 --stop 42000 \58 --risk-pct 1.0 \59 --output-dir reports/6061# Pullback với ATR-based stop62python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \63 --account-size 500000000 \64 --symbol HPG --exchange hose \65 --setup-type pullback \66 --pivot 28000 --atr 800 --atr-multiplier 2.0 \67 --risk-pct 1.0 --reference-price 27500 \68 --output-dir reports/6970# Với ngữ cảnh sector + room71python3 skills/vn-breakout-trade-planner/scripts/vn_breakout_planner.py \72 --account-size 1000000000 \73 --symbol FPT --exchange hose \74 --setup-type breakout \75 --pivot 142000 --stop 135000 \76 --risk-pct 1.0 \77 --sector-analysis-file reports/vn_sector_analysis_2026-05-13_*.json \78 --foreign-room-file reports/vn_foreign_room_report_2026-05-13_*.json \79 --output-dir reports/80```8182### Bước 3: Đọc kế hoạch8384Output gồm:85- **Vị thế:** số CP (lô 100), giá trị vị thế, rủi ro VND, %rủi ro thực tế86- **Trigger conditions:**87 - Buy: giá ≥ pivot (giả định breakout intraday)88 - Stop: giá ≤ stop (đặt thủ công sau khi mua, hoặc cảnh báo)89- **Targets:**90 - T1 (1R): chốt 1/391 - T2 (2R): chốt 1/392 - T3 (3R): trail stop hoặc chốt 1/393- **VN warnings:**94 - Stop dưới giá sàn → biên độ chặn cắt lỗ95 - Pivot trên giá trần → lệnh không khớp96 - Trên giá trần (giá đã chạy) → setup đã muộn97- **Lịch T+:**98 - D0 (hôm nay): Mua nếu giá vượt pivot99 - D+1, D+2 sáng: CP chưa về tài khoản, không thể bán100 - D+2 chiều: CP về, có thể bán cắt lỗ tích cực101- **Context (nếu có):**102 - Sector của mã đang `leader` / `laggard` / `stable`103 - Room ngoại đang `full` / `high_usage` / `released` / `normal`104105## Output Format106107```json108{109 "schema_version": "1.0",110 "subcommand": "plan",111 "as_of": "2026-05-13T10:00:00+07:00",112 "symbol": "VIC",113 "exchange": "hose",114 "setup_type": "breakout",115 "trade_plan": {116 "pivot": 45000,117 "stop": 42000,118 "risk_per_share_vnd": 3000,119 "shares": 3300,120 "position_value_vnd": 148500000,121 "risk_vnd": 9900000,122 "risk_pct": 0.99,123 "targets": [124 {"name": "T1 (1R)", "price": 48000, "size_fraction": 0.33},125 {"name": "T2 (2R)", "price": 51000, "size_fraction": 0.33},126 {"name": "T3 (3R)", "price": 54000, "size_fraction": 0.34}127 ]128 },129 "vn_market_context": {130 "reference_price": 45000,131 "ceiling_price": 48150,132 "floor_price": 41850,133 "price_band_pct": 7.0,134 "pivot_below_ceiling": true,135 "stop_above_floor": true,136 "pivot_above_yesterday_close_pct": 0.0137 },138 "fees_and_taxes_estimate": {139 "buy_fee_vnd": 222750,140 "sell_fee_vnd_at_pivot": 222750,141 "sell_tax_vnd_at_pivot": 148500,142 "round_trip_cost_vnd": 594000,143 "round_trip_cost_pct": 0.4144 },145 "t_plus_calendar": {146 "buy_date_label": "D0 (hôm nay)",147 "stock_in_account_label": "D+2 chiều",148 "first_sellable_label": "D+2 chiều",149 "notes": [150 "Không thể bán intraday vào D0",151 "D+1 và sáng D+2: CP chưa về, chỉ có thể đặt lệnh chờ",152 "Stop intraday giả định bằng giá đóng cửa cho đến D+2 chiều"153 ]154 },155 "context": {156 "sector": {"name": "Real Estate", "status": "leader", "rs_20d": 2.5},157 "foreign_room": {"status": "high_usage", "room_used_pct": 92.0, "msg": "..."}158 },159 "warnings": [],160 "checklist": [161 "Đã ghi thesis vào journal",162 "Stop nằm trên giá sàn phiên đầu",163 "Tổng portfolio heat (open risk) ≤ 6-8%",164 "Vị thế ≤ 10% account, ngành ≤ 30%"165 ]166}167```168169## Resources170171- `scripts/vn_breakout_planner.py` — script chính172- Tham chiếu chéo:173 - `skills/vn-position-sizer/` — chia sẻ logic sizing (vendor inline)174 - `skills/vn-market-mechanics/references/vn_price_limits_orders.md` — biên độ175 - `skills/vn-sector-analyst/` — input sector context176 - `skills/vn-foreign-room-tracker/` — input foreign room context177178## Nguyên tắc1791801. **Setup invalid → reject, không cố tính** — Pivot trên trần, stop dưới sàn quá xa, hay risk_per_share quá lớn vs giá → fail fast với cảnh báo rõ ràng.1812. **Lô 100 không tránh được** — Sau khi tính shares, làm tròn xuống. Risk thực tế hơi thấp hơn target.1823. **R-multiple targets có ý nghĩa** — Chốt 1/3 mỗi mức để vừa lock profit vừa cho phần còn lại chạy. Nếu user muốn khác, cho phép custom qua `--targets 1,2,3` hoặc `--targets 2,4`.1834. **T+2.5 phải xuất hiện trong plan** — Đây là điểm khác biệt lớn nhất với Mỹ; bỏ sót dễ dẫn tới surprise.1845. **Context optional, không bắt buộc** — User có thể chạy plan mà không cần sector + room data; chúng là bonus.