feat: initial Ares scalping bot — momentum FVG strategy

Strategy: detect 3-candle momentum FVG on M5, enter on retrace fill.

Signal logic:
- Candle[i-1] must be a momentum candle: body ≥ BODY_PCT_MIN (default 60%)
  and close in top/bottom CLOSE_PCT_MIN (default 80%) of range
- FVG must exist between candle[i-2] and candle[i] (gap on momentum side)
- FVG zone midpoint = limit entry level
- SL: just outside FVG zone (+ optional SL_BUFFER)
- TP: entry ± SL_distance × MIN_RR

Features:
- EMA trend filter (EMA_PERIOD, same timeframe)
- FVG expiry (FVG_EXPIRY_CANDLES): stale setups auto-invalidate
- Currency conversion for non-USD profit pairs (JPY, CAD, CHF)
- Full friction model: spread, slippage, commission
- Date range filter (DATE_FROM / DATE_TO)
- Same stats output format as Hermes

Dependencies: domain + mt5-client from hermes/crates (path deps)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
romysaputrasihananda
2026-06-09 04:01:40 +07:00
co-authored by Claude Sonnet 4.6
commit e0e421ed05
6 changed files with 2679 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
[package]
name = "ares"
version = "0.1.0"
edition = "2024"
[[bin]]
name = "ares"
path = "src/main.rs"
[dependencies]
anyhow = "1"
chrono = { version = "0.4", features = ["serde"] }
dotenvy = "0.15"
rust_decimal = { version = "1", features = ["serde"] }
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
domain = { path = "../hermes/crates/domain" }
mt5-client = { path = "../hermes/crates/mt5-client" }