Backtest Strategy
Runs backtests on trading strategies and provides performance analysis.
Real Code Reference
tradinglearn/backtest/backtester.py—Backtesterclass:run_backtest(data, strategy_class, strategy_params),get_performance(),plot_results()tradinglearn/strategies/macd_strategy.py—MACDStrategywithgenerate_signals(data)→ positionstradinglearn/pytdx2/backtest.py—BacktestEngine+BacktestConfig+BaseStrategytradinglearn/utils/parameter_optimizer.py—ParameterOptimizer.optimize_macd_parameters()
Architecture
DataLoader → Strategy signals → Portfolio tracking → Metrics calculation → Report
- DataLoader — fetch historical K-line via
data_fetcher.fetch_stock_data(ticker, start, end) - Strategy — generate buy/sell signals per bar (
MACDStrategy(fast, slow, signal)) - Backtester —
run_backtest(data, MACDStrategy, params)iterates bars, tracks positions - Metrics —
get_performance()returns Sharpe, max drawdown, win rate, total return, CAGR - Plot —
plot_results()shows price vs portfolio value overlay
Usage
from backtest.backtester import Backtester
from strategies.macd_strategy import MACDStrategy
from utils.data_fetcher import fetch_stock_data
data = fetch_stock_data("000001", start_date="2024-01-01", end_date="2025-01-01")
bt = Backtester(initial_capital=100000.0, transaction_cost=0.001)
bt.run_backtest(data, MACDStrategy, {"fast_period": 12, "slow_period": 26, "signal_period": 9})
bt.generate_detailed_report()
bt.plot_results()
Key Checks
- No lookahead bias — signal at bar
tuses only data up to bart - Out-of-sample validation separate from parameter optimization
- Account for transaction costs (commission + slippage)
- Handle corporate actions (splits, dividends) in price data