EA GoldenRobberGoldenRobber EA

Build & releaseBuilds & releases

Bản nào đang chạy production, bản nào đang test hay đang phát triển, lấy lại binary ở đâu và cần làm gì trước khi đưa một build lên production. Which build runs in production, which ones are under test or in development, where to recover a binary, and what to do before promoting a build to production.

  • Cập nhậtUpdated 18/09/2026
  • NguồnSource RELEASES.md
  • Release note mới nhấtLatest release note 1.42 b3 · 1.42 b2
Đọc trước khi deployRead before deploying

Đọc trang này trước khi deploy, rollback hoặc so sánh bản. Nguồn chân lý là RELEASES.md: khi đổi bản production, sửa mục Tra nhanh và mục 1 của file đó trước tiên, rồi cập nhật trang này.

Read this page before deploying, rolling back or comparing builds. The source of truth is RELEASES.md: when the production build changes, update its Quick lookup and section 1 first, then update this page.

Tra nhanhQuick lookup

Câu hỏiQuestion Trả lờiAnswer
Production đang chạy bản nào?Which build runs in production? GoldenRobber-1.42 · build b7 (commit 663082f) — deploy 2026-09-29, config v1.42.b7-pass58.set (mục b7). Rollback: b6 ở commit 3fc37eaGoldenRobber-1.42 · build b7 (commit 663082f) — deployed 2026-09-29, config v1.42.b7-pass58.set (section b7). Rollback: b6 at commit 3fc37ea
Có hotfix nào sẵn sàng?Is a hotfix ready? b21.1 = b21 + Manual Init Pause — file GoldenRobber-1.41.4-b21.1.ex5 (chưa deploy)b21.1 = b21 + Manual Init Pause — file GoldenRobber-1.41.4-b21.1.ex5 (not deployed)
Bản đang test?Build under test? GoldenRobber-1.41.4 · build b28
Bản đang phát triển?Build in development? Không có — b7 đã lên production ngày 2026-09-29.None — b7 went to production on 2026-09-29.
Lấy lại binary production ở đâu?Where do I recover the production binary? Commit 71dac5f — xem mục 2Commit 71dac5f — see section 2
File archive/GoldenRobber-1.41.4.ex5 có phải production không?Is archive/GoldenRobber-1.41.4.ex5 the production build? KHÔNG — đó là b28 (dòng test, đã chuyển vào archive/). Production là 1.42 b7 ở gốc repo.NO — that is b28 (the test line, now under archive/). Production is 1.42 b7 at the repo root.

1. Trạng thái1. Status

Vai tròRole File Build Commit NgàyDate Ghi chúNotes
CŨ GoldenRobber-1.41.4 b21 2bbd135 (source) · 71dac5f (.ex5) 2026-08-31 Chỉ còn trong git historyOnly exists in git history
HOTFIX (chưa deploy)(not deployed) GoldenRobber-1.41.4-b21.1 b21.1 77b12cd 2026-09-12 b21 + Manual Init Pause, xem mục 2bb21 + Manual Init Pause, see section 2b
TEST GoldenRobber-1.41.4 b28 0eee481 2026-09-04 Bản đang nằm trong working treeThe build currently in the working tree
PRODUCTION GoldenRobber-1.42 b7 663082f 2026-09-29 b6 + Manual force add direction: bật thì chỉ phía manual được bồi; config v1.42.b7-pass58.set (mục b7)b6 + Manual force add direction: when on, only the manual side gets adds; config v1.42.b7-pass58.set (section b7)
CŨ GoldenRobber-1.42 b6 3fc37ea 2026-09-26 Production 26/09 → 29/09. b5 + Manual force direction: tắt (mặc định) thì chỉ lệnh mồi lúc rổ trống bị ép chiều; config v1.42.b6-pass58.set (mục b6)Production 26/09 → 29/09. b5 + Manual force direction: off (default) forces only the seed Init on an empty basket; config v1.42.b6-pass58.set (section b6)
CŨ GoldenRobber-1.42 b5 c9145f8 2026-09-23 Production 23/09 → 26/09. b4 + sửa cờ single-round cũ chặn nhánh manual, đã kiểm chứng live (mục b5)Production 23/09 → 26/09. b4 + fixes the stale single-round flags blocking the manual branch, verified live (section b5)
CŨ GoldenRobber-1.42 b4 ab5ae93 2026-09-22 b3 + Manual Init vào lệnh không chờ nến (mục b4) — chỉ ăn khi round sống gọn trong 1 phút, xem mục b5b3 + Manual Init enters without waiting for a bar (section b4) — only fires when a round lives inside a single minute, see section b5
CŨ GoldenRobber-1.42 b3 ff0e30e (b2: 51b2864, b1: 1967099) 2026-09-12 b21.1 + EA Link (hot-reload realtime) + Manual Init Close all + heartbeat không phụ thuộc tick, xem mục 2cb21.1 + EA Link (realtime hot-reload) + Manual Init Close all + tick-independent heartbeat, see section 2c
GÁC LẠIPARKED GoldenRobber-1.41.5 b22 588aeec 2026-09-02 StrongMove fakeout-exit, tách từ b21StrongMove fakeout-exit, forked from b21
Tên file không cho biết buildThe file name does not tell you the build

Dòng 1.41.4 được sửa tại chỗ (chỉ tăng build tag, giữ nguyên tên file). Vì vậy tên file không cho biết build — luôn nhìn tiêu đề panel, ví dụ GoldenRobber v1.41.4 (b21).

The 1.41.4 line is edited in place (only the build tag is bumped, the file name stays the same). So the file name does not tell you the build — always look at the panel title, for example GoldenRobber v1.41.4 (b21).

1.42 không nối tiếp b281.42 does not continue b28

1.42 tách từ b21.1, KHÔNG phải tiếp nối 1.41.4 b28 / 1.41.5 → không có Manual Init Auto, PivotGuard (b22–b28) hay StrongMove fakeout-exit.

1.42 is forked from b21.1; it is NOT a continuation of 1.41.4 b28 / 1.41.5 → it has no Manual Init Auto, no PivotGuard (b22–b28) and no StrongMove fakeout-exit.

Tóm tắt thay đổi 1.42 theo build1.42 changes by build

Bản rút gọn dùng cho mô tả gói deploy (gói hiện dùng MT5 Build 6230). Chi tiết ở từng mục bên dưới.

The short version used in deploy package descriptions (the current package uses MT5 Build 6230). Details are in each section below.

Build Thay đổiChange
b3Rút thời gian mở round mới: InpWaitAfterCloseSec=10, InpInitCooldownSec=10. Hot reload qua EA Link: force BUY / SELL, Close all, Pause.Shorter wait before a new round: InpWaitAfterCloseSec=10, InpInitCooldownSec=10. Hot reload over EA Link: force BUY / SELL, Close all, Pause.
b4Manual init vào lệnh ngay theo cooldown đã đặt, không chờ nến M1.Manual init enters as soon as the configured cooldown allows, without waiting for an M1 bar.
b5Sửa lỗi: manual init vào lệnh đúng 10 giây sau lệnh đóng ở mọi round (b4 chỉ được khi round sống gọn trong một phút), do cờ single-round cũ không còn chặn.Fix: manual init now enters exactly 10 seconds after the close on every round (b4 only did when the round lived within one minute), because the stale single-round flag no longer blocks it.
b6Thông số hot reload manual_force_dir (mặc định OFF): OFF thì force BUY / SELL chỉ ép chiều lệnh mồi lúc rổ trống; ON thì ép cả init_pivot / init_gap khi đang có lệnh.Hot-reload setting manual_force_dir (default OFF): OFF forces only the seed Init on an empty basket; ON also forces init_pivot / init_gap while positions are open.
b7Thông số hot reload manual_force_add (mặc định OFF): ON thì chỉ phía manual được bồi lệnh (bỏ qua bộ lọc trend), phía ngược lại không bồi. Cách kết hợp hai thông số: Inputs.Hot-reload setting manual_force_add (default OFF): ON lets only the manual side get adds (skipping the trend filter); the other side gets none. How to combine the two settings: Inputs.
AccountStatusUpdater 1.16Lịch sử lệnh đóng trong ngày hiển thị comment của lệnh mở (vd Init R44 P |init_manual) giống app MT5, thay vì để trống. Xem AccountStatusUpdater.Today's closed-trade history shows the opening order's comment (e.g. Init R44 P |init_manual) as in the MT5 app, instead of blank. See AccountStatusUpdater.

Sơ đồ nhánh buildBuild lineage

flowchart LR
  B21["1.41.4 b21<br/>2bbd135 · 71dac5f<br/>production cũ"]
  B211["1.41.4 b21.1<br/>77b12cd<br/>HOTFIX, chưa deploy"]
  L1["1.42 b1<br/>1967099<br/>EA Link"]
  L2["1.42 b2<br/>51b2864<br/>DEV, Close all"]
  L3["1.42 b3<br/>ff0e30e<br/>heartbeat"]
  L5["1.42 b5<br/>c9145f8<br/>manual init"]
  L6["1.42 b6<br/>3fc37ea<br/>force_dir"]
  L7["1.42 b7<br/>663082f<br/>PRODUCTION, force_add"]
  T22["b22"]
  T23["b23"]
  T24["b24"]
  T25["b25"]
  T26["b26"]
  T27["b27"]
  T28["1.41.4 b28<br/>0eee481<br/>TEST"]
  P22["1.41.5 b22<br/>588aeec<br/>GÁC LẠI"]
  B21 --> B211 --> L1 --> L2 --> L3 --> L5 --> L6 --> L7
  B21 -- "dòng test" --> T22 --> T23 --> T24 --> T25 --> T26 --> T27 --> T28
  B21 -- "nhánh StrongMove" --> P22

Ba nhánh đều xuất phát từ production b21. Nhánh hotfix → 1.42 không chứa tính năng của dòng test b22–b28 hay của 1.41.5.

flowchart LR
  B21["1.41.4 b21<br/>2bbd135 · 71dac5f<br/>previous production"]
  B211["1.41.4 b21.1<br/>77b12cd<br/>HOTFIX, not deployed"]
  L1["1.42 b1<br/>1967099<br/>EA Link"]
  L2["1.42 b2<br/>51b2864<br/>DEV, Close all"]
  L3["1.42 b3<br/>ff0e30e<br/>heartbeat"]
  L5["1.42 b5<br/>c9145f8<br/>manual init"]
  L6["1.42 b6<br/>3fc37ea<br/>force_dir"]
  L7["1.42 b7<br/>663082f<br/>PRODUCTION, force_add"]
  T22["b22"]
  T23["b23"]
  T24["b24"]
  T25["b25"]
  T26["b26"]
  T27["b27"]
  T28["1.41.4 b28<br/>0eee481<br/>TEST"]
  P22["1.41.5 b22<br/>588aeec<br/>PARKED"]
  B21 --> B211 --> L1 --> L2 --> L3 --> L5 --> L6 --> L7
  B21 -- "test line" --> T22 --> T23 --> T24 --> T25 --> T26 --> T27 --> T28
  B21 -- "StrongMove branch" --> P22

All three branches start from production b21. The hotfix → 1.42 branch contains none of the features of the b22–b28 test line or of 1.41.5.

2. Production trước — build b212. Previous production — build b21

Lấy lại binary / sourceRecovering the binary / source

Chạy trong Git Bash hoặc cmd — không dùng > của PowerShell vì nó làm hỏng file nhị phân:

Run in Git Bash or cmd — do not use PowerShell's >, because it corrupts binary files:

git cat-file -p 71dac5f:GoldenRobber-1.41.4.ex5 > GoldenRobber-1.41.4-b21.ex5
git cat-file -p 71dac5f:GoldenRobber-1.41.4.mq5 > GoldenRobber-1.41.4-b21.mq5

Sau khi gắn EA, kiểm tra tiêu đề panel hiện GoldenRobber v1.41.4 (b21).

After attaching the EA, check that the panel title shows GoldenRobber v1.41.4 (b21).

Tính năng chínhMain features

  • Remote config theo từng EA: URL /easupported/goldenrobber + secret token riêng; EA tự đẩy config_schema lên web.
  • Hot-reload 14 key: manual_init, single_round, strong_bypass, strong_tf, strong_require_sr, lot_balance_enable/trigger/target, hedge_enable/after_trades/lot_percent, weekend_protect_enable/max_net_lot/balance_enable.
  • Manual Init: OFF / Only BUY / Only SELL (chưa có Auto).
  • Payload telemetry = toàn bộ Info Panel (kèm dòng Spread), xem tại /admin/easupported/goldenrobber/account/{id}.
  • Heartbeat chạy trong OnTimer → panel và heartbeat không phụ thuộc tick.
  • Per-EA remote config: URL /easupported/goldenrobber + its own secret token; the EA pushes its config_schema to the web itself.
  • Hot-reload of 14 keys: manual_init, single_round, strong_bypass, strong_tf, strong_require_sr, lot_balance_enable/trigger/target, hedge_enable/after_trades/lot_percent, weekend_protect_enable/max_net_lot/balance_enable.
  • Manual Init: OFF / Only BUY / Only SELL (no Auto yet).
  • Telemetry payload = the whole Info Panel (including the Spread line), viewable at /admin/easupported/goldenrobber/account/{id}.
  • The heartbeat runs in OnTimer → the panel and heartbeat do not depend on ticks.

Config đi kèmBundled config

v1.41.4-pass58-easupported-goldenrobber-29082026.set (pass58 + URL per-EA). Bearer token điền tay, không commit.

Config ổn định cho 1.42 b3 là v1.42.b3-pass58-12092026.set — xem Config ổn định.

v1.41.4-pass58-easupported-goldenrobber-29082026.set (pass58 + per-EA URL). The bearer token is typed in by hand and never committed.

The stable config for 1.42 b3 is v1.42.b3-pass58-12092026.set — see Stable config.

2b. Hotfix b21.1 — Manual Init = Pause2b. Hotfix b21.1 — Manual Init = Pause

Tách từ b21 (71dac5f) → không có tính năng b22–b28 (Auto, PivotGuard…). File: GoldenRobber-1.41.4-b21.1.mq5 / .ex5.

Forked from b21 (71dac5f) → it has none of the b22–b28 features (Auto, PivotGuard…). Files: GoldenRobber-1.41.4-b21.1.mq5 / .ex5.

Giá trịValue MANUAL_INIT_PAUSE = 4 — bỏ trống 3 vì 3 là Auto ở b22+ (cùng slug goldenrobber)MANUAL_INIT_PAUSE = 4 — 3 is left unused because 3 is Auto in b22+ (same slug goldenrobber)
ChặnBlocks Mọi init mới, hiệu lực cao nhất: kiểm tra ngay đầu ExecuteInitRoundNow (trước StrongMove / manual / gap / natural / pending) và đầu OpenInitRoundPosNegPair (nơi duy nhất tạo lệnh Init R)Every new init, with top precedence: checked at the very start of ExecuteInitRoundNow (before StrongMove / manual / gap / natural / pending) and at the start of OpenInitRoundPosNegPair (the only place that creates Init R orders)
Không chặnDoes not block Add DCA, TP, Tia, hedge, lot balance, weekend protect → round đang mở vẫn được quản lý và tự đóng dần; sau đó EA đứng yênAdd DCA, TP, Tia, hedge, lot balance, weekend protect → open rounds are still managed and close out over time; after that the EA stays idle
Bật bằngEnable via Web: manual_init = Pause (no new init) (hot-reload) · hoặc .set: InpManualInit=4Web: manual_init = Pause (no new init) (hot-reload) · or .set: InpManualInit=4
TắtDisable Chọn OFF (hoặc bỏ override trên web → EA về giá trị input)Choose OFF (or remove the override on the web → the EA falls back to its input value)
Nhận biếtHow to recognise Tiêu đề panel GoldenRobber v1.41.4 (b21.1) [PAUSED] (hiện cả khi bật qua .set); dòng Hot Reload manual_init=PAUSE; log [ManualInit] hot-reload từ server: 0 -> 4Panel title GoldenRobber v1.41.4 (b21.1) [PAUSED] (shown even when enabled via .set); Hot Reload line manual_init=PAUSE; log [ManualInit] hot-reload từ server: 0 -> 4
Hot-reload Parse nhận 0, 1, 2, 4; từ chối 3 (Auto) → giữ giá trị cũThe parser accepts 0, 1, 2, 4; rejects 3 (Auto) → keeps the previous value

Deploy: gói deploy 1.41.4 (GoldenRobber-Pass58_v1_41_4-Vantage-build-6182.zip) có chart01.chr trỏ tới Experts\GoldenRobber-1.41.4.ex5. Muốn đóng gói b21.1 thì đổi tên GoldenRobber-1.41.4-b21.1.ex5 → GoldenRobber-1.41.4.ex5 khi đưa vào zip (hoặc sửa name=/path= trong .chr). Sau khi gắn, kiểm tra tiêu đề panel có (b21.1).

Deploy: the 1.41.4 deploy package (GoldenRobber-Pass58_v1_41_4-Vantage-build-6182.zip) has a chart01.chr pointing to Experts\GoldenRobber-1.41.4.ex5. To package b21.1, rename GoldenRobber-1.41.4-b21.1.ex5 → GoldenRobber-1.41.4.ex5 when putting it into the zip (or edit name=/path= in the .chr). After attaching, check that the panel title contains (b21.1).

2c. GoldenRobber 1.42 (b1) — EA Link2c. GoldenRobber 1.42 (b1) — EA Link

Release noteRelease note

Bản dành cho admin và người vận hành (cách dùng Close all, panel, nâng cấp, rollback): Release note 1.42 b2.

The admin / operator version (using Close all, the panel, upgrading, rolling back): Release note 1.42 b2.

  • File: GoldenRobber-1.42.mq5 + include dùng chung Include/EaLink.mqh. Logic giao dịch, parser heartbeat, tmap, leader election giữ nguyên b21.1.
  • Admin Apply/Clear trên /admin/easupported/{slug} → fxconsole publish Redis → monitor/EaLinkBroker gửi tín hiệu cfg → EA kéo config ngay qua HTTPS heartbeat → áp trong ≈ ≤1s.
  • Input mới: InpLinkMode (HTTP only / HYBRID mặc định), InpLinkHost (rỗng = host của InpCloudMyApiDomain), InpLinkPort (9607). Slug + token lấy từ input cũ.
  • Panel thêm dòng Link: UP ... / Link: DOWN, retry Ns / Link: AUTH FAIL: ....
  • Cần đồng bộ server: fxconsole (endpoint /api/internal/ea-link/key, notify sau Apply/Clear, badge Link) + container fxconsole-ea-link-broker + mở cổng 9607 (OVH + IPFire). Broker chưa chạy thì EA vẫn hoạt động như b21.1 (HTTP theo chu kỳ), panel báo Link: DOWN.
  • Chi tiết protocol + chuẩn cho EA mới: Chuẩn tích hợp EA §9 (EA Link), §16 (checklist tuân thủ) — nguồn EA-HOTRELOAD-STANDARD.md.
  • Files: GoldenRobber-1.42.mq5 + the shared include Include/EaLink.mqh. Trading logic, heartbeat parser, tmap and leader election are unchanged from b21.1.
  • Admin Apply/Clear on /admin/easupported/{slug} → fxconsole publishes to Redis → monitor/EaLinkBroker sends a cfg signal → the EA immediately pulls its config over the HTTPS heartbeat → applied within ≈ ≤1s.
  • New inputs: InpLinkMode (HTTP only / HYBRID default), InpLinkHost (empty = host of InpCloudMyApiDomain), InpLinkPort (9607). Slug + token come from the existing inputs.
  • The panel gains a Link: UP ... / Link: DOWN, retry Ns / Link: AUTH FAIL: ... line.
  • Server side must be in sync: fxconsole (endpoint /api/internal/ea-link/key, notify after Apply/Clear, Link badge) + container fxconsole-ea-link-broker + port 9607 opened (OVH + IPFire). If the broker is not running the EA still works like b21.1 (periodic HTTP) and the panel shows Link: DOWN.
  • Protocol details + the standard for new EAs: EA integration standard §9 (EA Link), §16 (compliance checklist) — source EA-HOTRELOAD-STANDARD.md.

b2 — Manual Init = Close allb2 — Manual Init = Close all

Giá trịValue MANUAL_INIT_CLOSE_ALL = 5 (3 = Auto ở dòng test, 4 = Pause)MANUAL_INIT_CLOSE_ALL = 5 (3 = Auto on the test line, 4 = Pause)
Bật bằngEnable via Web: manual_init = Close all (close EA orders + pause) · hoặc .set: InpManualInit=5Web: manual_init = Close all (close EA orders + pause) · or .set: InpManualInit=5
Đóng gìWhat it closes Mọi position của EA trên chart: đúng symbol + magic, gồm lệnh Hedge. Lệnh tay / EA khác không bị đụngEvery EA position on the chart: matching symbol + magic, including Hedge orders. Manual orders / other EAs are not touched
Trong lúc bậtWhile active Không mở gì: bỏ qua init, add DCA, hedge, lot balance, weekend/flash-crash balance, Global TP/SL, TiaOpens nothing: skips init, add DCA, hedge, lot balance, weekend/flash-crash balance, Global TP/SL, Tia
Lệnh đóng lỗiFailed close orders Kiểm retcode từng lệnh; thử lại tối đa 1 lượt/giây (log lượt đầu + mỗi 10 lượt)Checks the retcode of every order; retries at most 1 pass/second (logs the first pass + every 10th)
Sau khi hết lệnhOnce everything is closed Log [ManualInit] CLOSE ALL: đã đóng hết lệnh sau N lượt; EA đứng yên như Pause tới khi đổi về OFFLog [ManualInit] CLOSE ALL: đã đóng hết lệnh sau N lượt; the EA stays idle like Pause until switched back to OFF
Multi-node Chỉ node LEADER đóng lệnhOnly the LEADER node closes orders
Nhận biếtHow to recognise Tiêu đề panel GoldenRobber v1.42 (b2) [CLOSE ALL]; dòng Hot Reload manual_init=CLOSE ALLPanel title GoldenRobber v1.42 (b2) [CLOSE ALL]; Hot Reload line manual_init=CLOSE ALL
Không hoàn tác đượcCannot be undone

Build khác cùng slug (b21, b21.1, b28) không hiểu giá trị 5 → bỏ qua và giữ giá trị cũ (không đóng lệnh).

Other builds on the same slug (b21, b21.1, b28) do not understand value 5 → they ignore it and keep their previous value (no orders are closed).

b4 — Manual Init vào lệnh không chờ nếnb4 — Manual Init enters without waiting for a bar

b4 đã deploy nhưng KHÔNG đủb4 is deployed but NOT enough

Chạy live 2026-09-22 → 09-23 cho thấy nhánh manual-init của b4 bị một cờ cũ chặn, chỉ vào lệnh đúng nhịp khi round sống gọn trong một phút. Đọc mục b5 trước — đó mới là bản dùng được.

Running live 2026-09-22 → 09-23 showed b4's manual-init branch blocked by a stale flag: it only enters on time when a round lives inside a single minute. Read section b5 first — that is the usable build.

  • Vấn đề: mọi quyết định Init nằm trong if (isNewBar) của nến M1, nên InpWaitAfterCloseSec / InpInitCooldownSec dưới 60 giây không có hiệu lực thật — phải chờ tới đầu nến kế (0-60 giây). Mọi giá trị 1-59 cho kết quả như nhau.
  • Vì sao chỉ sửa cho Manual Init: cổng nến tồn tại để đọc tín hiệu từ nến đã đóng (IsClosedCandleGreen, MA trend M3, wick M30/H1, ADX H1). Nhưng manual_init = Only BUY / Only SELL bypass toàn bộ bộ lọc hướng nên lý do chờ nến không còn.
  • b4 làm gì: khi manual_init = BUY/SELL và đang trống lệnh, Init được xét mỗi tick. Giữ nguyên InTradingWindow, hai cổng thời gian, MinPips / SingleRound, chốt chặn Pause / Close all, và chốt chống scalp-leak khi ExposureScale ép lot xuống minLot.
  • Nhận biết: log [ManualInit] init không chờ nến (BUY|SELL): Ns sau lần đóng cuối; lệnh mang ghi chú |init_manual.
  • Không đụng chế độ tự động: manual_init = OFF chạy y như b3; backtest pass58 chạy với InpManualInit=0 nên vẫn nguyên giá trị.
  • Rủi ro: manual init không có bộ lọc nào cản → có thể mở round ngay trước một cú đảo, và nhịp vòng lệnh tăng mạnh khi cooldown thấp. Nhớ tắt khi không còn theo dõi.
  • Problem: every Init decision sits inside the M1 if (isNewBar) branch, so InpWaitAfterCloseSec / InpInitCooldownSec below 60 seconds have no real effect — the EA still waits for the next bar (0-60 s). Any value from 1 to 59 behaves the same.
  • Why only for Manual Init: the bar gate exists to read closed-candle signals (IsClosedCandleGreen, M3 trend MA, M30/H1 wick, H1 ADX). But manual_init = Only BUY / Only SELL bypasses every direction filter, so that reason no longer applies.
  • What b4 does: with manual_init = BUY/SELL and no open positions, Init is evaluated on every tick. Unchanged: InTradingWindow, both time gates, MinPips / SingleRound, the Pause / Close all guards, and the scalp-leak guard when ExposureScale pushes the lot down to minLot.
  • How to spot it: the log line [ManualInit] init không chờ nến (BUY|SELL): Ns sau lần đóng cuối; orders carry the |init_manual comment.
  • Automatic mode untouched: manual_init = OFF behaves exactly like b3; the pass58 backtests ran with InpManualInit=0, so they still hold.
  • Risk: manual init has no filter holding it back — it can open a round right before a reversal, and the round rate rises sharply with a low cooldown. Turn it off when you stop watching.

b5 — sửa Manual Init không chờ nến (b4 chỉ ăn ~1/5 lần)b5 — fixing Manual Init without a bar wait (b4 fired ~1 in 5)

Production 2026-09-23 → 2026-09-26, đã thay bằng b6Production 2026-09-23 → 2026-09-26, replaced by b6

Lấy lại .mq5 / .ex5 của b5 từ commit c9145f8 (MetaEditor: 0 errors, 0 warnings) nếu cần rollback.

Recover the b5 .mq5 / .ex5 from commit c9145f8 (MetaEditor: 0 errors, 0 warnings) if you need to roll back.

Triệu chứng thật — tài khoản live, 2026-09-23 04:20–04:56, XAUUSD.sc, manual_init = Only SELL:

What actually happened — live account, 2026-09-23 04:20–04:56, XAUUSD.sc, manual_init = Only SELL:

Round Đóng lúcClosed at Round kế mở lúcNext round opened CáchGap Tag
R30704:23:3804:24:0022sinit_flat
R30804:25:3104:26:0029sinit_flat
R30904:27:0004:27:1010s ✅init_manual
R31004:30:3004:31:0030sinit_flat
R31104:54:0804:55:0052sinit_flat
  • Đọc bảng: giây mở lệnh nói hết — :00 = đầu nến M1 (đường cũ), :10 = đúng InpWaitAfterCloseSec=10 (nhánh b4). 5 lần chỉ ăn 1.
  • Nguyên nhân: ExecuteInitRoundNow còn một chốt nằm sau đoạn manual init ép hướng — if (g_singleRoundMode) { if (!g_singleRoundAllowSell) allowSell = false; }. Hai cờ g_singleRoundAllowBuy/Sell chỉ được tính trong khối if (isNewBar). Khi round đang mở, mỗi nến M1 hạ cờ của chính phía đang giao dịch xuống false (round chưa max add + MinPips cross-round thấy lệnh cùng phía sát giá). Round đóng xong, nhánh tick của b4 đọc lại cờ cũ đã false → bị chặn, im lặng, chờ tới đầu nến kế rồi mở bằng đường cũ.
  • Vì sao R310 thoát: R309 sống trọn trong một phút; ranh giới nến duy nhất nó gặp (04:27:00) rơi đúng lúc lệnh vừa đóng nên canOpenNewRound=false → khối single-round bị bỏ qua → cờ còn nguyên true từ 04:26:00.
  • b5 sửa (1): dựng lại g_singleRoundAllowBuy/Sell = true ngay trước khi gọi. Nhánh chỉ chạy khi nPos==0, mà đường nến lúc trống lệnh cũng kết luận hai phía ready=true và bỏ qua MinPips cross-round (khối đó chỉ chạy khi nPos>0) — dựng lại đúng kết luận đó, không nới chốt nào.
  • b5 sửa (2,3): thêm hai cổng đường nến còn thiếu — ShouldBlockInitForWeekend() và Sideway BlockInit. Config pass58 tắt cả hai nên không đổi hành vi hiện tại.
  • b5 sửa (4): log [ManualInit] bị chặn sau Ns: lotOk=… expScale=… pause=… trend=… singleRound=…, throttle 60s — b4 im lặng khi bị chặn nên phải đọc ngược code mới ra nguyên nhân.
  • Không đụng chế độ tự động: mọi thay đổi nằm trong nhánh g_manualInit == BUY/SELL. Backtest pass58 chạy InpManualInit=0 → +$332k / DD 38% vẫn nguyên giá trị.
  • Kiểm chứng sau deploy: bật manual_init = Only SELL, để một round sống qua ít nhất 2 nến M1 rồi đóng. Round kế phải mở đúng 10 giây sau lệnh đóng (giây khác :00) với tag init_manual.
  • How to read it: the seconds give it away — :00 = M1 bar open (old path), :10 = exactly InpWaitAfterCloseSec=10 (b4 branch). One hit out of five.
  • Root cause: ExecuteInitRoundNow still has a guard after the manual-init side forcing — if (g_singleRoundMode) { if (!g_singleRoundAllowSell) allowSell = false; }. The two flags g_singleRoundAllowBuy/Sell are only computed inside the if (isNewBar) block. While a round is open, every M1 bar pushes the flag of the very side being traded to false (round not maxed on adds + cross-round MinPips sees a same-side position next to price). Once the round closes, b4's tick branch reads those stale false flags → blocked, silently, until the next bar opens a round the old way.
  • Why R310 slipped through: R309 lived entirely inside one minute; the single bar boundary it met (04:27:00) landed exactly when the position closed, so canOpenNewRound=false skipped the single-round block and the flags stayed true from 04:26:00.
  • b5 fix (1): re-assert g_singleRoundAllowBuy/Sell = true right before the call. The branch only runs with nPos==0, and the bar path with no open positions reaches the same conclusion (both sides ready) and skips cross-round MinPips (that block only runs when nPos>0) — so this restates its conclusion rather than loosening any guard.
  • b5 fix (2,3): add the two caller-level gates b4 missed — ShouldBlockInitForWeekend() and Sideway BlockInit. pass58 disables both, so today's behaviour is unchanged.
  • b5 fix (4): a throttled (60s) [ManualInit] bị chặn … log line, because b4 stayed silent when blocked.
  • Automatic mode untouched: every change lives inside the g_manualInit == BUY/SELL branch. The pass58 backtest runs InpManualInit=0, so +$332k / 38% DD still stands.
  • Verify after deploy: set manual_init = Only SELL, let a round live across at least two M1 bars, then close it. The next round must open exactly 10 seconds after the close (on a second other than :00) tagged init_manual.

Đã kiểm chứng trên tài khoản thật — 2026-09-23 13:04–13:47, XAUUSD.sc, manual_init = Only SELL:

Verified on the live account — 2026-09-23 13:04–13:47, XAUUSD.sc, manual_init = Only SELL:

Round Mở lúcOpened Đóng lúcClosed Sống quaLived across Round kế mở sauNext round after Tag
R113:04:5313:05:26<1 phút<1 min—init_manual
R213:05:3613:23:30~18 nến M1M1 bars10sinit_manual
R313:23:4113:47:44~24 nến M1M1 bars11sinit_manual

R2 và R3 chính là hai ca b4 luôn trượt (round sống qua hàng chục ranh giới nến khi đang có lệnh). Trên b4 chúng sẽ phải đợi tới 13:24:00 / 13:48:00 và mang tag init_flat. 3/3 round đi đường tick — tỷ lệ b4 1/5 → b5 3/3.

R2 and R3 are exactly the cases b4 always missed (a round living across dozens of bar boundaries while positions are open). On b4 they would have waited for 13:24:00 / 13:48:00 and been tagged init_flat. 3 of 3 rounds took the tick path — b4 1-in-5 → b5 3-in-3.

b6 — Manual force direction (hot-reload)b6 — Manual force direction (hot-reload)

Production 2026-09-26 → 2026-09-29, đã thay bằng b7Production 2026-09-26 → 2026-09-29, replaced by b7

Chạy với config v1.42.b6-pass58.set (khác bản b3 ở đâu). Rollback về b6: lấy .ex5 từ commit 3fc37ea và nạp lại v1.42.b6-pass58.set (trong archive/configs/).

Ran with the v1.42.b6-pass58.set config (how it differs from the b3 file). To roll back to b6: take the .ex5 from commit 3fc37ea and reload v1.42.b6-pass58.set (in archive/configs/).

Vấn đề: ở b5, manual BUY/SELL ép chiều cho mọi Init chừng nào còn bật. Đang force SELL mà giá đi lên thì init_pivot và init_gap (mở khi rổ đang có lệnh) cũng ra SELL, còn phía BUY không mở được Init nào. Một lệnh mồi tay kéo lệch cả chiến lược tự động.

b6: thêm input InpManualForceDirection (mặc định false), hot-reload bằng key manual_force_dir (bool) trên /admin/easupported/{slug}. Chỉ có tác dụng khi manual_init = Only BUY / Only SELL.

Problem: in b5, manual BUY/SELL forces the direction of every Init while it stays on. With SELL forced in a rising market, init_pivot and init_gap (opened while positions exist) also come out as SELL, and no BUY Init can open at all. One hand-placed seed skews the whole automatic strategy.

b6: adds the InpManualForceDirection input (default false), hot-reloadable via the manual_force_dir key (bool) on /admin/easupported/{slug}. It only matters while manual_init = Only BUY / Only SELL.

manual_force_dir Lệnh mồi (rổ trống)Seed Init (empty basket) init_pivot / init_gap (đang có lệnh)init_pivot / init_gap (positions open)
false (mặc định)(default) Ép chiều, bỏ qua bộ lọc chiều và trend trung tínhForced, skips the direction filters and the neutral-trend check Theo trend và bộ lọc, y như manual OFFFollow the trend and filters, exactly as with manual OFF
true Như trênSame as above Ép theo chiều manual (hành vi b5). Dùng để gỡ lệnh khi đã xác định xu hướng; chiều ngược lại không mở được Init nàoForced to the manual side (b5 behaviour). Use it to work out of positions once the trend is clear; the other side can open no Init at all
  • Code: một chốt GR_ManualForceApplies() (manual BUY/SELL và (rổ trống hoặc force_dir bật)) thay 3 chỗ đọc g_manualInit trong ExecuteInitRoundNow: bỏ qua trend trung tính, nhãn chân P, ép allowBuy/allowSell.
  • Không đổi: nhánh init_manual mỗi tick, lệnh bồi (luôn theo trend), Pause / Close all, chế độ tự động (manual_init = OFF). Backtest pass58 chạy InpManualInit=0 → vẫn nguyên giá trị.
  • fxconsole không cần sửa: web render key từ schema EA đẩy lên, nên manual_force_dir xuất hiện sau heartbeat đầu tiên của b6.
  • Lưu ý khi deploy: mặc định false nên nếu đang bật manual BUY/SELL, hành vi đổi so với b5 ngay khi lên b6. Muốn giữ như b5 thì bật manual_force_dir trên web.
  • Nhận biết: tiêu đề panel GoldenRobber v1.42 (b6); dòng Hot Reload có forceDir=ON|OFF khi web đang override; log [ManualInit] force direction hot-reload: OFF -> ON.
  • Kiểm chứng sau deploy: manual = Only SELL, force_dir OFF, rổ đang có lệnh, trend M3 lên và giá gần hỗ trợ pivot → Init BUY (init_pivot) phải mở được nếu phía BUY sẵn sàng. Bật force_dir → chỉ còn Init SELL.
  • Code: one guard, GR_ManualForceApplies() (manual BUY/SELL and (empty basket or force_dir on)), replaces the three reads of g_manualInit in ExecuteInitRoundNow: the neutral-trend skip, the P-leg label and the allowBuy/allowSell override.
  • Unchanged: the every-tick init_manual path, adds (always trend-following), Pause / Close all, and automatic mode (manual_init = OFF). The pass58 backtest runs InpManualInit=0, so it still holds.
  • No fxconsole change needed: the web renders keys from the schema the EA pushes, so manual_force_dir appears after b6's first heartbeat.
  • Deployment note: the default is false, so an account with manual BUY/SELL on behaves differently from b5 as soon as it runs b6. Turn manual_force_dir on in the web to keep the b5 behaviour.
  • How to spot it: panel title GoldenRobber v1.42 (b6); the Hot Reload line shows forceDir=ON|OFF while the web overrides it; log [ManualInit] force direction hot-reload: OFF -> ON.
  • Verify after deploy: manual = Only SELL, force_dir OFF, positions open, M3 trend up and price near a pivot support → a BUY Init (init_pivot) must open if the BUY side is ready. Turn force_dir on → only SELL Inits.

b7 — Manual force add direction (hot-reload)b7 — Manual force add direction (hot-reload)

Đã deploy 2026-09-29 — bản productionDeployed 2026-09-29 — production build

GoldenRobber-1.42.mq5 và .ex5 ở gốc repo đều là b7 (commit 663082f, MetaEditor: 0 errors, 0 warnings), chạy với config v1.42.b7-pass58.set (khác bản b6 ở đâu). Rollback: lấy .ex5 b6 từ commit 3fc37ea và nạp lại v1.42.b6-pass58.set.

GoldenRobber-1.42.mq5 and .ex5 at the repo root are both b7 (commit 663082f, MetaEditor: 0 errors, 0 warnings), running with the v1.42.b7-pass58.set config (how it differs from the b6 file). Rollback: take the b6 .ex5 from commit 3fc37ea and reload v1.42.b6-pass58.set.

Vấn đề: manual init chỉ ép chiều Init. Lệnh bồi luôn theo trend M3 (UP chỉ bồi BUY, DOWN chỉ bồi SELL), nên khi đã xác định xu hướng và ép SELL, EA vẫn bồi BUY vào round mỗi khi M3 lật lên.

b7: thêm input InpManualForceAddDirection (mặc định false), hot-reload bằng key manual_force_add (bool). Chỉ có tác dụng khi manual_init = Only BUY / Only SELL, độc lập với manual_force_dir.

Problem: manual init only forces the direction of Inits. Adds always follow the M3 trend (UP adds BUY only, DOWN adds SELL only), so after you have called the trend and forced SELL, the EA still adds BUYs to the round whenever M3 turns up.

b7: adds the InpManualForceAddDirection input (default false), hot-reloadable via the manual_force_add key (bool). It only matters while manual_init = Only BUY / Only SELL, and is independent of manual_force_dir.

manual_force_add Lệnh bồi phía manualAdds on the manual side Lệnh bồi phía ngược lạiAdds on the other side
false (mặc định)(default) Theo trend M3 như thườngFollow the M3 trend as usual Theo trend M3 như thườngFollow the M3 trend as usual
true Được bồi, bỏ qua bộ lọc chiều của lệnh bồi (Trend / MultiTF / Pivot / Wick / Choppy ApplyAdd)Allowed, skipping the add direction filters (Trend / MultiTF / Pivot / Wick / Choppy ApplyAdd) Không được bồiNo adds
  • Vẫn giữ: MinPips 34 so với mốc round, 8 lệnh bồi / phía / round, cooldown 60 giây, lot 0.1 × 1.5ⁿ tối đa 0.5, ExposureScale, giới hạn vùng giá, FlashCrash.
  • Code: mỗi nhánh (DCAPos và DCANeg) chốt baseAddBuy/baseAddSell ngay trước bộ lọc chiều, rồi GR_ApplyManualForceAdd() sau khối Choppy ghi đè theo manual. Schema thêm key bool, parser heartbeat + revert theo hot_keys + dòng panel forceAdd=ON|OFF.
  • Không đổi: Init (kể cả manual_force_dir), đóng lệnh, Pause / Close all, chế độ tự động (manual_init = OFF) → backtest pass58 giữ nguyên giá trị.
  • Rủi ro: bật force_add thì phía ngược lại không còn lệnh bồi đối trọng. Ép sai chiều thì lệnh lỗ chỉ còn Tia / Global TP gỡ.
  • Kiểm chứng sau deploy: manual = Only SELL, force_add ON, round đang có SELL, trend M3 lên, giá xuống thêm 34 pip dưới SELL thấp nhất → phải bồi SELL; giá lên 34 pip trên mốc → không bồi BUY. Log đổi cờ: [ManualInit] force add direction hot-reload: OFF -> ON.
  • Still enforced: MinPips 34 from the round reference, 8 adds / side / round, 60-second cooldown, lot 0.1 × 1.5ⁿ capped at 0.5, ExposureScale, the price-zone limit, FlashCrash.
  • Code: each branch (DCAPos and DCANeg) snapshots baseAddBuy/baseAddSell right before the direction filters, then GR_ApplyManualForceAdd() after the Choppy block overrides them per the manual side. The schema gains a bool key, plus the heartbeat parser, hot_keys revert and the forceAdd=ON|OFF panel entry.
  • Unchanged: Inits (including manual_force_dir), closing, Pause / Close all, and automatic mode (manual_init = OFF) → the pass58 backtest still holds.
  • Risk: with force_add on, the other side gets no counterweight adds. Force the wrong side and losing positions can only be unwound by Tia / Global TP.
  • Verify after deploy: manual = Only SELL, force_add ON, a round holding SELLs, M3 trend up, price falls another 34 pips below the lowest SELL → a SELL add must open; price rises 34 pips above the reference → no BUY add. Flag change log: [ManualInit] force add direction hot-reload: OFF -> ON.

b3 — Heartbeat không phụ thuộc tickb3 — Tick-independent heartbeat

  • Lỗi đã sửa (D1): CloudSyncPulse đo nhịp heartbeat bằng TimeCurrent() — giờ quote cuối, đứng yên khi thị trường đóng hoặc không có tick → EA ngừng gửi heartbeat HTTP; /admin/easupported/{slug} báo Offline cả cuối tuần, leader election và hot-reload qua HTTP không cập nhật.
  • b3: nhịp đo bằng GetTickCount64() (g_lastCloudSyncMs); TicketMapSaveImmediate đặt mốc cùng đồng hồ; điều kiện tự xưng leader khi cả 2 cloud lỗi và dòng panel Server: CONNECTED (Ns ago) tính tuổi theo g_hbOkMs → heartbeat chạy mỗi InpCloudSyncIntervalSec kể cả khi không có tick.
  • Sửa comment input: InpCloudMyApiDomain phải là URL product .../easupported/{slug}; InpManualInit BUY/SELL chỉ bỏ qua filter chọn chiều trong bước mở lệnh, vẫn qua cổng chung (trend neutral, sideway, pivot khi có lệnh, wick 2 phía).
  • Logic giao dịch giữ nguyên b2. Compile 0 lỗi, 0 cảnh báo; đang chạy production trên tài khoản thật.
  • Bug fixed (D1): CloudSyncPulse timed the heartbeat with TimeCurrent() — the last quote time, which freezes while the market is closed or has no ticks → the EA stopped sending HTTP heartbeats; /admin/easupported/{slug} showed Offline all weekend, and leader election and HTTP hot-reload did not update.
  • b3: the interval is measured with GetTickCount64() (g_lastCloudSyncMs); TicketMapSaveImmediate stamps the same clock; the self-promote-to-leader check when both clouds fail and the panel line Server: CONNECTED (Ns ago) use the age of g_hbOkMs → the heartbeat runs every InpCloudSyncIntervalSec even without ticks.
  • Input comments corrected: InpCloudMyApiDomain must be the product URL .../easupported/{slug}; InpManualInit BUY/SELL only skips the side-selecting filters inside the order-opening step and still passes the shared gates (neutral trend, sideway, pivot while positions are open, two-sided wick).
  • Trading logic unchanged from b2. Compiled with 0 errors and 0 warnings; running in production on live accounts.
Lỗi D1 chỉ còn ở b21 / b21.1Deviation D1 only affects b21 / b21.1

b21 và hotfix b21.1 còn lỗi D1 (cuối tuần báo Offline). Production hiện tại 1.42 b7 không có lỗi này (sửa từ b3) — chỉ account nào còn chạy build cũ mới bị.

b21 and hotfix b21.1 still have deviation D1 (Offline on weekends). The current production build 1.42 b7 does not have it (fixed since b3) — only accounts left on the old builds are affected.

3. Từ b21 lên b28 (bản test)3. From b21 to b28 (test build)

Build Commit Thay đổiChange
b22dda71e1 · b8e71a7Manual Init thêm Auto: ép init, hướng theo trend của TF cao; TF hot-reload, không set thì fallback H4Manual Init gains Auto: forces an init in the direction of the higher-TF trend; TF is hot-reloadable, falls back to H4 when unset
b230efb063Sửa Auto khi MAPeriod=0 (trước đó không bao giờ vào lệnh)Fixes Auto when MAPeriod=0 (previously it never entered)
b240730c7cMAPeriod=0 = mode scalp (bỏ vùng neutral); MAPeriod hot-reloadMAPeriod=0 = scalp mode (no neutral zone); MAPeriod is hot-reloadable
b25f40abc5Xác nhận hướng bằng nến đã đóng (ConfirmBars)Direction confirmed by closed candles (ConfirmBars)
b264a9ef09Gỡ RequireSlope (thừa với ConfirmBars)Removes RequireSlope (redundant with ConfirmBars)
b2760c7554Không init khi sát SR phía trước (swing tự tính)No init when close to the SR level ahead (self-computed swings)
b280eee481Chuyển guard sang Pivot engine (PivotGuard)Moves the guard onto the Pivot engine (PivotGuard)
  • Input mới (không có ở b21): InpManualInitAutoTF, InpManualInitAutoMAPeriod, InpManualInitAutoConfirmBars, InpManualInitAutoPivotGuard.
  • Hot-reload 18 key: thêm manual_auto_tf, manual_auto_ma_period, manual_auto_confirm_bars, manual_auto_pivot_guard.
  • Tài liệu chi tiết: mục 8d. Manual Init của README cũ (README/index.html trước khi tách trang); trong bộ tài liệu này xem Workflow & logic.
  • New inputs (absent in b21): InpManualInitAutoTF, InpManualInitAutoMAPeriod, InpManualInitAutoConfirmBars, InpManualInitAutoPivotGuard.
  • Hot-reload of 18 keys: adds manual_auto_tf, manual_auto_ma_period, manual_auto_confirm_bars, manual_auto_pivot_guard.
  • Detailed docs: section 8d. Manual Init of the old README (README/index.html before it was split into pages); in these docs see Workflow & logic.
Lỗi đã biết của b28 (chưa sửa)Known b28 bug (not fixed)

Parse manual_init vẫn chỉ nhận 0–2 → Auto (3) không bật được qua hot-reload, chỉ bật được bằng .set. b28 cũng chưa có Pause (4).

The manual_init parser still only accepts 0–2 → Auto (3) cannot be enabled via hot-reload, only through .set. b28 also has no Pause (4).

4. Khi nhiều build cùng chạy trên slug goldenrobber4. When several builds run on the goldenrobber slug

  1. Schema trên web đổi qua lại. config_schema được lưu theo EA product, không theo account → trang /admin/easupported/goldenrobber hiển thị schema của account gửi heartbeat gần nhất. Lúc có, lúc không có các key manual_auto_*; lúc có option Pause (b21.1), lúc có option Auto (b28).
  2. Build không hiểu giá trị sẽ bỏ qua và giữ giá trị cũ (không về OFF):
    • manual_init = Auto (3) áp cho b21 / b21.1 → bị bỏ qua.
    • manual_init = Pause (4) áp cho b21 / b28 → bị bỏ qua → account đó VẪN init. Pause toàn bộ bằng override global chỉ có tác dụng khi mọi account đã lên b21.1.
    • Đang SELL mà nhận giá trị lạ thì vẫn SELL. Muốn tắt thì chọn OFF.
  3. Nạp chéo .set: .set của b28 nạp vào b21 → MT5 bỏ qua các input không tồn tại (an toàn). .set của b21 nạp vào b28 → input mới lấy giá trị mặc định (Auto không bật vì InpManualInit=OFF). .set có InpManualInit=4 nạp vào build không có Pause → không hợp lệ, kiểm tra lại panel sau khi nạp.
  1. The schema on the web flips back and forth. config_schema is stored per EA product, not per account → the /admin/easupported/goldenrobber page shows the schema of whichever account sent the most recent heartbeat. The manual_auto_* keys appear and disappear; sometimes the Pause option (b21.1) is shown, sometimes the Auto option (b28).
  2. A build that does not understand a value ignores it and keeps its previous value (it does not fall back to OFF):
    • manual_init = Auto (3) applied to b21 / b21.1 → ignored.
    • manual_init = Pause (4) applied to b21 / b28 → ignored → that account STILL inits. Pausing everything via a global override only works once every account runs b21.1.
    • An account in SELL that receives an unknown value stays in SELL. To turn it off, choose OFF.
  3. Cross-loading .set files: a b28 .set loaded into b21 → MT5 ignores inputs that do not exist (safe). A b21 .set loaded into b28 → the new inputs take their defaults (Auto stays off because InpManualInit=OFF). A .set with InpManualInit=4 loaded into a build without Pause → invalid; re-check the panel after loading.

5. Nhánh gác lại — 1.41.5 b22 (StrongMove fakeout-exit)5. Parked branch — 1.41.5 b22 (StrongMove fakeout-exit)

  • Tách từ b21 → không có tính năng Auto của b22–b28.
  • Input InpStrongMoveFakeoutExit (hot-key strong_fakeout_exit): đóng round init_strong khi nến kế tiếp đóng ngược vào trong range đã phá.
  • Backtest 2023–2026 (chạy trên vốn $200k, quy về $ tuyệt đối vì fixed-lot): lợi nhuận −$33,769 (−9%) so với StrongMove thường; DD gần như không đổi ($242k so với $246k); exposure 52.7 → 48.5 lot.
  • Chưa test 2020–2026 — đây là giai đoạn cần thiết để biết nó có chặn được cháy tài khoản hay không.
  • Dữ liệu: backtest/new-backtest/v1.41.4-pass58-29082026/StrongMove/*strong_fakeout_exit*
  • Forked from b21 → it has none of the Auto features of b22–b28.
  • Input InpStrongMoveFakeoutExit (hot key strong_fakeout_exit): closes an init_strong round when the next candle closes back inside the range it broke.
  • Backtest 2023–2026 (run on $200k capital, expressed in absolute $ because of fixed lots): profit −$33,769 (−9%) versus plain StrongMove; DD almost unchanged ($242k vs $246k); exposure 52.7 → 48.5 lots.
  • Not yet tested on 2020–2026 — the period needed to learn whether it prevents account blow-ups.
  • Data: backtest/new-backtest/v1.41.4-pass58-29082026/StrongMove/*strong_fakeout_exit*

6. Rủi ro đã biết (có ở b21, b21.1 và b28)6. Known risks (present in b21, b21.1 and b28)

Rà soát ngày 2026-09-10, chưa sửa:

  • Không đọc ResultRetcode(); deviation hardcode 30 points, filling hardcode IOC.
  • Add DCA thất bại → thử lại mỗi tick (spam lệnh); lệnh timeout có thể gây mở trùng.
  • Global TP (pass58 = $10) đóng toàn bộ vị thế mà không kiểm tra lại → slippage trên book lớn có thể biến +$10 thành lỗ.
  • Tia tính budget theo lãi kế hoạch, không trừ phần slippage phía lệnh lời.
  • Không chặn mở lệnh khi spread nở.
  • Virtual TP không chạy khi MT5 mất kết nối.

Phía server (không phụ thuộc build EA): fxconsole v2026.09.04.1 bỏ ghi lại tmap_entries khi map không đổi — fix lỗi sinh ~3 GB binlog/ngày (xem Khôi phục TMap).

Reviewed on 2026-09-10, not fixed:

  • ResultRetcode() is never read; deviation is hardcoded to 30 points, filling hardcoded to IOC.
  • A failed Add DCA is retried on every tick (order spam); a timed-out order can lead to a duplicate open.
  • Global TP (pass58 = $10) closes every position without re-checking → slippage on a large book can turn +$10 into a loss.
  • Tia computes its budget from planned profit and does not subtract slippage on the winning side.
  • No block on opening orders when the spread widens.
  • Virtual TP does not run while MT5 is disconnected.

Server side (independent of the EA build): fxconsole v2026.09.04.1 stops rewriting tmap_entries when the map is unchanged — fixes the ~3 GB/day binlog growth (see TMap disaster recovery).

7. Checklist đưa build lên production7. Checklist for promoting a build to production

  1. Backtest full-range (tối thiểu 2023–2026; nên chạy thêm 2020–2026) — hotfix không đổi logic giao dịch (như b21.1) có thể bỏ qua bước này.
  2. Chạy thử trên tài khoản demo hoặc live nhỏ.
  3. Compile, commit .ex5, ghi lại commit hash.
  4. Rollout từng VPS: gỡ EA khỏi chart rồi kéo lại (F7 khi EA đang gắn không nạp binary mới); nếu MT5 hiện hộp thoại LiveUpdate thì chọn Later.
  5. Kiểm tra tiêu đề panel đúng build; trang web có đủ key hot-reload.
  6. Cập nhật Tra nhanh và mục 1 của RELEASES.md (và trang này).
  1. Full-range backtest (at least 2023–2026; 2020–2026 recommended as well) — a hotfix that does not change trading logic (like b21.1) may skip this step.
  2. Trial run on a demo account or a small live account.
  3. Compile, commit the .ex5, record the commit hash.
  4. Roll out VPS by VPS: remove the EA from the chart and drag it back on (F7 while the EA is attached does not load the new binary); if MT5 shows the LiveUpdate dialog, choose Later.
  5. Check the panel title shows the right build; the web page lists every hot-reload key.
  6. Update Quick lookup and section 1 of RELEASES.md (and this page).