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 inputExperts/RSIForceStateEA/State.mqh- enum + struct (no globals)Experts/RSIForceStateEA/Indicators.mqh- handle + buffer + helper slope/crossExperts/RSIForceStateEA/Trade.mqh- dat lenh, sizing, partial + BEExperts/RSIForceStateEA/StateMachine.mqh- flow 4 stateExperts/RSIForceStateEA/Visualizer.mqh- dashboard, stats panel, trade levelsExperts/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
UptrendkhiClose > EMA200 + buffer.DowntrendkhiClose < EMA200 - buffer.buffer:% EMA200mac dinh (InpTrendBufferPercent = 0.10%), hoacATR-basedneuInpUseATRTrendBuffer = 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
InpSlopeLookbackBarsnen)
- Downtrend pullback (mirror).
2.5 Trigger entry (WATCHING -> PENDING_ORDER)
- BUY trigger:
- RSI cat len WMA45 (so sanh nen
InpSignalBarShiftvoi nen truoc). - EMA9 van con < WMA45 (xac nhan dong luc moi bat).
- Khong co cross RSI/WMA45 trong
InpMinBarsBetweenCrossesnen truoc do (tin hieu phai "isolated", tranh nhieu sat WMA45).
- RSI cat len WMA45 (so sanh nen
- 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.
- BUY: SwingExtreme = swing low gan nhat trong
- 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 dinh2R).
2.9 Quan ly trong IN_TRADE
- Risk =
InpRiskPercent(% balance, mac dinh 1%). - Khi gia chay duoc
InpPartialCloseAtR(mac dinh1.5R):- Dong
InpPartialClosePercent% volume (mac dinh 50%). - Doi SL ve
Entry(BE).
- Dong
- 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
pullbackchi 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 caInpSidewayLookbackBarsgia 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
- Mo MetaEditor.
- Mo
MQL5/Experts/RSIForceStateEA.mq5va Compile (F7). - Quay lai MT5, attach EA vao chart muon trade.
- Bat
Algo Trading. - 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
- tang
- Muon nhieu tin hieu:
- giam
InpSlopeLookbackBarsve 2 - tat
InpUseRSISidewayFilter
- giam
- Theo doi tab
Experts/Journalde 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 barsPending : dir entry alive=x/NTrade : 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 reasonDEAL_REASON_TPSL hit: so deal dong voi reasonDEAL_REASON_SLOther: dong thu cong / partial close / expert closeNet 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):
EMA200duoc them vao main chart.RSI(14),RSI_EMA9,RSI_WMA45duoc 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 moiOnTradeTransaction- dam bao state nha minh luon khop voi broker (truong hop user dong tay, pending bi reject, v.v.).