Commit Graph

69 Commits

Author SHA1 Message Date
rob 639043b261 Live trading infrastructure functional on testnet
Key fixes:
- ExchangeInterface: Remove stale entries before creating new exchange connections
- LiveBroker: Optimize get_total_equity() to price only top 10 assets (was hanging on 462 testnet assets)
- LiveBroker: Add fiat currency skip list to avoid failed price lookups
- PythonGenerator: Fix market symbol regex to handle 2-5 char symbols (BTC/USDT)

New features:
- LiveStrategyInstance: Full live trading strategy execution
- Circuit breaker and position limits for live trading safety
- Restart-safe order reconciliation via client order IDs

Verified working:
- Live strategy starts on Binance testnet
- Orders placed and filled successfully
- Execution loop runs with active strategies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-01 15:23:34 -04:00
rob 6821f821e1 Implement execution loop, paper persistence, and CI pipeline
Strategy Execution Loop:
- Add tick() method to StrategyInstance for price-driven execution
- Add update() method to Strategies for iterating active instances
- Enable execution loop in received_cdata() to process candle updates
- Add PaperStrategyInstance.tick() with broker price updates

Paper Trading Persistence:
- Add Position.to_dict()/from_dict() for serialization
- Add PaperBroker state persistence (save_state/load_state)
- Add _ensure_persistence_cache() with DB schema migration
- Auto-load/save broker state in PaperStrategyInstance

Runtime Fixes (from Codex review):
- Fix get_user_info() signature mismatch in start_strategy
- Fix live/paper mode handling for stop operations
- Normalize fill event payload (filled_qty/filled_price keys)
- Remove double broker update path (delegate to tick)
- Prevent runtime events from polluting strategy list in UI

CI Pipeline:
- Add GitHub Actions workflow (.github/workflows/test.yml)
- Python 3.12 with TA-Lib dependency
- Syntax checks and 5 critical test suites

Tests: 85 passed
- test_strategy_execution.py (16 tests)
- test_execution_loop.py (17 tests)
- test_paper_persistence.py (19 tests)
- test_backtest_determinism.py (13 tests)
- test_brokers.py (18 tests)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 19:48:50 -04:00
rob b555f6e004 Fix high-severity issues identified by Codex
1. Paper equity calculation (High):
   - get_balance() now correctly includes position value (size * current_price)
   - Previously only added unrealized_pnl, missing position principal

2. Buy affordability checks (High):
   - place_order() now uses execution price including slippage for market orders
   - Uses limit price for limit orders instead of current price
   - Prevents orders that would drive cash negative

3. ExchangeInterface price stubs (High):
   - get_trade_executed_price() now handles order_price=0.0 (market orders)
   - Falls back to current price or entry price when order_price is zero

4. Determinism hash strengthening (Medium):
   - Hash now includes full trade sequence with individual trade details
   - Added test for different trade sequences with same totals

5. Live mode consistency (Medium):
   - Factory now falls back to paper trading with warning instead of raising
   - Consistent behavior between factory.py and Strategies.py

Added test: test_paper_broker_equity_calculation to verify fix #1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 17:23:58 -04:00
rob 5dbda13924 Phase 5-6: Live trading stubs and observability
Phase 5 - Live Trading (stub implementation):
- Create LiveBroker stub with NotImplementedError for all methods
- Document required exchange API integration points
- Add testnet flag for safety

Phase 6 - Observability:
- Add structured logging with StructuredFormatter and ColoredFormatter
- Create TradingLogger for trading-specific log entries
- Implement health check system with HealthCheck class
- Add default health checks for database, exchange, memory
- Create health_endpoint() for monitoring integration

The LiveBroker is a stub that needs exchange API integration
for production use. All other trading modes (backtest, paper)
are fully functional.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 17:09:54 -04:00
rob 51ec74175d Phase 4: Paper trading implementation
- Create PaperStrategyInstance extending StrategyInstance
- Integrate PaperBroker for simulated order execution
- Add trade_order() method translating Blockly calls to broker
- Add mode selection in Strategies.create_strategy_instance()
- Update execute_strategy() to support paper/backtest/live modes
- Include comprehensive tests for paper trading functionality

Paper trading now works with:
- Market and limit orders
- Position tracking with P&L
- Balance management
- Trade history
- Reset functionality

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 17:07:34 -04:00
rob 1bb224b15d Phase 3: Backtest determinism
- Fix deprecated datetime.utcfromtimestamp() in shared_utilities.py
- Create BacktestResult schema with locked structure
- Add TradeResult and BacktestMetrics dataclasses
- Implement determinism hash for verifying reproducible results
- Add comprehensive tests for result schema and determinism

The BacktestResult schema ensures consistent output format and
provides methods to verify that same inputs produce same results.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 17:02:54 -04:00
rob f1182d4e0c Phase 2: Broker abstraction foundation
- Create brokers package with unified trading interface
- BaseBroker: Abstract base class defining broker contract
- BacktestBroker: Wraps Backtrader for backtesting mode
- PaperBroker: Simulated order execution for paper trading
- Factory function to create broker based on trading mode
- Comprehensive test suite for broker functionality

The broker abstraction enables strategies to work identically
across backtest, paper, and live trading modes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 17:00:43 -04:00
rob e245f80e18 Phase 1: Repair runtime breakpoints
- Fix set_new_candle() to update cached candle instead of raising
- Fix trades.update() type mismatch: pass {symbol: price} dict
- Fix StrategyInstance.trades collision: rename list to trade_history
- Add missing ExchangeInterface methods for trade status/qty/price
- Add get_user_balance stub for paper trading

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 16:47:13 -04:00
rob 34637df478 Phase 0: Stabilize baseline
- Security: Move API keys to environment variables in config.py
- Portability: Use cross-platform path resolution for DB_FILE
- Add config.example.py template for developers
- Fix Windows path in ExchangeInterface.get_public_exchanges()
- Add cached_last_candle attribute to Candles class
- Add pytest configuration (pytest.ini, conftest.py)
- Fix test imports for DataCache_v3
- Include identity compatibility layer (user_name/user_id resolution)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 16:44:11 -04:00
rob f1a184b131 Fix chart loading and stabilize local runtime 2026-02-28 15:15:56 -04:00
Rob ee51ab1d8c I am just about to move most of the strategy statistics tracking to the StrategyInstance 2024-11-22 10:28:39 -04:00
Rob dab122d15f A lot of stuff is fixed. The strategies need to reflect the stats in the ui. 2024-11-20 01:38:46 -04:00
Rob e1516a80cf A lot of stuff is fixed. only issues at the moment are that errors during testing are not displayed in the ui and the strategies need to reflect the stats. 2024-11-20 00:18:01 -04:00
Rob 2c644147a4 I repaired the sinup and signin parts. I changed a bunch of javascript in strategies.js. there is an error that pops up when webtools is open. 2024-11-18 10:25:08 -04:00
Rob fe1e93c24b The test seem to run without errors. It now yields to other processes. 2024-11-15 19:51:10 -04:00
Rob 4072a9d5f5 The test seem to run without errors but are still process blocking. 2024-11-15 18:08:32 -04:00
Rob 4f11778b09 The test are running and returning feedback. I am just about to implement a better solution for multithreading 2024-11-13 22:15:35 -04:00
Rob 0ae835d096 The test are displaying in the user interface. 2024-11-13 01:13:29 -04:00
Rob 1af55f10a0 The test are running without errors 2024-11-12 09:43:18 -04:00
Rob 33298b7178 The test are running but not without errors. 2024-11-11 17:22:06 -04:00
Rob 4fcc6f661d Python generators is fully implemented but not tested yet. 2024-11-07 10:43:51 -04:00
Rob 9d830fe8fa Strtegies submit an are editable. 2024-11-05 12:02:50 -04:00
Rob 50bcfa05cd The generator definitions seem to work now. 2024-11-04 18:20:09 -04:00
Rob bb7fdbf8f9 The generator definitions are still being tested but progress has been made. 2024-10-27 16:51:10 -03:00
Rob 5110c8b434 I adjusted the block definitions and expanded them. The generator definitions have been updated but are not tested. 2024-10-21 13:37:05 -03:00
Rob c7b7a47129 I played around with the blocks and i think i have it correct now. 2024-10-16 00:21:43 -03:00
Rob 232d479827 nearly all core functionality is flushed out. 2024-10-13 01:23:26 -03:00
Rob 4eda0b6f81 The strategies class is broken into smaller classes. I believe the ui is mostly functional at this point. It is time to get the tests working. 2024-10-10 17:05:07 -03:00
Rob 89e0f8b849 I decoupled the comms class from a few other classes. I updated some of the ui in regard to this indicator readouts. An just about to attempt to break up the strategies class. 2024-10-09 09:09:52 -03:00
Rob 86843e8cb4 Strategies is now fixed and I am ready to implement backtesting. 2024-09-25 14:27:56 -03:00
Rob adedaaa540 Getting closer to a beta. woot woot. there is a problem with created strategies only displaying two of the ones in the database 2024-09-24 23:43:13 -03:00
Rob 4e3e8e5abf The strategy popup is now draggable and resizeable. 2024-09-23 16:38:22 -03:00
Rob 034b8ab925 The strategy section is generating code. Implemented code is mostly functional. 2024-09-23 09:55:27 -03:00
Rob 38de03c022 I think it is all working except I don't think the indicators are caching on the database. 2024-09-20 17:40:47 -03:00
Rob 29f30cb358 Mostly working now 2024-09-19 17:10:26 -03:00
Rob f1d0f2a4b1 Indicators are fixed after last update. 2024-09-18 13:47:07 -03:00
Rob 1ff21b56dd Made a lot of changes to DataCache indicator data is not being saved to the database. 2024-09-15 14:05:08 -03:00
Rob f2b7621b6d Everything is working I am just about to refactor indicator storage. 2024-09-09 15:43:16 -03:00
Rob 73ed1a092a got all the indicators working again 2024-09-08 04:04:58 -03:00
Rob b666ec22af Extended DataCache with indicator caching functionality. All DataCache tests pass. 2024-09-07 19:51:01 -03:00
Rob a16cc542d2 Refactored DataCache, again. Implemented more advance cache management. All DataCache tests pass. 2024-08-25 10:25:08 -03:00
Rob 8361efd965 Refactored DataCache, Database and Users. All db interactions are now all inside Database. All data request from Users now go through DataCache. Expanded DataCache test to include all methods. All DataCache tests pass. 2024-08-19 23:10:13 -03:00
Rob fc407708ba Fixed an issue inserting candles into the database. I realized I want to get rid of the id column in the market(candles) tables. Began integrating Blockly into the client. 2024-08-17 18:10:34 -03:00
Rob 439c852cf5 Fixed an issue where the client asked for too many records and was not receiving them. Also ensured that much of the code is dealing with timezones proactively. 2024-08-16 15:51:15 -03:00
Rob d288eebbec Re-wrote DataCache.py and Implemented tests and got them all passing. 2024-08-15 22:39:38 -03:00
Rob c398a423a3 implemented tests for Exchangeinterface.py 2024-08-04 02:06:23 -03:00
Rob 917ccedbaf Documented Exchange.py 2024-08-03 17:35:40 -03:00
Rob 4130e0ca9a Completed unittests for Database and DataCache. 2024-08-03 16:56:13 -03:00
Rob e601f8c23e Completed unittests for Exchange. 2024-08-02 15:51:25 -03:00
Rob 0b1ad39476 Fixed query_uptodate function and added comprehensive test cases 2024-08-02 01:36:45 -03:00