From 12bc699ddba1aa0371eb4dc2e1e1436611c92a5c Mon Sep 17 00:00:00 2001 From: root Date: Sat, 28 Mar 2026 20:05:21 +0400 Subject: [PATCH] Add Phase 2 trading rules documentation and data README --- data/README.md | 35 +++++++++++++++++++++ docs/PHASE2_RULES.md | 74 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 data/README.md create mode 100644 docs/PHASE2_RULES.md diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..d1d9d90 --- /dev/null +++ b/data/README.md @@ -0,0 +1,35 @@ +# Data Directory + +CSV files are not tracked in git (too large). + +## Required files +``` +EURUSD_5M.csv +GBPUSD_5M.csv +USDJPY_5M.csv +``` + +## How to obtain data + +1. Download 1-minute data from [HistData.com](https://www.histdata.com/): + - EURUSD, GBPUSD, USDJPY + - Years 2024, 2025, and 2026 (Jan-Mar) + - 1-minute bar format (MetaTrader compatible) + +2. Place `.zip` files in this directory + +3. Run the resampling script: + ```bash + python3 ../scripts/resample_to_5m.py + ``` + +This produces the `*_5M.csv` files needed for training. + +## Data format + +CSV columns: +``` +open,high,low,close,volume +1.07451,1.07481,1.07432,1.07465,12345 +... +``` diff --git a/docs/PHASE2_RULES.md b/docs/PHASE2_RULES.md new file mode 100644 index 0000000..e369062 --- /dev/null +++ b/docs/PHASE2_RULES.md @@ -0,0 +1,74 @@ +# Phase 2 Trading Rules + +## Signal Generation +- Source: Genetic Programming tree evolved over 3000 individuals × 30 generations +- Input features: EURUSD, GBPUSD, USDJPY OHLC (12 inputs total) +- Output: Continuous signal -100 to +100 +- Long entry: signal > +5.0 +- Short entry: signal < -5.0 +- Dead band: -5.0 to +5.0 (no trade) + +## Per Trade Risk Management +| Parameter | Value | +|-----------|-------| +| Trade size (training) | $1,000 USD | +| Trade size (live) | $300 USD | +| Max concurrent (live) | 3 trades | +| Max exposure (live) | $900 USD | +| Initial SL | 1x ATR below/above entry | +| Trail trigger | 3x ATR profit from entry | +| Trail distance | 15% behind current price | +| Close condition | 15% reversal from peak/trough | + +## Long Trade Example +``` +Entry: 150.00 USDJPY +ATR: 0.30 +SL initial: 149.70 (150.00 - 1×0.30) +Trail activates: 150.90 (150.00 + 3×0.30) + +Price moves to: 151.00 +New SL: 128.35 (151.00 × 0.85) + +Price moves to: 152.00 +New SL: 129.20 (152.00 × 0.85) + +Price drops to: 129.20 → CLOSE +Profit: ~1:7 risk/reward +``` + +## Short Trade Example +``` +Entry: 150.00 USDJPY +ATR: 0.30 +SL initial: 150.30 (150.00 + 1×0.30) +Trail activates: 149.10 (150.00 - 3×0.30) + +Price drops to: 149.00 +New SL: 171.35 (149.00 × 1.15) + +Price drops to: 148.00 +New SL: 170.20 (148.00 × 1.15) + +Price rises to: 170.20 → CLOSE +Profit: ~1:7 risk/reward +``` + +## Fitness Function +Win rate is PRIMARY objective (weight 6.0): +```python +win_bonus = (win_rate - 50.0) / 10.0 +trade_penalty = max(0.0, (n_trades - 3000) / 10000.0) +fitness = -(6.0 * win_bonus) - (0.5 * sharpe) - (0.1 * total_ret / 10.0) + trade_penalty +``` +- 80% win rate → win_bonus = +3.0 → strong reward +- 50% win rate → win_bonus = 0.0 → neutral +- 40% win rate → win_bonus = -1.0 → penalised + +## Backtesting Configuration +- Library: vectorbt 0.28.5 +- Train: Jan 2024 – Jun 2025 (44,310 bars) +- Validation: Jul 2025 – Oct 2025 (10,079 bars) +- Test: Nov 2025 – Mar 2026 (6,420 bars) +- Commission: 0.0015% per side +- Initial cash: $100,000