Conversation
Collaborator
MDUYN
commented
Apr 24, 2026
- ddcfe50 feat: add Currency/FX conversion support (Feature: Currency/FX Conversion Support #456)
- 0c01673 Merge pull request feat: Blotter System for Trade Documentation and Order Book Management #474 from coding-kitties/feature/blotter-system
- f7a4339 feat: fill-time slippage/commission, partial fills, volume impact model
- 44fd90a refactor: remove BacktestOrderExecutor, route SL/TP through blotter, fix cancel_order - Delete dead BacktestOrderExecutor (was never called) - Route TradeOrderEvaluator SL/TP orders through blotter via _create_order() - Pass blotter+context to TradeOrderEvaluator in App and BacktestService - Fix cancel_order tests to match delegate-to-order_service pattern - Fix OrderBacktestService.cancel_order pre-existing bug - Clean up commented BacktestOrderExecutor refs in test_eventloop - 1423 passed, 42 skipped
- 6994680 refactor: route all orders through Blotter, add DefaultBlotter, update docs
- 27c99a2 feat: add Blotter system for trade documentation and order book management
- c5fdea2 Merge pull request feat: add CSV, JSON, and Parquet URL data providers #472 from coding-kitties/feature/external-data-providers
- b248180 fix: update DataSource tests for new URL provider fields
- 2b635df feat: add CSV, JSON, and Parquet URL data providers
- 6d564f3 Merge pull request feat: add Yahoo Finance OHLCV data provider #470 from coding-kitties/feature/yahoo-finance-data-provider
- 1dc5026 Use 2% as default risk-free rate fallback
- 15aaf2a Return default 4% risk-free rate when yfinance unavailable
- dd24e4f Make yfinance import lazy in risk_free_rate.py
- c4a9c6f Make Yahoo, Alpha Vantage, and Polygon data providers optional extras
- 33ae330 Fix poetry.lock: cap Python <4.0 to resolve polygon-api-client dependency
- 0b2b939 Fix flake8 errors, docstrings, and add data provider docs
- 0521db7 refactor: extract OHLCVDataProviderBase to eliminate duplication
- 45656c4 feat: add Alpha Vantage and Polygon.io OHLCV data providers (feat: add built-in data providers for common OHLCV sources #469)
- 09aef25 feat: add Yahoo Finance OHLCV data provider (feat: add built-in data providers for common OHLCV sources #469)
- Add YahooOHLCVDataProvider class for stocks, ETFs, indices, forex, and crypto - Support market='YAHOO' in DataSource to auto-select Yahoo provider - Implement has_data, get_data, prepare_backtest_data, get_backtest_data, copy - Map framework TimeFrame values to yfinance intervals - Register as default data provider alongside CCXT - Add comprehensive unit tests with mocked yfinance
- Add AlphaVantageOHLCVDataProvider (market='ALPHA_VANTAGE') with API key via MarketCredential - Add PolygonOHLCVDataProvider (market='POLYGON') with API key via MarketCredential - Both follow same pattern as Yahoo/CCXT: auto-selected based on market value - Add alpha_vantage and polygon-api-client dependencies - Register both as default data providers - Add comprehensive unit tests (32 tests with mocked external calls)
Introduce an intermediate base class OHLCVDataProviderBase that handles all shared OHLCV data provider logic: - Constructor, copy(), get_data(), prepare_backtest_data(), get_backtest_data() - CSV storage helpers, date range resolution, number of data points - Fixes bug: create_start_date was missing from Yahoo/AV/Polygon providers Concrete providers now only implement: - market_name, timeframe_map (class attributes) - _download_ohlcv() (API-specific download) - _validate_symbol() (optional, Yahoo only) Reduces Yahoo/AlphaVantage/Polygon from ~1,851 lines to ~1,033 total (44% reduction). CCXT intentionally excluded (different pattern: exchange-based detection, pagination, ticker support).
- Remove unused imports (F401) in alpha_vantage, polygon, yahoo, ohlcv_base - Fix CSVOHLCVDataProvider __init__ docstring placement - Fix PandasOHLCVDataProvider docstring: 'CSV file' -> 'pandas DataFrame' - Add custom data providers documentation - Update data sources docs with market info and links
- Move yfinance, alpha_vantage, polygon-api-client from required to optional deps - Add poetry extras: [yahoo], [alpha_vantage], [polygon], [all] - Use lazy imports with placeholder classes that raise helpful ImportError - Only include available providers in get_default_data_providers() - Update installation docs with extras install commands - Add install hints to each provider section in data-sources docs
The metrics module imported yfinance at module level, which broke the entire framework when yfinance was not installed (now optional). Move import inside get_risk_free_rate_us() with graceful fallback.
Instead of returning None, fall back to a 4% default rate so metrics like Sortino/Sharpe ratios work without yfinance installed.
…a-provider feat: add Yahoo Finance OHLCV data provider
- Add BaseURLDataProvider with shared caching, refresh intervals, date parsing, and pre/post-processing logic - Add CSVURLDataProvider, JSONURLDataProvider, ParquetURLDataProvider - Add DataSource.from_csv(), from_json(), from_parquet() factory methods - Add context.fetch_csv(), fetch_json(), fetch_parquet() on-demand methods - Fix cache path resolution for cloud deployments (AWS Lambda / Azure Functions) - Add 43 tests covering all three providers - Add external-data.md documentation page - Update README with external data capabilities Closes #458
…viders feat: add CSV, JSON, and Parquet URL data providers
…ement - Add Blotter ABC with place_order, cancel_order, batch_order, and transaction recording - Add SimulationBlotter with configurable slippage and commission models - Add SlippageModel (NoSlippage, PercentageSlippage, FixedSlippage) - Add CommissionModel (NoCommission, PercentageCommission, FixedCommission) - Add Transaction data class for trade documentation - Integrate blotter into App (set_blotter/get_blotter) and Context (batch_order/get_transactions) - Add 43 unit tests Closes #457
…e docs - Add DefaultBlotter as pass-through blotter for live trading - Refactor SimulationBlotter to call order_service.create() directly - Route all Context order methods through the Blotter - Refactor create_limit_buy/sell_order to delegate to create_limit_order - Remove conditional blotter checks (always set via App) - Auto-set DefaultBlotter (live) or SimulationBlotter (backtest) - Remove unused OrderType import (flake8) - Add Blotter documentation page (Advanced Concepts) - Update sidebar navigation - Update tests (48 passing)
…fix cancel_order - Delete dead BacktestOrderExecutor (was never called) - Route TradeOrderEvaluator SL/TP orders through blotter via _create_order() - Pass blotter+context to TradeOrderEvaluator in App and BacktestService - Fix cancel_order tests to match delegate-to-order_service pattern - Fix OrderBacktestService.cancel_order pre-existing bug - Clean up commented BacktestOrderExecutor refs in test_eventloop - 1423 passed, 42 skipped
- Move slippage/commission from order creation to fill time in SimulationBlotter, eliminating double-counting - Add VolumeImpactSlippage model (power-law market impact) - Add FillModel ABC with FullFill and VolumeBasedFill for partial fill simulation - Refactor BacktestTradeOrderEvaluator to delegate to blotter methods (get_fill_price, get_fill_commission, get_fill_amount, on_fill) with TradingCost fallback - Record transactions at fill time via blotter.on_fill() - Clean test_eventloop.py: remove ~500 lines of commented-out code - Update test_blotter.py for new fill-time architecture
feat: Blotter System for Trade Documentation and Order Book Management
- Add FXRateProvider ABC and StaticFXRateProvider implementation - Wire FX rate provider and base currency into App and Context - Add context.get_fx_rate(), convert_to_base_currency(), get_portfolio_value() - Auto-convert multi-market portfolio values to base currency - StaticFXRateProvider supports inverse rates and case-insensitive lookups - Add 17 unit tests for FX models - Add docs page for FX conversion (Advanced Concepts)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.