Files
Bell-PriceActionWithEma-EA/Experts/RSIForceStateEA
2026-05-09 23:16:50 +07:00
..
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00
2026-05-09 23:16:50 +07:00

RSIForceStateEA

EA giao dich pullback theo dong luc RSI, loc trend bang EMA200, dieu phoi qua state machine 4 trang thai. Chi dung 1 lenh moi pullback, vao bang BUY/SELL LIMIT.

1) Cau truc thu muc

  • EA chinh: Experts/RSIForceStateEA.mq5
  • Cac module:
    • Experts/RSIForceStateEA/Config.mqh - toan bo input
    • Experts/RSIForceStateEA/State.mqh - enum + struct (no globals)
    • Experts/RSIForceStateEA/Indicators.mqh - handle + buffer + helper slope/cross
    • Experts/RSIForceStateEA/Trade.mqh - dat lenh, sizing, partial + BE
    • Experts/RSIForceStateEA/StateMachine.mqh - flow 4 state
    • Experts/RSIForceStateEA/Visualizer.mqh - dashboard, stats panel, trade levels
    • Experts/RSIForceStateEA/README.md

Thu tu include trong file .mq5:

Layer 1 : Config -> State -> Indicators
Globals : g_State, g_Pending, g_OpenTrade
Layer 2 : Trade -> StateMachine
Layer 3 : Visualizer

2) Logic tong the

2.1 Cac chi bao

  • RSI(InpRSIPeriod) - dong luc gia.
  • EMA(InpRSI_EMA9Period) tinh tren RSI.
  • WMA(InpRSI_WMA45Period) tinh tren RSI.
  • EMA(InpEMA200Period) tren close - loc trend.
  • ATR(InpATRPeriod) - dung cho trend buffer va SL.

2.2 Trend filter

  • Uptrend khi Close > EMA200 + buffer.
  • Downtrend khi Close < EMA200 - buffer.
  • buffer:
    • % EMA200 mac dinh (InpTrendBufferPercent = 0.10%), hoac
    • ATR-based neu InpUseATRTrendBuffer = true.
  • InpSkipFlatEMA200: bo qua khi EMA200 phang (delta giua 2 nen <= ATR * InpFlatEMA_ATRMult).

2.3 4 trang thai

State Y nghia
STATE_NO_TRADE khong co setup hop le
STATE_WATCHING da co pullback hop le, dang cho trigger
STATE_PENDING_ORDER da dat BUY/SELL LIMIT, dang cho khop
STATE_IN_TRADE da khop, dang quan ly position (partial + BE + TP)

2.4 Pullback (NO_TRADE -> WATCHING)

  • Uptrend pullback:
    • RSI < EMA9 < WMA45
    • 3 buffer cung slope giam (kiem tra InpSlopeLookbackBars nen)
  • Downtrend pullback (mirror).

2.5 Trigger entry (WATCHING -> PENDING_ORDER)

  • BUY trigger:
    • RSI cat len WMA45 (so sanh nen InpSignalBarShift voi nen truoc).
    • EMA9 van con < WMA45 (xac nhan dong luc moi bat).
    • Khong co cross RSI/WMA45 trong InpMinBarsBetweenCrosses nen truoc do (tin hieu phai "isolated", tranh nhieu sat WMA45).
  • SELL trigger (mirror).

2.6 Dat LIMIT ORDER

  • Entry = (Close(signal) + SwingExtreme) / 2
    • BUY: SwingExtreme = swing low gan nhat trong InpSwingLookbackBars.
    • SELL: SwingExtreme = swing high gan nhat.
  • Lenh dat la BuyLimit / SellLimit (khong co market chase).
  • Pending song toi da InpPendingMaxAliveBars. Het han -> huy.
  • Neu InpInvalidateIfCrossBack = true, khi RSI cross nguoc lai WMA45 hoac trend mat -> huy ngay.
  • WATCHING song toi da InpWatchingMaxBars. Het han -> tro ve NO_TRADE.

2.7 Stop Loss

Mode Cong thuc
SL_SWING swing extreme +/- InpSL_SwingBufferPoints
SL_ATR Entry +/- ATR * InpSL_ATRMult
SL_HYBRID chon SL rong hon giua swing va ATR (an toan hon, mac dinh)

2.8 Take Profit

  • TP = Entry +/- R * InpRiskRewardRatio (mac dinh 2R).

2.9 Quan ly trong IN_TRADE

  • Risk = InpRiskPercent (% balance, mac dinh 1%).
  • Khi gia chay duoc InpPartialCloseAtR (mac dinh 1.5R):
    • Dong InpPartialClosePercent% volume (mac dinh 50%).
    • Doi SL ve Entry (BE).
  • Neu volume khong the chia (volMin chan), van dich SL ve BE va bo qua partial.
  • Khong lam gi them o 1R.

2.10 Anti-spam

  • Mot pullback chi sinh ra 1 lenh (g_HasTradedThisPullback).
  • Reset bookkeeping khi trend regime doi (TREND_UP <-> TREND_DOWN/NONE).
  • Khi trend doi va dang co pending nguoc huong -> huy luon.

2.11 Sideway filter

  • InpUseRSISidewayFilter: khi tat ca InpSidewayLookbackBars gia tri RSI gan nhat nam trong [InpSidewayRSILow, InpSidewayRSIHigh] -> bo qua tim setup moi.
  • Filter nay chi chan NO_TRADE -> WATCHING, khong chan vong doi pending va khong chan quan ly position.

3) Cach build va chay

  1. Mo MetaEditor.
  2. Mo MQL5/Experts/RSIForceStateEA.mq5 va Compile (F7).
  3. Quay lai MT5, attach EA vao chart muon trade.
  4. Bat Algo Trading.
  5. Inputs co the dieu chinh ngay tu UI khi attach.

4) Cac input quan trong (mac dinh)

Input Mac dinh Mo ta
InpMagicNumber 26050901 Magic, doi neu chay nhieu instance
InpRiskPercent 1.0 % balance/lenh
InpRiskRewardRatio 2.0 TP = R * day
InpPartialCloseAtR 1.5 dong 1 phan tai R nay
InpPartialClosePercent 50.0 % volume dong tai partial
InpPendingMaxAliveBars 5 huy pending sau N nen
InpWatchingMaxBars 10 huy WATCHING neu khong trigger
InpMinBarsBetweenCrosses 10 dam bao tin hieu cross "isolated"
InpSlopeLookbackBars 3 so nen kiem tra slope
InpSwingLookbackBars 20 tim swing extreme cho entry/SL
InpStopLossMode SL_HYBRID SL_SWING / SL_ATR / SL_HYBRID
InpSL_ATRMult 1.2 ATR multiplier khi SL theo ATR
InpSL_SwingBufferPoints 20 them buffer (point) ngoai swing extreme
InpUseRSISidewayFilter true bat/tat sideway filter
InpSidewayRSILow / High 45 / 55 dai sideway theo RSI
InpUseATRTrendBuffer false doi trend buffer sang dang ATR

5) Goi y test va toi uu

  • Backtest tung symbol toi thieu 6-12 thang truoc khi chay live.
  • Voi index/forex bien dong cao -> bat InpUseATRTrendBuffer = true.
  • Muon it tin hieu hon nhung chat hon:
    • tang InpMinBarsBetweenCrosses
    • tang InpSlopeLookbackBars
    • giu SL_HYBRID
  • Muon nhieu tin hieu:
    • giam InpSlopeLookbackBars ve 2
    • tat InpUseRSISidewayFilter
  • Theo doi tab Experts / Journal de xem log [STATE], [TREND], [PENDING], [TRADE].

6) Visualization

EA tu hien thi dau day du de quan sat va danh gia:

6.1 Dashboard (goc tren-trai)

Hien thi cac dong:

  • Trend : UP / DOWN / NONE (mau xanh / do / xam)
  • State : STATE_NO_TRADE / STATE_WATCHING / STATE_PENDING_ORDER / STATE_IN_TRADE
  • RSI : gia tri RSI, EMA9, WMA45 cua nen tin hieu (InpSignalBarShift)
  • EMA200: gia tri EMA200 + close hien tai
  • ATR : gia tri ATR
  • Context: tuy state se in:
    • Watching: x/N bars
    • Pending : dir entry alive=x/N
    • Trade : dir entry partial=DONE/PEND

6.2 Stats panel (goc duoi-trai)

Quet history InpStatsLookbackDays ngay (mac dinh 60), filter theo InpMagicNumber + _Symbol, hien thi:

  • Total : so position da dong (theo POSITION_ID, dedupe partial)
  • TP hit : so deal dong voi reason DEAL_REASON_TP
  • SL hit : so deal dong voi reason DEAL_REASON_SL
  • Other : dong thu cong / partial close / expert close
  • Net PL : tong P/L (profit + swap + commission)

6.3 Trade levels (TradingView style)

Khi state = PENDING_ORDER hoac IN_TRADE, ve 3 line ngang:

  • ENTRY (dotted, InpColorEntry)
  • SL (dashed, InpColorSL)
  • TP (dashed, InpColorTP)

Tu dong xoa khi quay ve NO_TRADE.

6.4 Auto-attach indicators

Khi InpAttachIndicators = true (mac dinh):

  • EMA200 duoc them vao main chart.
  • RSI(14), RSI_EMA9, RSI_WMA45 duoc them vao subwindow moi.

Co the tat tung phan rieng:

Input Mac dinh Tac dung
InpVisualize true bat tat toan bo overlay
InpAttachIndicators true tu add EMA200 / RSI cluster vao chart
InpShowDashboard true panel goc tren-trai
InpShowStatsPanel true panel goc duoi-trai
InpShowTradeLevels true line Entry/SL/TP
InpStatsLookbackDays 60 so ngay quet stats

Tat ca object visual dung prefix RSIForce_ va duoc xoa o OnDeinit.

7) Ghi chu kien truc

  • Toan bo state machine xoay quanh closed bar (IsNewBar()), tranh fire nhieu lan trong cung 1 nen.
  • Quan ly position (partial + BE) chay moi tick de phan ung nhanh khi gia di chuyen.
  • SyncStateWithBroker() chay moi tick + sau moi OnTradeTransaction - dam bao state nha minh luon khop voi broker (truong hop user dong tay, pending bi reject, v.v.).