2.9 KiB
2.9 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 with optional CFD integration for shorting.
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 (Sell at High).
- Execution (09:45 EST):
- Entry via Market Order for immediate fill.
- Actual Fill Price fetched from portfolio is used for all bracket calculations.
- Split-Account Routing (ISA / CFD):
- ISA Account: Used for all LONG trades and SHORT trades where an Inverse ETP is available.
- CFD Account: Used for SHORT trades on stocks without Inverse ETPs (requires
SPLIT_ACCOUNT_MODE=True).
- Hybrid Exit Strategy:
- Broker-Side: Physical Stop Loss order placed immediately for protection.
- Bot-Side: Take Profit monitored manually by polling current market price.
- 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) per account.
- Precision & Minimums: Automatically detects "precision-mismatch" or "min-quantity-exceeded" errors from T212 and retries with corrected values.
Technical Architecture
main.py: Daily orchestrator. Handles dual-account initialization, trade routing, and parallel thread management.src/api/client.py: REST wrapper with Basic Auth.src/strategy/touch_turn.py: Setup logic, Fibonacci calculation, and ATR-based SL padding.src/execution/manager.py: Handles ticker swapping (Inverse ETPs), market entries, hybrid brackets, and retry loops.src/strategy/inverse_mapping.py: Map of US stocks to 3x Short Inverse ETPs for ISA shorting.
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).
- Aggressive Logging: Custom
HardFlushHandlerusesos.fsync()to ensure real-time log writes to disk.
Operation
- Timer: Service managed by
systemdtimer firing at 09:30 America/New_York. - Tracking: P&L recorded in
pnl_tracking.csv. - Verification: Always run
./venv/bin/python3 test_api_connection.pybefore live days.