Bot V63 · Control Deck HỆ CHÍNH — REAL
chưa kết nối
bot: — server: ngoại tuyến
Quan trọngChế độ vận hành
Bot đang
—
—

CHẠY THỬ (DRY_RUN) = bot nhận tín hiệu, tính toán, ghi log nhưng KHÔNG đặt lệnh thật ra Schwab. CHẠY THẬT = đặt lệnh thật bằng tiền thật trên tài khoản đã khoá. Đổi ở đây ghi thẳng vào config.py trên VPS (giữ nguyên sau khi bot restart, có backup .bak) — không cần vào SSH terminal nữa. Nút này chỉ hoạt động khi đang xem hệ REAL — hệ TEST luôn khoá DRY_RUN, không đổi được qua dashboard (kể cả gọi thẳng API), giữ đúng nguyên tắc 2 hệ REAL/TEST chạy độc lập.

Trực tiếpTình trạng bot
Trạng thái
—
Vị thế
—
Lãi/lỗ hôm nay
—
ước lượng theo giá tín hiệu
Lệnh hôm nay
—
Lỗi API liên tiếp
—
tự dừng khi chạm ngưỡng
Tài khoản khóa
—
chỉ tài khoản này giao dịch
7 ngàyPhiên đăng nhập Schwab
Thời gian còn lại tới khi hết hạn
—
chưa rõ

Bước 1: Mở liên kết → đăng nhập thinkorswim → cho phép truy cập.

—

Bước 2: Sau khi cho phép, trình duyệt về trang trắng (127.0.0.1). Sao chép toàn bộ URL trên thanh địa chỉ, dán vào đây:

Schwab yêu cầu đăng nhập lại mỗi 7 ngày (không thể tự động hoàn toàn vì cần xác thực bảo mật). Bot nhắc trước 1 ngày qua Telegram và email. Thao tác gia hạn mất khoảng 30 giây.

Điều khiểnHành động nhanh

Dừng bot = ngừng nhận lệnh mới ngay. Vị thế đang mở không tự đóng — nếu cần, đóng tay trên thinkorswim. Chạy lại = cho bot nhận lệnh sau khi anh đã xử lý sự cố. Đối chiếu vị thế = so vị thế bot đang nhớ với Schwab thật; nếu lệch và "Tự đồng bộ khi lệch vị thế" (mục Rủi ro) đang TẮT thì bot sẽ HALT chờ anh xử lý tay. 🔧 Reset theo Schwab = ép ngay lập tức, bất kể cấu hình "Tự đồng bộ" đang bật/tắt — bot ghi đè vị thế nó nhớ bằng đúng vị thế thật trên Schwab và tự bỏ HALT nếu đã khớp. Dùng khi Đối chiếu báo LỆCH và anh đã xác nhận trên Schwab là đúng. Đồng bộ thông số = kéo lại toàn bộ chỉ số đúng như bot đang chạy (dùng khi nghi form hiển thị sai/cũ).

Lớp 2 · Tiền thậtCỡ lệnh & mã giao dịch (bot làm chủ khi live)

Khi chạy TIỀN THẬT, bot tự tính cỡ lệnh theo số ở đây, BỎ QUA cỡ lệnh của tool V62. Nhờ vậy anh chỉnh vốn ngay từ dashboard/điện thoại (tăng $200→$500→$1000) mà không phải sửa Pine. Tool V62 vẫn tự tính cỡ lệnh riêng khi backtest — nên số liệu backtest và tiền thật có thể khác cỡ lệnh (không sao, backtest chỉ để kiểm chiến thuật).

Chế độ vốn
Bot tự tính cỡ lệnh, ưu tiên số ở đây (ghi đè tool khi live).
Phần trăm vốn mỗi lệnh
Phần trăm vốn dùng cho mỗi lệnh. Dùng khi chế độ Theo % vốn.
%
Vốn ban đầu X ($)
V63.1: mốc vốn khởi điểm compound (mặc định $10,000). Bot dồn lãi/lỗ từ đây.
USD
Trần vốn tối đa Y ($)
V63.1: equity vượt Y thì lệnh cap ở Y (mặc định $100,000). Bảo vệ khỏi lệnh quá khổ.
USD
Mã giao dịch
⚠ Đổi khác SOXL: phải kiểm thử lại! Số liệu backtest SOXL không còn đúng.
Lớp 2 · Đặt lệnhMARKET hay LIMIT · trong giờ & ngoài giờ

9 ô dưới đây quyết định bot đặt lệnh kiểu MARKET (khớp ngay, đúng backtest, không khóa được trượt giá) hay LIMIT (khóa được trượt giá nhưng có thể bỏ lỡ lệnh) — tách riêng bộ cho giờ regular và ngoài giờ. Gom thành 3 khối liền nhau: ô cảnh báo chung → khối "🔀 Giờ Regular" → khối "🚦 Ngoài giờ Regular".

📟 Ngưỡng cảnh báo trượt giá MARKET (giờ regular)
Vai trò DUY NHẤT: CẢNH BÁO (không chặn lệnh) khi lệnh MARKET giờ regular khớp lệch quá X tick so với giá tín hiệu, để anh biết khung giờ nào đang trượt giá xấu. Trần LIMIT ngoài giờ dùng ô riêng "Khóa slippage ngoài giờ" trong khối 🚦 Ngoài giờ Regular bên dưới; trần LIMIT giờ regular dùng ô riêng "Khóa slippage giờ regular" trong khối 🔀 Giờ Regular ngay dưới đây. Ô này cũng là giá trị dự phòng chung nếu config.py chưa có REG_MAX_SLIPPAGE_TICKS/EXT_MAX_SLIPPAGE_TICKS riêng.
tick
🔀 KHỐI — Giờ Regular (09:30–16:00 NY)
Đặt lệnh giờ Regular: MARKET hay LIMIT?
⚠ MẶC ĐỊNH = MARKET (khớp đúng backtest, không bao giờ bỏ lỡ lệnh). Ô này CHỈ áp dụng cho giờ regular thật (09:30-16:00 NY) — KHÔNG liên quan gì tới khung 08:00-09:30 pre-market (khung đó luôn dùng LIMIT bất kể ô này bật/tắt, do khối "🚦 Ngoài giờ Regular" bên dưới quyết định). Chuyển sang LIMIT = dùng 3 ô bên dưới trong khối này để đặt biên giá — CÓ THỂ BỎ LỠ lệnh nếu giá chạy nhanh hơn biên (khác MARKET — không bao giờ bỏ lỡ, nhưng cũng không khóa được trượt giá). Chỉ đổi sang LIMIT sau khi đã hiểu đánh đổi này.
MARKET
Biên giá LIMIT giờ regular
Chỉ có tác dụng khi ô "Đặt lệnh giờ Regular: MARKET hay LIMIT?" ở trên đang để LIMIT — để MARKET (mặc định) thì ô này mờ đi, không dùng tới. TÁCH RIÊNG khỏi "Biên giá LIMIT ngoài giờ" trong khối 🚦 Ngoài giờ Regular bên dưới — giờ regular thanh khoản dày hơn, thường chỉnh hẹp hơn. Chưa lưu qua "Lưu vĩnh viễn" thì bot tự dùng chung giá trị ngoài giờ (an toàn ngược).
%
Khóa slippage giờ regular (tick)
Chỉ có tác dụng khi ô "Đặt lệnh giờ Regular: MARKET hay LIMIT?" ở trên đang để LIMIT — để MARKET (mặc định) thì ô này mờ đi, không dùng tới. TÁCH RIÊNG khỏi ô "Khóa slippage ngoài giờ" trong khối 🚦 Ngoài giờ Regular bên dưới. Chưa lưu qua "Lưu vĩnh viễn" thì bot tự dùng chung giá trị ngoài giờ (an toàn ngược). ⚠ LƯU Ý QUAN TRỌNG: trần này CHỈ chặn biên của lệnh LIMIT ĐẦU TIÊN (gốc) — nếu lệnh không khớp và bot tự đặt lại (xem khối 🔁 Retry bên dưới), phần biên NỚI THÊM mỗi lần retry KHÔNG bị trần này chặn. Muốn chặn CẢ retry, dùng ô "🛡 Trần tổng CHUNG" trong khối 🔁 Retry.
tick
Hủy LIMIT giờ regular nếu không khớp sau
Chỉ có tác dụng khi ô "Đặt lệnh giờ Regular: MARKET hay LIMIT?" ở trên đang để LIMIT — để MARKET (mặc định) thì ô này mờ đi, không dùng tới. Thời gian chờ riêng cho giờ regular — thanh khoản dày nên thường chỉnh ngắn hơn ngoài giờ. Chưa lưu qua "Lưu vĩnh viễn" thì bot tự dùng chung giá trị ngoài giờ (an toàn ngược).
giây
🚦 KHỐI — Ngoài giờ Regular (Tầng 1)
🚦 TẦNG 1 — Cho phép đặt lệnh ngoài giờ regular
Giờ regular (9:30-16:00 NY) LUÔN chạy bình thường, KHÔNG bị nút này ảnh hưởng. BẬT (mặc định): ngoài giờ regular dùng LIMIT để khớp được, khung giờ nào chạy do các khung ⑤ bên dưới (Tầng 2) quyết định. TẮT: bot bỏ qua HẲN tín hiệu MUA ngoài giờ regular (kể cả khung nào đang bật ở dưới) — 3 ô biên giá/khóa slippage/hủy LIMIT ngoài giờ trong khối này cũng mờ theo, không còn tác dụng, và cả bảng khung giờ ⑤ bên dưới cũng mờ những khung nào hoàn toàn ngoài giờ regular. Lệnh BÁN đóng vị thế đang giữ vẫn luôn được phép ngoài giờ dù tắt nút này (an toàn — không kẹt vị thế).

⚠ Lưu ý khung "① Mở cửa Mỹ 08-11h" (giao 2 vùng giờ): khung này chạy 08:00-11:00, nhưng ranh giới regular thật là 09:30 nằm NGAY GIỮA khung — bot tự tách theo đúng phút tín hiệu tới, KHÔNG cần 2 checkbox riêng: phần 08:00-09:29 (còn pre-market) bị nút Tầng 1 này chi phối (TẮT → bỏ qua); phần 09:30-11:00 (đã vào regular thật) chạy MARKET bình thường, KHÔNG liên quan gì tới nút Tầng 1 nữa — dù TẮT vẫn chạy nếu checkbox khung ① đang bật. Khung "③ Sáng sớm 04-08h" thì toàn bộ đều là pre-market (04:00-08:00, trước cả ranh giới 08h) nên chịu chi phối 100% bởi nút Tầng 1.
bật
Biên giá LIMIT ngoài giờ
Mua đặt cao hơn / bán thấp hơn giá tín hiệu 1 chút để dễ khớp. Khuyên 0.05-0.08%. Chỉ có tác dụng khi Tầng 1 ở trên đang BẬT.
%
Khóa slippage ngoài giờ (tick)
Trần biên LIMIT ngoài giờ tính bằng tick — biên THỰC dùng = MIN(biên giá % ở trên, trần tick này). TÁCH RIÊNG khỏi ô "Khóa slippage giờ regular" của khối 🔀 Giờ Regular phía trên (trước đây 2 khung giờ dùng chung 1 biến, gây hiểu nhầm là "trùng nhau" — nay độc lập hoàn toàn, xem giải thích ở ô "Ngưỡng cảnh báo trượt giá" trên cùng). Chỉ có tác dụng khi Tầng 1 ở trên đang BẬT. ⚠ LƯU Ý QUAN TRỌNG: trần này CHỈ chặn biên của lệnh LIMIT ĐẦU TIÊN (gốc) — nếu lệnh không khớp và bot tự đặt lại (xem khối 🔁 Retry bên dưới), phần biên NỚI THÊM mỗi lần retry KHÔNG bị trần này chặn. Muốn chặn CẢ retry, dùng ô "🛡 Trần tổng CHUNG" trong khối 🔁 Retry.
tick
Hủy LIMIT ngoài giờ nếu không khớp sau
Ngoài giờ thanh khoản mỏng — nếu LIMIT treo quá lâu thì hủy, tránh kẹt. Chỉ có tác dụng khi Tầng 1 ở trên đang BẬT.
giây
🔁 KHỐI — Tự động đặt lại lệnh (Retry) khi LIMIT không khớp
Số lần thử lại LIMIT
Khi 1 lệnh LIMIT (giờ Regular hoặc ngoài giờ) hết thời gian chờ mà chưa khớp, bot tự đặt lại tối đa số lần này, mỗi lần biên nới rộng hơn (xem ô kế bên). 0 = tắt hẳn retry, hết giờ chờ là hủy luôn (đúng hành vi trước khi có tính năng này). Áp dụng cho cả MUA và BÁN. Bot DỪNG retry theo SỐ LẦN này, KHÔNG theo trần tick nào — ví dụ đặt 5 lần thì tối đa retry 5 lần dù biên đã nới bao xa, trừ khi đụng "🛡 Trần tổng CHUNG" bên dưới thì dừng sớm hơn. Mỗi lần chờ tối đa bằng ô "Hủy LIMIT ... nếu không khớp sau" (Reg/Ext riêng) rồi mới thử lần kế — không có khoảng nghỉ thêm giữa các lần.
lần
Mỗi lần thử lại nới biên thêm
Lần thử lại thứ N, biên LIMIT được cộng thêm N × số tick này so với biên GỐC (ví dụ 2 tick/lần: lần 1 +2 tick, lần 2 +4 tick, lần 3 +6 tick...) — luôn tính lại từ giá tín hiệu ban đầu, không phải "giá lần trước + thêm tick", nhưng ra kết quả số học giống nhau vì biên gốc không đổi giữa các lần. Chỉ có tác dụng khi ô "Số lần thử lại LIMIT" ở trên > 0. Phần nới thêm này KHÔNG bị chặn bởi "Khóa slippage giờ regular/ngoài giờ" ở các khối trên — 2 ô đó chỉ áp cho biên GỐC (lần đặt đầu tiên). Muốn chặn cả phần nới thêm, dùng ô "🛡 Trần tổng CHUNG" bên dưới.
tick/lần
🛡 Trần tổng CHUNG (chi phối MỌI biên LIMIT)
🆕 04/09 — tham số quản trị rủi ro tổng, theo yêu cầu anh David. Đây là trần CỨNG DUY NHẤT áp cho TỔNG biên hiệu lực (biên gốc % HOẶC khóa slippage Reg/Ext ở trên — lấy MIN — CỘNG THÊM phần nới do retry) của MỌI lệnh LIMIT: cả gốc lẫn retry, cả giờ Regular lẫn ngoài giờ. Khác 2 ô "Khóa slippage" Reg/Ext ở các khối trên (chỉ chặn biên GỐC, không chặn retry) — ô này là lớp bảo vệ TRÊN CÙNG, cộng thêm chứ không thay thế 2 lớp kia. Nếu biên tính ra vượt trần này, bot tự hạ về đúng bằng trần (giá LIMIT không thể vượt quá) VÀ dừng retry sớm luôn dù ô "Số lần thử lại" ở trên chưa hết (vì nới thêm nữa cũng ra y hệt giá đã bị chặn, retry thêm chỉ tốn 1 lệnh vô nghĩa). Để trống = KHÔNG áp trần tổng, giữ nguyên hành vi hiện tại (mặc định, an toàn ngược). ⚠ Muốn "Lưu vĩnh viễn" ô này cần anh thêm tay dòng GLOBAL_MAX_SLIPPAGE_TICKS = <số> vào config.py (nano) trên VPS trước — giống mọi tham số mới khác, dashboard không tự thêm dòng mới vào file.
tick
Ép MARKET nếu BÁN hết lượt retry vẫn chưa khớp
BẬT (khuyên dùng — mặc định): sau khi hết lượt thử lại LIMIT mà lệnh BÁN vẫn chưa khớp, bot tự ép MARKET để CHẮC CHẮN đóng được vị thế thật (ưu tiên AN TOÀN hơn giá đẹp — vị thế mở treo cả ngày nguy hiểm hơn trượt giá 1 chút). TẮT: chỉ báo CRITICAL, KHÔNG tự ép — vị thế vẫn còn mở thật, anh phải xử lý tay qua TOS/dashboard hoặc chờ tín hiệu BÁN kế tiếp. Chỉ áp dụng cho lệnh BÁN — lệnh MUA hết retry luôn bị bỏ (không ép), vì không mua thì không có rủi ro gì thêm.
bật
Rủi roGiới hạn an toàn
Cắt lỗ mỗi lệnh 🔒
Đặt trong tool Pine (SL −1% + Time-Stop). Chỉ hiển thị.
tool
Trần vốn mỗi lệnh
Không lệnh nào vượt số tiền này (chốt cứng).
USD
Trần số cổ mỗi lệnh
Dù đủ tiền theo trần vốn $, cũng KHÔNG mua/bán quá số cổ này 1 lệnh — chốt cứng độc lập, chặn trước cả 2 trần vốn $ ở trên. Trước đây chỉ sửa được bằng SSH vào config.py, giờ chỉnh ngay ở đây.
cổ
Cách tính lỗ ngày
Theo % vốn đầu ngày (giờ New York) hoặc số tiền cố định.
Giới hạn lỗ ngày (%)
Lỗ chạm % vốn đầu ngày → bot dừng, báo về điện thoại.
%
Giới hạn lỗ ngày ($)
Lỗ chạm số tiền này → bot dừng, báo về điện thoại.
USD
Lỗ liên tiếp tối đa
Thua liên tục chạm số này → bot dừng (chặn chuỗi xui).
lệnh
Lỗi API liên tiếp tối đa
Lỗi gọi Schwab liên tục chạm số này → bot dừng (chặn khi mất kết nối/lỗi sàn).
lỗi
Số lệnh tối đa mỗi ngày
Vượt số này → bot dừng (chặn loạn tín hiệu).
lệnh
Tự đồng bộ khi lệch vị thế
Tắt (khuyên dùng) = lệch thì dừng, chờ anh xử lý.
tắt
Tự đóng lệnh cuối phiên (EOD an toàn)
BẬT (khuyên dùng) = bot TỰ đóng mọi lệnh gần giờ đóng cửa, không phụ thuộc tín hiệu tool. Tránh ôm lệnh qua đêm (SOXL 3x có thể gap -3~5% sáng sau). Lớp phanh độc lập.
bật
Giờ đóng lệnh cuối phiên (NY)
Giờ bot bắt đầu tự đóng lệnh, dạng HHMM. Mặc định 1555 (15:55, trước đóng cửa 16:00). Chỉ có tác dụng khi "Tự đóng lệnh cuối phiên" đang BẬT.
HHMM
Lớp 2 · GiờKhung giờ BOT vào/ra lệnh (sắp theo ưu tiên lãi)

8 khung giờ xếp hạng KÉP: PF backtest + độ tin cậy thanh khoản thật. Bot chỉ vào lệnh ở khung đang BẬT. Số ①②③④⑤ = hạng ưu tiên chạy thật (① tốt nhất → ⑤ tránh). ⚠ LƯU Ý QUAN TRỌNG: hạng KHÔNG chỉ theo PF! Giờ thanh khoản mỏng (đêm/pre-market) có PF backtest cao NHƯNG slippage thật 8-15 tick sẽ ăn hết lời → xếp hạng thấp. Giờ mở cửa Mỹ thanh khoản dày, PF khiêm tốn nhưng AN TOÀN → hạng ①. Mặc định BẬT 3 khung HẠNG 1 (giờ Mỹ dày). Mở HẠNG 3+ chỉ sau khi đo slippage thật (GĐ2). Ghi kèm giờ NY + VN + PF4 + thanh khoản.

📊 Xem báo cáo phân tích

Lưu tạm = áp ngay cho bot đang chạy, mất khi bot khởi động lại. Lưu vĩnh viễn = ghi luôn vào config.py trên VPS (có backup .bak), giữ nguyên sau khi restart. Cả hai đều cần khóa bí mật đúng.

Hiệu quảThống kê real-time
Profit Factor
—
mục tiêu ≥ 1.3
Win Rate
—
—
Tỷ lệ R:R
—
lãi TB ÷ lỗ TB
Kỳ vọng/lệnh
—
expectancy
Tổng Net
—
—
Chuỗi thắng/thua
—
dài nhất

Tính từ toàn bộ lệnh đã đóng của bot (thư mục data/). Cập nhật mỗi 5 giây cùng dashboard. Xem chi tiết theo khung giờ và lý do thoát ở báo cáo phân tích.

SlippageThống kê trượt giá · hôm nay
Lệnh bị lệch tick
—
—
Tổng tick lệch
—
cộng dồn |tick| hôm nay
$ trượt giá hôm nay
—
tổng chênh lệch $ (đã âm/dương)
Lệnh bị khóa tick / hủy
—
không khớp do khóa slippage

1 tick SOXL = $0.01/cổ (Reg NMS). $ trượt giá = số tick × $0.01 × số cổ mỗi lệnh — không phải hằng số, tùy size lệnh. Tính lại mỗi 5 giây, chỉ tính các lệnh có dữ liệu chênh lệch (cột diff_ticks, đã bật từ 03/09 — lệnh cũ trước đó không có).

Khớp lệnhTỷ lệ khớp theo khung giờ · 24h qua
Khung giờ (NY)Lệnh đặtKhớpKhông khớpLý doTỷ lệ khớp
Chưa có dữ liệu khớp lệnh trong 24h qua.

Chỉ tính 24 giờ gần nhất. Cột "Lý do" giúp chỉnh đúng tham số:
• Trượt giá (giờ regular): giá chạy quá ngưỡng khóa slippage → chỉnh 🔒 Khóa Slippage (nới tick nếu bỏ lỡ nhiều lệnh khi biến động mạnh; siết nếu muốn bảo vệ edge).
• Hết giờ LIMIT (ngoài giờ): LIMIT treo không khớp kịp → chỉnh Hủy LIMIT sau (giây) (tăng thời gian chờ) hoặc Biên giá LIMIT (nới biên để dễ khớp).
• Khác: hủy do lý do khác (reconcile, cancel_orders...).
Tỷ lệ khớp <80% = bot mất nhiều lệnh so với backtest → xem lý do để chỉnh.

Nhật kýLịch sử giao dịch
Ngày / GiờMãSizeGiá muaGiá bán Tiền vàoTổng bánLãi/Lỗ Giá alertChênh lệch $Tick trượt Lý do thoát
Chưa có giao dịch. Kết nối bot để xem lịch sử.

Mỗi hàng là 1 lượt giao dịch trọn vẹn (ghép lệnh mua với lệnh bán). Lệnh đang mở (chưa bán) hiện ở trên cùng, chưa có giá bán. Dữ liệu từ thư mục data/ của bot.

Hệ thốngNhật ký hoạt động
— chưa kết nối —