| """ |
| Sample Backtest Script — Test the walk-forward engine on a small subset. |
| """ |
| import logging |
| from backend.backtesting.backtester import run_portfolio_backtest |
| from config import INDIA_UNIVERSE, US_UNIVERSE |
|
|
| |
| logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") |
|
|
| def main(): |
| |
| test_tickers = INDIA_UNIVERSE[:5] + US_UNIVERSE[:5] |
| |
| |
| print(f"Starting sample backtest on: {test_tickers}") |
| results = run_portfolio_backtest(test_tickers, period="1y", initial_capital=10_00_000) |
| |
| if "error" in results: |
| print(f"Error: {results['error']}") |
| return |
|
|
| |
| metrics = results["metrics"] |
| print("\n" + "="*40) |
| print(" BACKTEST RESULTS SUMMARY") |
| print("="*40) |
| print(f"Total Return: {metrics['total_return_pct']}%") |
| print(f"Max Drawdown: {metrics['max_drawdown_pct']}%") |
| print(f"Win Rate: {metrics['win_rate_pct']}%") |
| print(f"Total Trades: {metrics['total_trades']}") |
| print(f"Final Equity: ₹{metrics['final_equity']:,.2f}") |
| print("="*40) |
| |
| |
| if results["trades"]: |
| from backend.backtesting.monte_carlo import run_monte_carlo, print_mc_report |
| mc_stats, _ = run_monte_carlo(results["trades"], 10_00_000) |
| print_mc_report(mc_stats) |
|
|
| |
| if results["trades"]: |
| print("\nLast 5 Trades:") |
| for t in results["trades"][-5:]: |
| status = t.get("status", "Open") |
| print(f"- {t['ticker']}: Entry {t['entry_price']} | Exit {t.get('exit_price', 'N/A')} | PnL {t.get('pnl', 0):.2f} | {status}") |
|
|
| if __name__ == "__main__": |
| main() |
|
|