# Trading212 Python Scalping Bot - "Touch & Turn" (Opening Range Reversal) This project implements the "Touch & Turn" scalping strategy for the Trading212 API, optimized for the UK ISA environment. ## Strategy Logic (The Workflow) 1. **Identify Opening Candle:** Capture the 15m candle (09:30 to 09:45 EST). 2. **Filter for Liquidity:** Opening range must be >= 25% of 14-day ATR. 3. **Determine Direction:** - Bearish (Close < Open): Prepare **LONG** (Buy at Low). - Bullish (Close > Open): Prepare **SHORT** (Substitute with **3x Inverse ETP BUY** in ISA). 4. **Execution (09:45 EST):** - Entry via **Market Order** for immediate fill. - **Actual Fill Price** fetched from portfolio is used for all bracket calculations. 5. **Hybrid Exit Strategy:** - **Broker-Side:** Physical **Stop Loss** order placed immediately for protection. - **Bot-Side:** **Take Profit** monitored manually by polling current market price. - This bypasses ISA restrictions against multiple pending sell orders for the same shares. 6. **Automatic Exit (11:00 EST):** Force close via Market Order and cleanup pending SL. ## Risk & Capital Management * **Virtual Balance Simulation:** In demo mode, subtracts £4,750 from total equity to simulate a realistic £250 starting point. * **5% Risk Rule:** Risks exactly 5% of the Virtual Balance per trade. * **Capital Partitioning:** Divides total available capital (£250) and risk budget equally among all active ticker threads for the day (max 3). * **Precision & Minimums:** Automatically detects "precision-mismatch" or "min-quantity-exceeded" errors from T212 and retries with corrected values. ## Technical Architecture * **`main.py`:** Daily orchestrator. Scan -> Backtest -> Select Top 3 -> Spawn Parallel Threads. Handles early API verification and unbuffered logging. * **`src/api/client.py`:** REST wrapper with Basic Auth. * **`src/strategy/touch_turn.py`:** Setup logic, Fibonacci calculation, and timezone conversion (UTC -> Eastern). * **`src/execution/manager.py`:** Handles ticker swapping (Inverse ETPs), market entries, hybrid brackets, and retry loops with jitter. * **`src/strategy/inverse_mapping.py`:** Map of US stocks to 3x Short Inverse ETPs (GraniteShares/Leverage Shares). ## Resilience Features * **API Backoff:** Random jitter (1-10s) and exponential retry on 429 errors. * **Order Tracking:** Uses portfolio checks to infer status if order IDs disappear (404). * **Unbuffered Logging:** Force-flushes logs to `logs/bot_*.log` immediately for real-time monitoring. ## Operation 1. **Timer:** Service managed by `systemd` timer firing at 09:30 America/New_York. 2. **Tracking:** P&L recorded in `pnl_tracking.csv` (R-multiple based). 3. **Verification:** Always run `./venv/bin/python3 test_api_connection.py` before live days.