2.8 KiB
2.8 KiB
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)
- Identify Opening Candle: Capture the 15m candle (09:30 to 09:45 EST).
- Filter for Liquidity: Opening range must be >= 25% of 14-day ATR.
- Determine Direction:
- Bearish (Close < Open): Prepare LONG (Buy at Low).
- Bullish (Close > Open): Prepare SHORT (Substitute with 3x Inverse ETP BUY in ISA).
- Execution (09:45 EST):
- Entry via Market Order for immediate fill.
- Actual Fill Price fetched from portfolio is used for all bracket calculations.
- 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.
- 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_*.logimmediately for real-time monitoring.
Operation
- Timer: Service managed by
systemdtimer firing at 09:30 America/New_York. - Tracking: P&L recorded in
pnl_tracking.csv(R-multiple based). - Verification: Always run
./venv/bin/python3 test_api_connection.pybefore live days.